KNN、Kmeans是常用机器学习算法,但也经常弄混。本文将详细介绍这两种算法含义、实现过程、用途、区别等方面进行详细讲解。
1、KNN
属于监督学习,属于分类学习(需要进行训练)。最简单粗暴就是将预测点与所有点距离计算,然后保存并排序,选出前面K个值看看哪些类别比较多,则预测的点属于哪类。
(1) 流程
对未知类别属性的数据集中的每个点依次执行以下操作:
a、计算已知类别数据集中的点与当前点之间距离(曼哈顿距离计算、欧式距离计算)
b、按照距离递增次序排序
c、选取与当前点距离最小的k个点(k取值依据:通过交叉验证(将样本数据按照一定比例,拆分出训练用的数据和验证用的数据,比如6:4拆分出部分训练数据和验证数据),从选择一个较小的K值开始,不断增加K的值,然后计算验证集合的方差,最终找到一个比较合适的K值)
d、确定前K个点所在类别的出现概率
e、返回前k个点出现频率最高的类别作为当前点的预测分类
2、KMeans
属于聚类学习,类别的个数是人为给定的,如果让机器自己去找类别的个数,通过一次次重复这样的选择质心-计算距离后分类-再次选择新质心的流程,直到我们分组之后所有数据都不会再变化,就得到最终的聚合结果。
(1) 流程
a、随机选取K个质心(K值取决于想要聚成几类)
b、计算样本到质心的距离,距离质心距离近的归为一类,分为k类
c、求出分类后的每类的新质心
d、再次计算样本到新质心的距离,距离质心距离近的归为一类
e、判断新旧聚类是否相同,如果相同就代表已经聚类成功,如果没有就循环2~4步骤直到相同
3、KMeans++
KMeans的两个缺陷: KMeans聚类中心的个数K需要事先给定,但在实际中这个K值的选定是非常难以估计的;KMeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(KMeans++解决KMeans的两个缺陷。)
(1)流程
k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
a、给定初始点的集合D
b、随机从点集D中选择一个点作为初始的中心点
c、计算每一个点到最近中心点的距离Si
d、求和Si得到Sum
e、取随机值Random(0 f、循环点集D,做Random-=Si运算直到Random<0,那么点i就是下一个中心点 g、循环c~f,直到取出所有的K个中心点 h、进行K-means算法