用kNN处理关系,权重和投票


14

我正在编写kNN算法,想了解以下内容:

抢七局:

  1. 如果在多数表决中没有明确的获胜者会怎样?例如,所有k个最近的邻居都来自不同的类别,或者对于k = 4,有2个来自A类的邻居和2个来自B类的邻居?
  2. 如果由于更多的邻居具有相同的距离而无法精确确定k个最近的邻居,会发生什么情况?例如,对于距离列表,(x1;2), (x2;3.5), (x3;4.8), (x4;4.8), (x5;4.8), (x6;9.2)将无法确定k = 3或k = 4最近的邻居,因为第3至第5个邻居都具有相同的距离。

重量:

  1. 我读到,在选择获胜级别之前,最好权衡k个最近的邻居。这是如何运作的?即,邻居如何加权,然后如何确定类别?

多数投票的替代方案:

  1. 除多数表决外,还有其他规则/策略来确定获胜者吗?

Answers:


7

理想的方式,打破了平局ķ近邻,我认为将减少ķ 1,直到你已经打破了领带。无论投票权重方案如何,此方法始终有效,因为当 k = 1。如果要增加k,则需要权重方案和类别数,您将无法保证平局。


11
为什么在k = 1时不可能平局,如果有两个邻居属于同一距离的不同类别,怎么确定k = 1的最近邻居?
2014年

6

在执行kNN时,您需要记住一件事,即它不是严格的数学推导算法,而是基于一种直觉的简单分类器/回归器-当参数不变时,基础函数也不会发生很大变化许多。或者换句话说,底层函数是局部近恒定的。通过这种假设,您可以通过最接近的k个点的值的(可能是加权的)平均值来估计任何给定点中基础函数的值。

牢记这一点,您可以意识到,在多数表决中没有明确的获胜者时,没有明显的必要性。您可以始终使用奇数k,也可以使用一些内射加权。

如果邻居3到5距兴趣点的距离相同,则可以只使用两个,也可以全部使用5。同样,请记住,kNN不是从复杂的数学分析中得出的某种算法,而只是一个简单的直觉。您要如何处理这些特殊情况取决于您。

1个||X-ÿ||2

Samory Kpotufe和Abdeslam Boularias今年在NIPS上也发表了一篇不错的论文,涉及找到合适权重的问题。他们的一般直觉是,底层函数在不同方向上有不同的变化(即,其不同的偏导数具有不同的大小),因此,在某种意义上根据此直觉更改度量/权重将是明智的。他们声称这个技巧通常可以改善kNN和内核回归的性能,而且我认为他们甚至有一些理论结果来支持这一观点(尽管我不确定这些理论结果实际上是做什么的,但我没有时间去做)通过整篇论文)。可以从其站点免费下载该论文,也可以在Google搜索“梯度权重帮助非参数回归器”之后免费下载该论文。

现在,您可能想知道如何找到正确的k,度量,权重以及在绘制时要执行的操作等。可悲的是,经过一番深思熟虑,基本上很难得出正确的超参数,您可能需要测试不同的超参数串,并查看哪些超参数在某些验证集上能很好地工作。如果您有一些计算资源,并且希望通过一组良好的超参数自动获得正确的参数,那么最近有一种想法(我非常喜欢)使用高斯过程进行该设置中的无导数优化。

让我详细说明一下-查找超参数集(即,将验证数据上的错误最小化)可以看作是一个优化问题。不幸的是,在这种设置下,我们无法获得我们尝试优化的函数的梯度(这通常是我们要执行的操作,以执行梯度下降或其他更高级的方法)。在这种情况下,可以使用高斯过程来查找超参数集,这些超参数集具有比我们目前找到的最佳参数更好的性能。因此,您可以使用一组超参数来迭代地运行该算法,然后询问高斯过程,接下来最好尝试哪些,然后再尝试那些,等等。

有关详细信息,请参阅Jasper Snoek,Hugo Larochelle和Ryan P Adams撰写的论文“机器学习算法的实用贝叶斯优化”(也可以在其网站上或通过Google找到)。


2
警告:优化超参数以使验证集具有最佳准确性是避免过度拟合的直接方法。您想要嵌套的简历。

快速说明“奇数k”不一定解决平局问题...例如,在对三组进行分类时,k = 3。除此之外,我同意。很好的解释。
Pyll

1

关于平局部分,平局的最佳基准思路通常是随机打破,因此,选择所有赢得投票的随机类别,并随机选择一个足以填充k的平局对象子集。

这样的解决方案强调了一个事实,那就是这些病理情况根本无法提供足够的信息来在kNN机制中做出决定。顺便说一句,如果它们对于您的数据是通用的,也许您应该尝试一些更大的区别距离?


0

一种可能的方法是让算法自动增加或减少k直到获得明确的获胜者。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.