我正在尝试用Python实现k-最近邻算法。我写出了如下的代码。然而,我在寻找最近邻的项目的索引时遇到了困难。下面的函数会返回距离矩阵,但我需要在features_train
(算法的输入矩阵)中获取这些邻居的索引。
def find_kNN(k, feature_matrix, query_house): alldistances = np.sort(compute_distances(feature_matrix, query_house)) dist2kNN = alldistances[0:k+1] for i in range(k,len(feature_matrix)): dist = alldistances[i] j = 0 #如果有更近的邻居 if dist < dist2kNN[k]: #插入这个新邻居 for d in range(0, k): if dist > dist2kNN[d]: j = d + 1 dist2kNN = np.insert(dist2kNN, j, dist) dist2kNN = dist2kNN[0: len(dist2kNN) - 1] return dist2kNN print find_kNN(4, features_train, features_test[2])
输出为:
[ 0.0028605 0.00322584 0.00350216 0.00359315 0.00391858]
谁能帮我在features_train
中找出这些最近的项目?
回答:
我建议使用Python库sklearn
,它有一个KNeighborsClassifier
,一旦拟合好,你就可以从中检索到你所寻找的最近邻:
试试这个:
# 导入from sklearn.neighbors import KNeighborsClassifier# 实例化你的分类器neigh = KNeighborsClassifier(n_neighbors=4) #k=4或你想要的任何值# 拟合你的分类器neigh.fit(X, y) # 其中X是你的训练集,y是训练输出# 获取邻居neigh.kneighbors(X_test, return_distance=False) # 其中X_test是你想要获取k-最近邻的样本或样本数组