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

Posted

技术标签:

【中文标题】kNN - 如何根据计算出的距离在训练矩阵中定位最近的邻居【英文标题】:kNN - How to locate the nearest neighbors in the training matrix based on the calculated distances 【发布时间】:2017-02-27 10:21:00 【问题描述】:

我正在尝试使用 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 there is closer neighbor
        if dist < dist2kNN[k]:
        #insert this new neighbor 
            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 中识别这些最近的项目吗?

【问题讨论】:

你的query_house到底在做什么? @MMF 它只是测试集中 house 的一个实例。 features_train 包含所有其他房屋物品 你为什么不用sklearn 【参考方案1】:

我建议使用具有KNeighborsClassifier 的python 库sklearn,安装后,您可以从中检索您正在寻找的最近邻居:

试试这个:

# Import
from sklearn.neighbors import KNeighborsClassifier

# Instanciate your classifier
neigh = KNeighborsClassifier(n_neighbors=4) #k=4 or whatever you want
# Fit your classifier
neigh.fit(X, y) # Where X is your training set and y is the training_output
# Get the neighbors
neigh.kneighbors(X_test, return_distance=False) # Where X_test is the sample or array of samples from which you want to get the k-nearest neighbors

【讨论】:

先生,谢谢您的回答!但是,我应该使用 python 来做到这一点。

以上是关于kNN - 如何根据计算出的距离在训练矩阵中定位最近的邻居的主要内容,如果未能解决你的问题,请参考以下文章

K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?

KNN分类算法原理

机器学习算法(KNN)

matlab中的KNN算法

python用K近邻(KNN)算法分类MNIST数据集和Fashion MNIST数据集

数据挖掘-KNN-K最近邻算法