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

Add Knn.py

parent 5d5c8a68
No related branches found
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