算法
有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的村民,于是每个村民到离自己家最近的布道点去听课。 听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己的课上所有的村民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。 牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个村民又去了离自己最近的布道点…… 就这样,牧师每个礼拜更新自己的位置,村民根据自己的情况选择布道点,最终稳定了下来。
-
选择初始化的 k 个样本作为初始聚类中心 ; -
针对数据集中每个样本 计算它到 k 个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中; -
针对每个类别 ,重新计算它的聚类中心 (即属于该类的所有样本的质心); -
重复上面 2 3 两步操作,直到达到某个中止条件(迭代次数、最小误差变化等)。
获取数据 n 个 m 维的数据
随机生成 K 个 m 维的点
while(t)
for(int i=0;i < n;i++)
for(int j=0;j < k;j++)
计算点 i 到类 j 的距离
for(int i=0;i < k;i++)
1. 找出所有属于自己这一类的所有数据点
2. 把自己的坐标修改为这些数据点的中心点坐标
end
优缺点
-
容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了; -
处理大数据集的时候,该算法可以保证较好的伸缩性; -
当簇近似高斯分布的时候,效果非常不错; -
算法复杂度低。
-
K 值需要人为设定,不同 K 值得到的结果不一样; -
对初始的簇中心敏感,不同选取方式会得到不同结果; -
对异常值敏感; -
样本只能归为一类,不适合多分类任务; -
不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。
算法调优与改进
-
随机选取一个中心点 ; -
计算数据到之前 n 个聚类中心最远的距离 ,并以一定概率 选择新中心点 ; -
重复第二步。
收敛证明
每次确认中心点以后重新进行标记
对应 EM 算法中的 E 步
求当前参数条件下的 Expectation
。而
根据标记重新求中心点
对应 EM 算法中的 M 步
求似然函数最大化时(损失函数最小时)对应的参数
。
参考