From bde1897945bbf0536b7cb0538004e981741d11d6 Mon Sep 17 00:00:00 2001 From: widad174 <azzouzi.widad.17@gmail.com> Date: Thu, 26 Oct 2023 18:43:39 +0200 Subject: [PATCH] Partie 1 --- .gitignore | 2 +- __pycache__/knn.cpython-311.pyc | Bin 0 -> 6209 bytes __pycache__/read_cifar.cpython-311.pyc | Bin 0 -> 4358 bytes knn.py | 90 ++++++++++++++ main.py | 13 ++ read_cifar.py | 159 ++++++++++++------------- resultats/Knn.png | Bin 0 -> 45800 bytes 7 files changed, 179 insertions(+), 85 deletions(-) create mode 100644 __pycache__/knn.cpython-311.pyc create mode 100644 __pycache__/read_cifar.cpython-311.pyc create mode 100644 knn.py create mode 100644 main.py create mode 100644 resultats/Knn.png diff --git a/.gitignore b/.gitignore index 5469eef..b9cc962 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -DATA +data Env_Deep diff --git a/__pycache__/knn.cpython-311.pyc b/__pycache__/knn.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a72d35584c1c74976a3fcd277918627ba2303a9c GIT binary patch literal 6209 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 literal 0 HcmV?d00001 diff --git a/__pycache__/read_cifar.cpython-311.pyc b/__pycache__/read_cifar.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab2c0562b5bc35efe9e0bad8233915e686e34383 GIT binary patch literal 4358 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 F0|0?(CD{M~ literal 0 HcmV?d00001 diff --git a/knn.py b/knn.py new file mode 100644 index 0000000..07a3b38 --- /dev/null +++ b/knn.py @@ -0,0 +1,90 @@ +import numpy as np +import matplotlib.pyplot as plt + +def distance_matrix(train, test): + """ + Args: + train (np.ndarray(np.float32)): La matrice de données d'images d'entraînement de forme (n, m). + test (np.ndarray(np.float32)): La matrice de données d'images de test de forme (m, p). + + Retourne: + np.ndarray(np.float32): La matrice des distances euclidiennes L2 entre train et test, de forme (n, p). + + """ + + dists = np.sqrt(-2 * np.matmul(train, test.T) + + np.sum(train*train, axis=1, keepdims=True) + + np.sum(test*test, axis=1, keepdims=True).T) + print('finished calculating dists') + + return dists + +def mode(x): + """ + Args: + x (float): un tableau de nombres + + Retourne: + float: le mode de x + + """ + vals, counts = np.unique(x, return_counts=True) + + return vals[np.argmax(counts)] + +def knn_predict(dists, labels_train, k): + """ + Cette fonction prédit les étiquettes pour les exemples de test dans la matrice de distances "dists" en utilisant les k plus proches voisins du test dans l'ensemble d'entraînement. + Retourne : + labels_pred (tableau numpy) : tableau de taille (k, num_test) des étiquettes prédites pour les données de test. + + """ + + indexes_of_knn = np.argsort(dists, axis=0)[0:k, :] + nearest_labels_pred = labels_train[indexes_of_knn] + labels_pred = np.array([ mode(label) for label in nearest_labels_pred.T ]) + + return labels_pred + +def evaluate_knn_for_k(data_train, labels_train, data_test, labels_test, K_max): + """ + Args: + data_train (tableau numpy): données d'entraînement + labels_train (tableau numpy): étiquettes d'entraînement + data_test (tableau numpy): données de test + labels_test (tableau numpy): étiquettes de test + k_max (entier) : nombre maximal de voisins dans le k-NN + + Retourne: + accuracies (Liste): Liste des précisions des prédictions pour chaque valeur de k. + + """ + + accuracies = [0] * K_max + dists = distance_matrix(data_train, data_test) + + for k in range(1, K_max + 1): + labels_pred = knn_predict(dists, labels_train, k) + accuracy = np.sum(labels_pred == labels_test) / len(labels_test) + accuracies[k - 1] = accuracy + + return accuracies + +def plot_accuracy_versus_k(accuracies): + """ + Cette fonction génère un graphique illustrant la variation de la précision en fonction de k + et sauvegarde le graphique dans le dossier /results. + + """ + + k = len(accuracies) + + fig = plt.figure(figsize=(12, 8)) + plt.plot(np.arange(1, k+1, 1), accuracies, 'o-r') + plt.title("Variation of the accuracy as a function of k") + plt.xlabel("k (number of neighbors)") + plt.ylabel("Accuracy") + ax = fig.gca() + ax.set_xticks(np.arange(1, k+1, 1)) + plt.grid(axis='both', which='both') + plt.savefig(r'C:\Users\hp\Desktop\BE\image-classification\resultats\Knn.png') \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..bcda22e --- /dev/null +++ b/main.py @@ -0,0 +1,13 @@ +from read_cifar import * +from knn import * + +path = r'C:\Users\hp\Desktop\BE\image-classification\data' + +if __name__ == "__main__": + split_factor = 0.9 + X, y = read_cifar(path) + X_train,y_train,X_test,y_test=split_dataset(X,y,split=0.9) + + K_max=20 + accuries=evaluate_knn_for_k(X_train, y_train, X_test, y_test, K_max) + plot_accuracy_versus_k(accuries) \ No newline at end of file diff --git a/read_cifar.py b/read_cifar.py index ad16d24..bc11bac 100644 --- a/read_cifar.py +++ b/read_cifar.py @@ -1,88 +1,79 @@ -import pickle import numpy as np +import os +import pickle -#read_cifaar_batch -def read_cifar_batch(file) : - with open(file, 'rb') as fo: - dictionnaire = pickle.load(fo, encoding='bytes') - data=dictionnaire[b'data'].astype(np.float32) - labels=np.array(dictionnaire[b'labels'],np.int64) - return data,labels -''' -EXPLICATION DE LA FONCTION: -read_cifaar_batch function: read the path of a single batch. - -Arguments: -- The path of a single batch as a string, - -Returns: -- Matrix data of size (batch_size x data_size) -- Vector labels of size batch_size - -The data must be np.float32 array and labels must be np.int64 array. -''' - - - - -# read_cifar -def read_cifar(folder): - batch_file=["data_batch_1","data_batch_2","data_batch_3","data_batch_4","data_batch_5","test_batch"] - for i in range(len(batch_file)): - path= folder +'/'+batch_file[i] - if i==0: - data,labels=read_cifar_batch(path) +def unpickle(file): + with open(file, 'rb') as fo: + dict = pickle.load(fo, encoding='bytes') + return dict + +#La fonction lecture_cifar : prenne en argument le chemin du répertoire contenant les données, et renvoyant une matrice X de taille NxD où N correspond au nombre de données disponibles, et D à la dimension de ces données (nombre de valeurs numériques décrivant les données), ainsi qu'un vecteur Y de taille N dont les valeurs correspondent au code de la classe de la donnée de même indice dans X. + +#X et Y sont objets numpy +def read_cifar_batch(file): + """ + read_cifaar_batch function: read the path of a single batch. + + Arguments: + - The path of a single batch as a string, + + Returns: + - Matrix data of size (batch_size x data_size) + - Vector labels of size batch_size + """ + dict = unpickle(file) + data = dict[b'data'].astype(np.float32) + labels = np.array(dict[b'labels'], dtype=np.int64) + labels = labels.reshape(labels.shape[0]) + + return data, labels + +def read_cifar(path): + """ + read_cifaar function: read the path of the directory containing all batches (including test_batch). + + Arguments: + - the path of the directory containing the six batches (five data_batch and one test_batch) as a string + + Returns: + - Matrix data of size (batch_size x data_size) + - Vector labels of size batch_size + """ + data_batches = ["data_batch_" + str(i) for i in range(1, 6)] + ['test_batch'] + + flag = True + + for db in data_batches: + data, labels = read_cifar_batch(os.path.join(path, db)) + if flag: + DATA = data + LABELS = labels + flag = False else: - x,y=read_cifar_batch(path) - data =np.vstack([data ,x]) # all data for all batches is in variable "data" - labels=np.hstack([labels,y]) # All labels for all batches is in variable "labels" - return data ,labels - -''' -EXPLICATION DE LA FONCTION: -read_cifaar function: read the path of the directory containing all batches (including test_batch). - -Arguments: -- the path of the directory containing the six batches (five data_batch and one test_batch) as a string - -Returns: -- Matrix data of size (batch_size x data_size) -- Vector labels of size batch_size< - -The data must be np.float32 array and labels must be np.int64 array. -''' - - -# split_dataset - -def split_dataset(data,labels,split): - labels=labels.reshape(data.shape[0],1) - # Stack our Data and labels - con = np.hstack((data, labels)) - k=int(split*con.shape[0]) - # Shuffle all our Data stack it - np.random.shuffle(con) - # Train - X_train=con[:k,:-1] - y_train=np.array(con[:k,-1],np.int64) - # Test - X_test=con[k:,:-1] - y_test=np.array(con[k:,-1],np.int64) - return X_train,y_train,X_test,y_test - -''' -EXPLICATION DE LA FONCTION: -split_dataset function: splits the dataset into a training set and a test set. - -Arguments: -- data and labels, two arrays that have the same size in the first dimension. -- split, a float between 0 and 1 which determines the split factor of the training set with respect to the test set. - -Returns: -- data_train: the training data, -- labels_train: the corresponding labels, -- data_test: the testing data, and -- labels_test: the corresponding labels. -''' - + DATA = np.concatenate((DATA, data), axis=0, dtype=np.float32) + LABELS = np.concatenate((LABELS, labels), axis=-1, dtype=np.int64) + return DATA, LABELS + +def split_dataset(data, labels, split=0.6): + """ + split_dataset function: splits the dataset into a training set and a test set. + + Arguments: + - data and labels, two arrays that have the same size in the first dimension. + - split, a float between 0 and 1 which determines the split factor of the training set with respect to the test set. + + Returns: + - data_train: the training data, + - labels_train: the corresponding labels, + - data_test: the testing data, and + - labels_test: the corresponding labels. + """ + n = data.shape[0] + indices = np.random.permutation(n) + train_idx, test_idx = indices[:int(split*n)], indices[int(split*n):] + + data_train, data_test = data[train_idx,:].astype(np.float32), data[test_idx,:].astype(np.float32) + labels_train, labels_test = labels[train_idx].astype(np.int64), labels[test_idx].astype(np.int64) + + return data_train, labels_train, data_test, labels_test \ No newline at end of file diff --git a/resultats/Knn.png b/resultats/Knn.png new file mode 100644 index 0000000000000000000000000000000000000000..926556a3309ceb450d489a8e4e5d4d85b3763aee GIT binary patch literal 45800 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%0A5&%3z0&t9-V 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 byY8R;!F!h!R~4SD26@@j)z4*}Q$iB}10ILB literal 0 HcmV?d00001 -- GitLab