为什么指标='预计算'在sk-learn的k最近邻居中不起作用吗?

时间:2016-07-18 06:35:05

标签: scikit-learn knn

我在使用http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html时尝试拟合预先计算的内核矩阵,显然可能是因为预先计算了'存在。我允许你传递一个n_samples * n_samples内核矩阵来适应方法。

使用它时,我得到的是:

ValueError:Metric' precomputed'对算法' auto'

无效

我不明白如何使用算法' auto'找到最近的邻居与我使用预先计算的内核矩阵的事实是不相容的。

编辑:

不幸的是,我的问题没有得到任何关注。我已经更深入地查看了源代码,并且当您通过metric=precomputed时似乎存在错误,因为代码应该允许您选择algorithm=auto。而不是那样,在运行时,代码会碰到我提到的valueError,我不认为作者希望他的代码能够以这种方式运行。我不知道如何更改源代码以正常运行。

此外,我想补充一个问题,即从更具理论的角度来看,能够使用核矩阵(又名克矩阵)来使用kNN的拟合方法是完全合理的。您可以从克矩阵中导出距离矩阵,然后当您想要预测新数据时,您只需要找到k个最近邻居,并使用k个最近邻居中最现有的标签标记新数据。

我真的认为这个问题应该得到答案。这是正确的问题,我想要一些非常精确的东西,我知道有更深入了解Python和scikit学习库的人应该能够回答它。也许我错过了一些明显的东西,但我也认为它应该有助于任何人尝试将kNN与预先计算的内核矩阵一起使用(这不是一个孤立的案例)。

1 个答案:

答案 0 :(得分:0)

我想这回复得太迟了,但如果你还在想。 '自动'由于KDTree不接受用户定义或预先计算的指标,因此无法工作。只有Ball Tree才能运作。如果你专门将算法设置为' Ball Tree'它应该工作得很好。希望这有帮助!