Skip to content
Snippets Groups Projects
Commit a34e29fb authored by Delorme Antonin's avatar Delorme Antonin
Browse files

Upload New File

parent 55ce9e8d
No related branches found
No related tags found
No related merge requests found
knn.py 0 → 100644
import pickle
import numpy as np
import read_cifar as rd
from math import *
import matplotlib.pyplot as plt
def distance_matrix(a,b):
at=np.transpose(a)
bt=np.transpose(b)
som_carr_a=np.sum(np.square(a), axis=1, keepdims=True)
som_carr_b=np.sum(np.square(b), axis=1, keepdims=True)
prod=np.dot(a,bt)
return ( np.sqrt(som_carr_a + np.transpose(som_carr_b) - 2 * prod) )
def knn_predict(dists,labels_train,k):
predict=[]
for i in range(len(dists)):
Glob_dist=[]
Glob_min=[]
for j in range(len(dists[i])):
Glob_dist.append(dists[i][j])
for p in range(k):
m = min(Glob_dist)
index = Glob_dist.index(m)
Glob_min.append(labels_train[index])
del(Glob_dist[index])
Temp=np.bincount(Glob_min)
predict.append(list(Temp).index(max(Temp)))
return predict
def evaluate_knn(data_train,data_test,labels_train,labels_test,k,dist):
pred=knn_predict(dist, labels_train, k)
tot=0
bon=0
for i in range(len(labels_test)):
if labels_test[i]==pred[i]:
bon+=1
tot+=1
print("Accuracy :",bon/tot)
return bon/tot
if __name__ == "__main__":
#a=np.random.random((2,2))
#b=np.random.random((2,2))
#c=np.eye(2)
path="data\\cifar-10-batches-py"
labels,data=rd.read_cifar(path)
(data_train,labels_train,data_test,labels_test)=rd.split_dataset(labels,data,0.1)
data_train,data_test=data_train.astype(np.float32),data_test.astype(np.float32)
labels_train,labels_test=np.array(labels_train, dtype=np.int16),np.array(labels_test, dtype=np.int16)
print("Taille train : ",len(data_train))
print("Taille test :",len(data_test))
dist=distance_matrix(data_test,data_train)
Res=[]
for k in range(1,21):
print(k,":")
Res.append(evaluate_knn(data_train, data_test, labels_train, labels_test, k,dist))
plt.figure()
plt.title("Accurracy with different k")
plt.plot([i for i in range (1,21)],Res)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment