Skip to content
Snippets Groups Projects
Commit c8a8999c authored by selalimi's avatar selalimi
Browse files

Add Knn.py

parent 5d5c8a68
Branches
No related tags found
No related merge requests found
knn.py 0 → 100644
import numpy as np
import os
import pickle
import matplotlib.pyplot as plt
import plotly.graph_objects as go
# Commentaire global expliquant le but du code
'''Here is the code to compute the L2 Euclidean distance matrix and predict labels using k-nearest neighbors:'''
# Create distance Matrix
'''
Arguments :
-Deux matrices.
Returns :
dists : la matrice de distances euclidiennes L2.
La computation de cette fonction doit être effectuée uniquement avec des manipulations de matrices.
'''
def distance_matrix(X, Y):
XX = np.sum(X ** 2, axis=1, keepdims=True)
YY = np.sum(Y ** 2, axis=1, keepdims=True)
XY = X @ Y.T
dists = XX + YY.T - 2 * XY
return dists
# KNN predict
'''
Arguments :
-dists : la matrice de distances entre l'ensemble d'entraînement et l'ensemble de test.
-labels_train : les étiquettes d'entraînement.
- k : le nombre de voisins.
Returns :
-Les étiquettes prédites pour les éléments de data_test.
'''
def knn_predict(dists, labels_train, k):
n_test = dists.shape[0]
y_pred = np.zeros(n_test, dtype=np.int64)
for i in range(n_test):
indices = np.argsort(dists[i])[:k]
k_nearest_labels = labels_train[indices]
y_pred[i] = np.argmax(np.bincount(k_nearest_labels))
return y_pred
# evaluate_knn
'''Here is the code to evaluate k-nearest neighbors and plot the accuracy as a function of k:'''
'''
Arguments :
-data_train : les données d'entraînement.
-labels_train : les étiquettes correspondantes.
-data_test : les données de test.
-labels_test : les étiquettes correspondantes.
-k : le nombre de voisins.
Returns :
-La précision du modèle Knn : le taux de classification entre les valeurs prédites et les observations
réelles des données de test.
'''
def evaluate_knn(data_train, labels_train, data_test, labels_test, k):
dists = distance_matrix(data_test, data_train)
y_pred = knn_predict(dists, labels_train, k)
accuracy = np.mean(y_pred == labels_test)
return accuracy
# Plot Accuracy of KNN model
'''
******La fonction trace la variation de la précision en fonction du nombre de voisins K****
Arguments :
-X_train : données d'entraînement
-y_train : étiquettes d'entraînement
-X_test : données de test
-y_test : étiquettes de test
'''
def plot_KNN(X_train, y_train, X_test, y_test, max_k=20):
neighbors = np.arange(1, max_k + 1)
accuracies = [evaluate_knn(X_train, y_train, X_test, y_test, k) for k in neighbors]
plt.plot(neighbors, accuracies, 'b-o')
plt.xlabel('K')
plt.ylabel('Accuracy')
plt.title('Variation of Accuracy with K')
plt.savefig("Results/knn.png")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment