Solution and implementation for Q3 from Machine Learning (ml).
# Import required libraries import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.svm import SVC from sklearn.metrics import accuracy_score, classification_report, ConfusionMatrixDisplay
# Load the handwritten digits dataset
digits = load_digits()
X = digits.data
y = digits.target
print("Dataset shape:", X.shape)
print("Digit classes:", np.unique(y))# Display some sample handwritten digit images
fig, axes = plt.subplots(2, 5, figsize=(10, 5))
for ax, image, label in zip(axes.ravel(), digits.images, y):
ax.imshow(image, cmap="gray")
ax.set_title(f"Label: {label}")
ax.axis("off")
plt.tight_layout()
plt.show()# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)# Scale the features and train the SVM classifier
svm_model = make_pipeline(
StandardScaler(),
SVC(kernel="rbf", C=10, gamma="scale")
)
svm_model.fit(X_train, y_train)# Predict digit classes and evaluate model accuracy
y_pred = svm_model.predict(X_test)
print("Accuracy:", round(accuracy_score(y_test, y_pred), 4))
print(classification_report(y_test, y_pred))# Display the confusion matrix
ConfusionMatrixDisplay.from_predictions(y_test, y_pred, cmap="Blues")
plt.title("SVM Confusion Matrix")
plt.tight_layout()
plt.show()# Display one random digit prediction
index = np.random.randint(len(X_test))
plt.figure(figsize=(4, 4))
plt.imshow(X_test[index].reshape(8, 8), cmap="gray")
plt.title(f"Actual: {y_test[index]}\nPredicted: {y_pred[index]}")
plt.axis("off")
plt.show()# Import required libraries import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay from sklearn.metrics import accuracy_score, precision_score, recall_score
# Load the Social Network Ads dataset
data = pd.read_csv("Social_Network_Ads.csv")
print(data.shape)
data.head()# Prepare features and target
data = data.drop(columns=["User ID"], errors="ignore")
data = pd.get_dummies(data, columns=["Gender"], drop_first=True)
X = data.drop(columns=["Purchased"])
y = data["Purchased"]
print("Features:", X.columns.tolist())
print("Target classes:", sorted(y.unique()))# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)# Scale the features and train the KNN classifier
knn_model = make_pipeline(
StandardScaler(),
KNeighborsClassifier(n_neighbors=5)
)
knn_model.fit(X_train, y_train)# Predict whether each user will purchase y_pred = knn_model.predict(X_test)
# Calculate confusion matrix and evaluation metrics
cm = confusion_matrix(y_test, y_pred, labels=[0, 1])
accuracy = accuracy_score(y_test, y_pred)
error_rate = 1 - accuracy
precision = precision_score(y_test, y_pred, zero_division=0)
recall = recall_score(y_test, y_pred, zero_division=0)
print("Confusion Matrix:\n", cm)
print("Accuracy:", round(accuracy, 4))
print("Error Rate:", round(error_rate, 4))
print("Precision:", round(precision, 4))
print("Recall:", round(recall, 4))# Visualize the confusion matrix
ConfusionMatrixDisplay(
confusion_matrix=cm,
display_labels=["Not Purchased", "Purchased"]
).plot(cmap="Blues")
plt.title("KNN Confusion Matrix")
plt.tight_layout()
plt.show()