PGM 1
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing(as_frame=True)
df = housing.frame
print(f"Shape: {df.shape}\nColumns: {df.columns.tolist()}")
df.info()
print("\nFirst 5 rows:\n", df.head())
df.hist(figsize=(15, 10), bins=30, edgecolor='black')
plt.suptitle("Histograms of All Numerical Features", fontsize=16)
plt.tight_layout()
plt.figure(figsize=(15, 6))
sns.boxplot(data=df)
plt.title("Boxplots of All Numerical Features")
plt.xticks(rotation=45)
plt.show()
print("\nOutlier Detection using IQR Method:")
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
outliers_count = ((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).sum()
print(outliers_count)
-----------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 2
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
df = fetch_california_housing(as_frame=True).frame
print(df.head(), "\nCorrelation Matrix:\n", df.corr())
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)
plt.title("Correlation Matrix Heatmap - California Housing")
sns.pairplot(df[["MedInc", "HouseAge", "AveRooms", "Population", "MedHouseVal"]],
diag_kind='hist')
plt.show()
--------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 3
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
iris = datasets.load_iris()
X_pca = PCA(n_components=2).fit_transform(iris.data)
print("First 5 PCA values:")
print(X_pca[:5])
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iris.target)
plt.xlabel("pc1")
plt.ylabel("pc2")
plt.title("PCA on Iris Dataset")
plt.show()
-----------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 4
import pandas as pd
data = {
'Sky': ['Sunny', 'Sunny', 'Rainy', 'Sunny'],
'Temp': ['Warm', 'Warm', 'Cold', 'Warm'],
'Humidity': ['Normal', 'High', 'High', 'High'],
'Wind': ['Strong', 'Strong', 'Strong', 'Strong'],
'Water': ['Warm', 'Warm', 'Warm', 'Cool'],
'Forecast': ['Same', 'Same', 'Change', 'Change'],
'Enjoy': ['Yes', 'Yes', 'No', 'Yes']
}
df = pd.DataFrame(data)
def find_s(df):
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values
hypothesis = list(X[0])
for i in range(len(X)):
if y[i] == "Yes":
for j in range(len(hypothesis)):
if hypothesis[j] != X[i][j]:
hypothesis[j] = '?'
return hypothesis
result = find_s(df)
print("Learned Hypothesis:")
print("<" + " AND ".join(str(f) for f in result) + ">")
------------------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 5
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
np.random.seed(42)
X_train = np.random.rand(50, 1)
y_train = np.array([1 if x <= 0.5 else 2 for x in X_train.ravel()])
X_test = np.random.rand(50, 1)
k_values = [1, 2, 3, 4, 5, 20, 30]
plt.figure(figsize=(12, 8))
for i, k in enumerate(k_values, 1):
knn = KNeighborsClassifier(n_neighbors=k).fit(X_train, y_train)
y_pred = knn.predict(X_test)
plt.subplot(2, 4, i)
plt.scatter(X_train, y_train, color='blue', label='Train', s=15)
plt.scatter(X_test, y_pred, color='red', label=f'k={k}', marker='x')
plt.title(f'KNN with k={k}')
plt.xlabel('x')
plt.ylabel('class')
plt.ylim(0, 3)
plt.legend()
plt.tight_layout()
plt.show()
---------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 6
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
data = fetch_california_housing()
x = data.data[:200, 2:3]
y = data.target[:200]
def lwr_predict(X_train, y_train, X_test, tau):
m = X_train.shape[0]
X_aug = np.hstack([np.ones((m, 1)), X_train])
X_test_aug = np.hstack([np.ones((1, 1)), X_test])
weights = np.exp(-np.sum((X_train - X_test)**2, axis=1) / (2 * tau**2))
W = np.diag(weights)
theta = np.linalg.pinv(X_aug.T @ W @ X_aug) @ (X_aug.T @ W @ y_train)
return X_test_aug @ theta
X_test_range = np.linspace(x.min(), x.max(), 100)
taus = [0.1, 0.5, 1.0, 2.0]
plt.figure(figsize=(10, 6))
plt.scatter(x, y, alpha=0.5, label="Data Points")
for tau in taus:
y_pred = [lwr_predict(x, y, np.array([[val]]), tau) for val in X_test_range]
plt.plot(X_test_range, y_pred, label=f"LWR (tau={tau})")
plt.title("Locally Weighted Regression (LWR)")
plt.xlabel("Average Number of Rooms (AveRooms)")
plt.ylabel("Median House Value")
plt.legend()
plt.show()
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 7
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
# Linear Regression
h = fetch_california_housing(as_frame=True)
X, y = h.data[['AveRooms']], h.target
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=42)
lr = LinearRegression().fit(Xtr, ytr)
yp = lr.predict(Xte)
plt.scatter(Xte, yte, c='b')
plt.plot(Xte, yp, 'r')
plt.title("Linear Regression")
plt.xlabel("AveRooms")
plt.ylabel("House Value")
plt.show()
print("Linear Regression")
print("MSE:", mean_squared_error(yte, yp))
print("R2:", r2_score(yte, yp))
# Polynomial Regression
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data"
cols = ["mpg","cyl","disp","hp","wt","acc","year","org"]
df = pd.read_csv(url, sep=r"\s+", names=cols, na_values="?").dropna()
X, y = df[['disp']], df.mpg
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=42)
model = make_pipeline(PolynomialFeatures(2), StandardScaler(), LinearRegression())
model.fit(Xtr, ytr)
yp = model.predict(Xte)
plt.scatter(Xte, yte, c='b')
plt.scatter(Xte, yp, c='r')
plt.title("Polynomial Regression")
plt.xlabel("Displacement")
plt.ylabel("MPG")
plt.show()
print("\nPolynomial Regression")
print("MSE:", mean_squared_error(yte, yp))
print("R2:", r2_score(yte, yp))
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 8
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.3, random_state=42
)
clf = DecisionTreeClassifier(random_state=42).fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f"Accuracy score: {accuracy_score(y_test, y_pred)*100:.2f}%")
new_sample = np.zeros((1, 30))
new_sample[0, :5] = [15.2, 20.3, 100.1, 0.1, 0.3]
prediction = clf.predict(new_sample)
print(f"Prediction: {data.target_names[prediction][0]}")
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=data.feature_names,
class_names=data.target_names, rounded=True)
plt.title("Decision Tree for Breast Cancer Classification")
plt.show()
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 9
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_olivetti_faces
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
faces = fetch_olivetti_faces(shuffle=True, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
faces.data, faces.target, test_size=0.2, random_state=42)
nb = GaussianNB().fit(X_train, y_train)
y_pred = nb.predict(X_test)
print(f"Accuracy of the Naive Bayes classifier: {accuracy_score(y_test, y_pred)*100:.2f}%")
fig, axes = plt.subplots(2, 5, figsize=(12, 6))
for i, ax in enumerate(axes.flat):
ax.imshow(X_test[i].reshape(64, 64), cmap='gray')
ax.set_title(f"Pred: {y_pred[i]} True: {y_test[i]}")
ax.axis('off')
plt.tight_layout()
plt.show()
pca = PCA(n_components=100, whiten=True, random_state=42)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
nb_pca = GaussianNB().fit(X_train_pca, y_train)
acc_pca = accuracy_score(y_test, nb_pca.predict(X_test_pca))
print(f"Accuracy with PCA: {acc_pca*100:.2f}%")
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PGM 10
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score, confusion_matrix
data = load_breast_cancer()
X_scaled = StandardScaler().fit_transform(data.data)
kmeans = KMeans(n_clusters=2, random_state=42).fit(X_scaled)
y_km = kmeans.labels_
X_pca = PCA(2).fit_transform(X_scaled)
centers_pca = PCA(2).fit_transform(kmeans.cluster_centers_)
print(f"Accuracy: {accuracy_score(data.target, y_km)*100:.2f}%")
print("Confusion Matrix:\n", confusion_matrix(data.target, y_km))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_km, cmap='viridis', s=50)
plt.scatter(centers_pca[:, 0], centers_pca[:, 1], c='red', marker='x', s=200, label='centroids')
plt.title("K-Means Clustering on Breast Cancer Data")
plt.legend()
plt.show()
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2 views