K-Means 聚类方法
对象
- 与有监督学习不同的是,无监督学习所面向的数据是没有标签的。
- 那么如果给定一个无标签的数据集,怎么对其进行分类呢,这时就要使用聚类方法
- K-means 就是聚类方法的一种
K-means 的流程:
k-means 是一个迭代算法,可以按以下步骤记忆
- 按照给定的K值产生K个不同的聚类中心
- 数据点与K个聚类中心进行距离上的计算,每个数据点选择其本身距离最近的聚类中心的类作为本轮的归属
- 按照新的数据分布,分别计算各类数据的均值来作为新的聚类中心
- 不断迭代2,3步骤,直到聚类中心不再进行变化算法结束
注意:如果分类的过程中发生某类簇中没有数据点的情况,就将那个簇删除掉;若对簇的数量有要求,就重新进行聚类中心的初始化。
失真函数
从数学角度来看,K-means算法是基于上式的损失函数来优化求解的。
- 是第i个数据点的分类
- 是聚类中心
- 代表的是某轮迭代时,数据点x的分类的聚类中心
而K-means的两个迭代流程可以分别看作,失真函数J对于c和u做拉格朗日乘子法得到的最值解。
比如在簇分配时,就是固定u变量,计算所有x到u的距离,通过此方法来优化c
而在更新聚类中心时,就是固定c变量,并利用c来重新计算新的聚类中心。
聚类中心的初始化
在算法的第一步就是初始化聚类中心的位置,这里应用了一个较好的方法,就是在所有的数据点里随机化选择k个(不放回抽取)点作为初始的聚类中心,依据此来开始算法的迭代
但是这种随机化分配的变化性较强,就使得聚类的结果会出现问题,产生局部最优解
此时对应的解决办法就是,多次(比如100次)随机化初始聚类中心,然后进行聚类的分配,并计算每次最终的分类对应的失真函数的值,选择最小的一次作为最终的分类结果。这种方法对K在2到10之间的聚类问题很有效果,当类的数量太多的时候,这种方法的作用就不会那么明显了。
K的选择
通常来讲,K的选择是经过人的思考或经验决定的,它通常取决于要解决的问题或要达到的目的,因此并不存在一种自动的最优的k的选择方法
若不知道K应该取多少,可以通过”肘部法则“来进行尝试,但往往并不会取得太好的效果。