再邻居
属性
k-最近邻,如上所述,具有不同于其他机器学习算法的各种属性。首先,k神经网络是非参数,这意味着它不做任何假设概率分布的输入。这对于输入属性未知的应用程序是有用的,因此会使k-NN更多健壮的而不是算法参数.相比之下,参数机器学习算法产生的错误往往比非参数机器学习算法少,因为考虑输入概率会影响决策。
此外,k-NN是一种类型懒惰的学习,这是一种将数据一般化的学习方法测试阶段,而不是在培训阶段.这与渴望学习,它概括了训练阶段而不是测试阶段的数据。懒惰学习的一个好处是,它可以快速地适应变化,因为它不需要特定的广义数据集。然而,一个主要的缺点是计算发生在测试(实际使用)过程中,而不是在训练过程中预先计算。
分类和回归
k-最近的邻居可以用在分类或回归机器学习任务。分类包括将输入点放入适当的类别回归包括在输入点和其他数据之间建立关系。在这两种情况下,可以使用许多不同的距离概念来确定邻居,其中最常见的是欧几里得和汉明距离.欧几里得距离是最常用的距离概念——两点之间直线的长度。汉明距离是相同的概念,但对于字符串距离是根据两个字符串不同的位置数计算的。此外,对于某些多变量任务,距离必须是归一化(或加权)以准确地代表相关变量之间的相关性。
为k-NN分类时,输入根据其邻居的多数投票进行分类。也就是说,算法得到类成员它的k类的大多数邻居和输出类k邻居。
k-NN回归以类似的方式工作。返回值是输入值的平均值k邻居。
假设我们要对绿圆进行分类。让我们从 (实线)。在这种情况下,算法将返回一个红色三角形,因为它构成了3个邻居中的大多数。同样,与 (虚线),算法将返回一个蓝色正方形。
如果没有达到多数k邻居们,可以采取很多行动。例如,可以使用多个系统,甚至使用不同的算法来确定该数据点的成员。
假设我们有来自正弦波的数据点(当然有一些方差),我们的任务是生成一个y给定值x价值。当给定要分类的输入数据点时,k-NN将返回平均值y输入的值k邻居。例如,如果k-NN被要求返回相应的y值 ,算法会找到k最近的点 然后返回平均值y值对应于这些k点。这个算法很简单,但对大多数人来说非常成功x值。
参数选择
优点和缺点
k-NN是机器学习任务中使用的许多算法之一,例如计算机视觉和基因表达分析。为什么使用k-NN优于其他算法?以下是利弊列表k-NN的选择太多了。
优点:
- 非常容易理解和实现。一个k-NN实现不需要很多代码,可以是一种快速和简单的方式开始机器学习数据集。
- 不假设输入数据的任何概率分布。这对于概率分布未知的输入非常有用。
- 能够快速响应输入的变化。k-NN采用懒惰学习,在测试期间进行泛化——这允许它在实时使用期间改变。
缺点:
- 对本地化数据敏感。自k-NN从输入的邻居中获取所有信息,局部异常显著影响结果,而不是使用数据的一般化视图的算法。
- 计算时间。懒惰的学习需要大部分k-NN的计算是在测试期间完成的,而不是在训练期间。对于大型数据集来说,这可能是个问题。
- 规范化。如果一种类型的类别出现的次数比另一种多,那么对输入进行分类将更偏向于该类别(因为它更有可能与输入相邻)。这可以通过对更常见的类别应用较低的权重,对较不常见的类别应用较高的权重来缓解;然而,这仍然会导致决策边界附近的错误。
- 维度。在许多维度的情况下,输入通常可以“接近”许多数据点。这降低了有效性k-NN,因为该算法依赖于亲密度和相似性之间的相关性。这个问题的一个解决方案是降维,它减少了工作可变维的数量(但在过程中可能会失去可变趋势)。
参考文献
- Ajanki,。k-最近邻分类示例nb.2016年5月28日,从https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm#/media/File:KnnClassification.svg