携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
k近邻算法(k-nearest neighbors, KNN)是一种可以用于分类、回归的预测算法,属于监督学习的范畴。它可以根据预测数据点的特征与一只数据点特征的相似性,来进行结果的预测,用于分类和回归。
KNN 的原理
它的大致原理是这样的:假设我们有一个初始的训练样本集,样本集中的每一个数据点都包含多个特征变量,以及一个标签(标签可以是分类、结果值等)。KNN 算法可以在我们输入新的没有标签的数据后,根据与输入数据的特征变量相近的 K 个样本数据(这也是 KNN 中 K 的意思),来预测新数据的标签。
那么,KNN 算法是如何找到与新数据点特征相似的样本数据呢?在拿到样本数据后,假设样本数据中的每个数据点都有 x 个特征变量,那么,每个数据点在 x 维的坐标系中都有一个自己的位置。当新的数据被输入后,它也能够根据自己的特征变量的值,在这个坐标系中,找到对应的位置。然后,通过计算数据点的位置之间的距离,找到离新数据位置最近的 K 个样本数据,根据他们的标签来预测新数据的标签。
如果要预测的结果(标签的值)是二值变量或者分类变量,那么,新数据的标签应该是 K 个最近的样本数据中,出现最多的标签值;如果是整形或者连续变量,则需要根据具体情况,通过 K 个最近的样本的标签值来计算预测结果。
简而言之:KNN 算法就是根据周围数据点的类型对某个未分类的数据点进行分类。如下图:
K 值的选择
了解完它的原理之后,下一个要讨论的问题就是,K 的值怎么选择。也就是说,应该选取最近的几个数据点来预测当前数据点呢?
以上面的图为例,如果我们把 K 的值定为 3,那么新数据(绿色)最终的预测结果为红色的三角形,如果 K 为 5,那结果就成了蓝色正方形。在 KNN 算法中,选择 K 的值的过程,其实就是算法参数调优的过程,并没有一个通用的最优的 K 值。
- 如果 K 的值太小,那么预测结果很容易被出现在附近的一场数据点所影响,导致数据异常被扩大。
- 如果 K 的值太大,距离较远的那些与预测数据点相似度不大的数据点与之匹配,会导致隐含的模式被忽略。
通常为了找到合适的 K 值,可以使用交叉验证法(挖个坑)对 K 进行调优。另外,还可以根据距离远近,使用不同的权重对新数据进行预测,使得离预测数据点越近的邻居对其影响越大。
KNN 的特点
KNN 算法的精度高,而且对异常数据不敏感,但是,当数据点的变量太多的时候,它在预测时的计算量非常大,因此,可以在使用 KNN 之前,对样本数据进行降维处理。