from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# Reshape data from 3D array to (n, 784)
X_train_reshaped = X_train.reshape(-1, 28*28)/255.0
X_test_reshaped = X_test.reshape(-1, 28*28)/255.0
# Model
knn = KNeighborsClassifier(n_neighbors=3)
knn = knn.fit(X_train_reshaped, y_train)
y_pred = knn.predict(X_test_reshaped)
test_mnist = pd.DataFrame(
data={'Accuracy': accuracy_score(y_test, y_pred),
'Precision': precision_score(y_test, y_pred, average="macro"),
'Recall': recall_score(y_test, y_pred, average="macro"),
'F1-score': f1_score(y_test, y_pred, average="macro")},
columns=["Accuracy", "Precision", "Recall", "F1-score"],
index=[f"3NN"])
# PCA
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
pca = PCA(n_components=150)
X_proj_train = pca.fit_transform(X_train_reshaped)
X_proj_test = pca.transform(X_test_reshaped)
# Model
param_grid = {'n_neighbors': [1,2,3]}#list(range(2,31))}
knn = KNeighborsClassifier()
grid_search = GridSearchCV(knn, param_grid, cv=5, scoring=scorer, return_train_score=True)
grid_search.fit(X_proj_train, y_train)
knn = KNeighborsClassifier(n_neighbors=grid_search.best_params_['n_neighbors'])
knn = knn.fit(X_proj_train, y_train)
y_pred = knn.predict(X_proj_test)
test_mnist = pd.concat([test_mnist, pd.DataFrame(
data={'Accuracy': accuracy_score(y_test, y_pred),
'Precision': precision_score(y_test, y_pred, average="macro"),
'Recall': recall_score(y_test, y_pred, average="macro"),
'F1-score': f1_score(y_test, y_pred, average="macro")},
columns=["Accuracy", "Precision", "Recall", "F1-score"],
index=[f"{grid_search.best_params_['n_neighbors']}NN_PCA"])], axis=0)
# Fourier transform
from scipy.fftpack import fft2, fftshift
def compute_fourier_transform(image):
f_transform = fft2(image)
f_transform_shifted = fftshift(f_transform)
magnitude_spectrum = np.abs(f_transform_shifted)
return magnitude_spectrum
X_train_fft = np.array([compute_fourier_transform(img) for img in X_train]).reshape(-1, 28*28)
X_test_fft = np.array([compute_fourier_transform(img) for img in X_test]).reshape(-1, 28*28)
# Model
knn = KNeighborsClassifier()
grid_search = GridSearchCV(knn, param_grid, cv=5, scoring=scorer, return_train_score=True)
grid_search.fit(X_train_fft, y_train)
knn = KNeighborsClassifier(n_neighbors=grid_search.best_params_['n_neighbors'])
knn = knn.fit(X_train_fft, y_train)
y_pred = knn.predict(X_test_fft)
test_mnist = pd.concat([test_mnist, pd.DataFrame(
data={'Accuracy': accuracy_score(y_test, y_pred),
'Precision': precision_score(y_test, y_pred, average="macro"),
'Recall': recall_score(y_test, y_pred, average="macro"),
'F1-score': f1_score(y_test, y_pred, average="macro")},
columns=["Accuracy", "Precision", "Recall", "F1-score"],
index=[f"{grid_search.best_params_['n_neighbors']}NN_FT"])], axis=0)
test_mnist