kNN – 如何根据计算出的距离在训练矩阵中定位最近邻

我正在尝试用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-最近邻的样本或样本数组

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注