K最近邻算法

26

使用KNN算法,设k=5。现在我试图通过获取它的5个最近邻来对一个未知对象进行分类。如果在确定了4个最近的邻居之后,接下来的2个(或更多)最近的对象具有相同的距离怎么办?在这2个或更多的对象中应该选择哪一个作为第5个最近的邻居?


2
我投票关闭此问题,因为它与[帮助中]定义的编程不相关,而是涉及ML理论和/或方法 - 请参见machine-learning [标签信息](https://stackoverflow.com/tags/machine-learning/info)中的介绍和注意事项。 - desertnaut
4个回答

26
这2个或更多的对象中,哪一个应该被选择为第5个最近的邻居,这真的取决于你想要如何实现它。大多数算法都会采取以下三种方法之一:
  1. 包括所有相同距离的点,因此对于此估计,它们将使用6个点而不是5个。
  2. 使用两个等距离点中找到的“第一个”点。
  3. 从找到的2个点中选择一个随机点(通常具有一致的种子,以便结果可重现)。
话虽如此,大多数基于径向搜索的算法都具有固有的平稳性假设,在这种情况下,您选择以上哪个选项都无关紧要。总的来说,任何一个选项理论上都应该提供合理的默认值(尤其是因为它们是近似中最远的点,并且应该具有最低的有效权重)。

3
好的,非常感谢您:)(这些信息应该添加到关于KNN的维基百科文章中...) - Gwaihir

6
如果您有另一种距离函数,可以使用它来打破平局。即使是不太好的函数也可以胜任,如果您有一些启发式算法就更好了。例如,如果您知道在计算主要距离时考虑的某个特征更为重要,请仅使用该特征来解决平局。
如果不是这种情况,请随机选择。然后在同一测试集上运行多次程序,以检查随机选择是否重要。

6

另一种有趣的选择是使用最近邻算法,如下所示:

  • 你需要计算每个类别中5个最近邻样本与待分类样本之间的距离:这样你就能得到每个类别中5个距离。

  • 接下来,你需要获取每个类别的平均距离。

  • 平均距离最小的类别即为该样本应被归入的类别。

对于数据集中存在重叠类别的情况,此方法非常有效。


0

如果你有k=5,你会查看前五条记录,找出其中最常见的结果。很可能你会得到两个相同的结果,这会让你陷入困境,因为你有50/50的机会得到每一对。

所以这使得生活变得具有挑战性。那么如何选择k的值呢?有一些指标可以用来分析结果,但没有严格的规定k必须是多少,所以我建议你刚开始时简单点,使用k=3而不是k=5,然后在未来探索一些策略,以帮助你优化k的值,通过查看你预测的实际准确性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接