KNN 和 K-means 的算法过程都是给定一个点,查找每个样本离他最近的一个过程,看起来是这样,那它们区别是什么呢?

算法原理不同

K-means是随机抽取k个样本作为最初的质心,将每个样本点分配到离它们最近的质心,生成K个簇,对于每个簇,计算所有被分配到该簇的样本点的平均值作为新的质心,当质心的位置不再发生变化,迭代停止,聚类完成。
image.png
KNN是找到样本点最近的k个邻居(样本),在前k个样本中选择频率最高的类别作为预测类别。如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。
image.png

本质区别

K-means属于非监督学习,数据集是无标签,事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群体。
KNN属于监督学习,数据集带有标签,类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。

是否有训练过程

K-means有明显的前期训练过程,K-means算法对于不同的初始值,可能会导致不同结果,需要多设置一些不同的初值,对比最后的运算结果,一直到结果趋于稳定结束。

KNN没有明显的前期训练过程,基于Memory-based learning,数据集事先已有了分类和特征值,待收到新样本后直接进行处理,在训练阶段只是把数据保存下来,训练时间开销为0,等收到测试样本后进行处理。
**

**