作者:林子
链接:https://blog.csdn.net/leoch007/article/details/80027056
欢迎转载,记得注明出处
聚类
聚类,属于无监督的机器学习方式。聚类根据未知标签样本的数据集内部的数据特征,将数据集划分成多个不同的类,使得同一类的数据样本尽可能地相似,不同类的数据样本之间相似度尽可能地小。
Kmeans
算法解析
Kmeans是一种划分式的聚类算法,其基于相似度将数据样本划分到”最近“的类中,而每个类则由其类中心(质心)作为代表,故而实则将每个数据样本划分到与其相似度最大的类中心(质心)所对应的类中。算法主要步骤如下:
(1)初始化K个类中心
(2)将数据样本划分到”最近“的类中(与类中心的相似度最大)
(3)更新类中心
(4)重复(2)(3)步骤直至满足收敛条件
在Kmeans的算法中,我们可以看到其划分的标准是相似度,而相似度的度量方式有很多,常见的如下:
闽可夫斯基距离: d(x,y)=∑vi=1|xi−yi|p−−−−−−−−−−−−√p d ( x , y ) = ∑ i = 1 v | x i − y i | p p
当p=1时,上式即为街区距离;当p=2时,为欧式距离;
余弦相似度: cos(x,y)=x⋅y|x||y| c o s ( x , y ) = x ⋅ y | x | | y |
其用以描述向量之间的相似度时,忽略向量本身的大小
Jaccard相似度: J(A,B)=|A⋂B||A⋃B| J ( A , B ) = | A ⋂ B | | A ⋃ B |
一般地,其用于描述两个集合A,B的相似度
Person相关系数: ρ(x,y)=Cov(x,y)σxσy ρ ( x , y ) = C o v ( x , y ) σ x σ y
其中 Cov(x,y) C o v ( x , y ) 表示x,y的协方差, σx σ x 表示x的标准差,相关系数实则通过除于标准差来剔除协方差受变化幅度的影响,试图标准化协方差
KL散度: D(p||q)=∑xp(x)logp(x)q(x) D ( p | | q ) = ∑ x p ( x ) l o g p ( x ) q ( x )
可以用以描述两个随机变量的距离;越相似,KL散度(相对熵)越小;当KL散度=0时,两个随机分布相同
而算法的收敛条件可以是:迭代次数、均方误差等。
Kmeans的优缺点:
- 优点:时空复杂度较低;具有优化迭代功能,能修正迭代过程中的误分类;
- 缺点:需要确定类的个数K;对初始选取的类中心敏感;
算法实现
(1)初始化K个质心
最简单的方案就是随机不重复地进行选择K个数据样本,具体实现可以将数据样本的下标索引进行随机打乱排列,再选择前K个即可:(当然这样做效果会差一些,因为Kmeans对初始质心比较敏感,后面的内容会给出一些优化的策略和思考)
%初始化质心 rand('seed',10); %实验的可重复性 temp = randperm(length(X)); %随机打乱 Centeridx = temp(1:K); %K个随机数 Center = X(Centeridx,:);