KNN全名是k-Nearest Neighbors,实际上KNN算法也可以用来做回归,这里只讨论分类。
算法基本思想:若一个样本在特征空间中的k个最相似的样本中,属于某一个类别最多,则该样本也属于这个类别,通过计算欧氏距离来选定相似样本。

算法过程:

  1. 将已经分好类的样本的特征输入,作为“参考样本”,也就是下一步的输入的未知样本的“邻居”。
  2. 输入待分类样本,通过这个样本的周围最近的K个已经分好类的邻居的类别来判断它的类别。若在这K个邻居中,某个类的数量最多,那么判断该样本为此类。

算法特点:

  • 属于监督学习(数据集是带label的数据),但没有明显的前期训练过程。
  • 被分好类的新样本,不作为下一个需要分类的样本的参照样本。

K值选择:

  • 参数K取奇数为佳。
  • K取值不宜太小,以消除噪声影响,但过大又会使分类边界模糊,故 \(K\) 值需要进行参数优化。

算法举例:

  • 图中的数据集是良好的数据,即都打好了label,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是待分类的数据。
  • 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。
  • 如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。

KNN算法举例

KNN算法实现与应用:

具体请参照:KNN算法实现与应用</br>