Я создаю свою собственную реализацию KNN. Хотя кажется, что все работает, точность, которую я получаю, довольно низкая по сравнению с KNN от sklearn (например, 0,68 против 0,96, протестированных на нескольких подходах). Я также использую 5-кратную перекрестную проверку. Самая важная часть моего кода выглядит следующим образом:
def knn(X, y, Z, k):
mod_lst = []
for i in range(Z.shape[0]):
distance = []
for j in range(X.shape[0]):
distance.append(np.linalg.norm(X.iloc[j] - Z.iloc[i]))
mod_lst.append(modde(distance,y,k))
return mod_lst
def modde(ret,y,k):
'''sorting distances in ascending order'''
dic = {i: ret[i] for i in range(0, len(ret))}
dic1 = {r: v for r, v in sorted(dic.items(), key=lambda item: item[1])}
ind = [dic1.keys()]
a = list(dic1.keys())
'''sorting y (labels) in ascending order'''
d = [x for _, x in sorted(zip(a,y))]
d = d[:k]
d = list(map(int, d))
modw = statistics.mode(d)
return modw
Где:
k = 5
X - training set (data, a nxm matrix of points in R^m)
y - training set (labels, 1xn array of zeros, ones, etc)
Z - testing set
Почему мои результаты отличаются от результатов реализации scikit-learn?