重点:
- 算法思想
- 使用条件
- 如何设置初始化点
- 如何确认K值
- 判断收敛的指标
- 发生震荡的原因及解决方法
- 聚类的评价函数
- 优缺点
- 伪代码
- python实现
算法思想:
首先随机初始化K个中心点,计算训练样本点与K个中心点的距离。当样本点与第i个中心点的距离最近时, 该样本点被认定为从属于第i类。所有样本点确定好类别后,更新的中心点的位置。返回计算样本点与更新后的中心点的距离。重复上述步骤直至收敛为止。
使用条件:
用欧式距离来表示两个样本点之间的相似度
如何设置初始点:
预估整体的中心——即均值,以及范围。在生成中心点时,以均值位置中心,以尺度为因子,乘以服从标准正太分布的数据
如何确定K值:
(a)在已知应用情景和类别的情况下,根据任务确定
(b)在类别未知的情况下
肘部法.....(只了解这个) 原理: 绘制成本函数(代价函数)与K的折线图, 下降幅度最大的位置对应的k值就是肘部
https://zhuanlan.zhihu.com/p/24546995 其他参考这个链接
判断收敛的指标:
成本函数(代价函数)
意义: 每个类别的畸变程度的和
小于一定值 或 循环中先后两次成本函数的差小于一定值时 即为收敛
发生震荡的原因及解决方法:
本质原因: 样本稀疏
解决方法: 加入阻尼系数
聚类的评价函数
轮廓系数: 轮廓系数是类的密集与分散程度的评价指标。它会随着类的规模增大而增大。彼此相距很远,本身很密集的类,其轮廓系数较大,彼此集中,本身很大的类,其轮廓系数较小。轮廓系数是通过所有样本计算出来的,计算每个样本分数的均值
a是每一个类中样本彼此距离的均值,b是一个类中样本与其最近的那个类的所有样本的距离的均值。
优缺点:
优点:
算法原理简单,适用于大规模数据,速度快,需要调节的超参数只有K
缺点:
使用前需要事先确定K值(难)
初始点对聚类结果影响大,大多情况里需要做多次试验才能得到理想效果
对离群点敏感
由于以欧式空间为前提条件,所以不能发现非凸形状的簇,同时使用欧式空间也隐含假定了各个维度对相似度的衡量作用是相同的
伪代码:
def K-MEANS(输入数据, K):
获取输入数据维度DIM和个数N
随机生成K个维度为DIM的初始点
while(算法未收敛):
for i in 输入数据:
计算i属于哪一类
for k in K:
找出所有属于自己一类的数据点
更新自己的坐标为这些数据点的中心点坐标
END
输出结果: