K-means算法流程
- 设置聚类中心数K
- 从数据集中随机选取K个数据作为初始聚类中心
- 对数据集中每个样本计算同聚类中心的距离,归入距离最小的类簇
- 对更新的类簇分别计算新的聚类中心
- 重复3-4,直到新的聚类中心到旧的聚类中心的距离小于某个阈值,或达到迭代次数上限
那么K值如何选取呢?也就是如何估计类别数?
-
直观选取:
- 数据可视化,通过样本空间的分布确定大致类别数;
-
定量分析:
-
手肘法:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,误差平方和SSE逐渐变小。
流程就是,分别用不同的K跑多个模型,然后计算SSE,并绘制SSE-K曲线来观察和确定K值。
k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大。
k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减。
SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。(如下图,K大于4之后SSE降低变缓)
S S E = ∑ i = 1 k ∑ p ∈ C i ∣ p − m i ∣ 2 S S E=\sum_{i=1}^{k} \sum_{p \in C_{i}}\left|p-m_{i}\right|^{2} SSE=i=1∑kp∈Ci∑∣p−mi∣2
其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。
-
轮廓系数法,选择使系数较大所对应的k值
计算样本 i 到同簇其他样本的平均距离 ai。ai 越小,说明样本 i 越应该被聚类到该簇。将 ai 称为样本i的簇内不相似度。 簇 C 中所有样本的 ai 均值称为簇 C 的簇不相似度。
计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇 Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik} 。bi越大,说明样本i越不属于其他簇。
轮廓系数
s ( i ) = b ( i ) − a ( i ) max { a ( i ) , b ( i ) } s ( i ) = { 1 − a ( i ) b ( i ) , a ( i ) < b ( i ) 0 , a ( i ) = b ( i ) b ( i ) a ( i ) − 1 , a ( i ) > b ( i ) s(i)=\frac{b(i)-a(i)}{\max \{a(i), b(i)\}} \quad s(i)=\left\{\begin{array}{cc}1-\frac{a(i)}{b(i)}, & a(i)<b(i) \\0, & a(i)=b(i) \\\frac{b(i)}{a(i)}-1, & a(i)>b(i)\end{array}\right. s(i)=max{a(i),b(i)}b(i)−a(i)s(i)=⎩⎪⎨⎪⎧1−b(i)a(i),0,a(i)b(i)−1,a(i)<b(i)a(i)=b(i)a(i)>b(i)
判断:
- 轮廓系数范围在[-1,1]之间。该值越大,越合理。
- si接近1,则说明样本i聚类合理;
- si接近-1,则说明样本i更应该分类到另外的簇;
- 若si 近似为0,则说明样本i在两个簇的边界上。
所有样本的si的均值称为聚类结果的轮廓系数,是该聚类是否合理、有效的度量。 选择使系数较大所对应的k值。
-