聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小,聚类是一种无监督算法。
度量相似性
1、最简单的度量相似性的方法就是欧氏距离
两个n维的点,X是x1、x2、x3...xn,Y是y1、y2、y3...yn,欧氏距离就是每个对应维之间相减的p次方,取和再开p次根号。可以类比二维空间的距离。
2、杰卡德相似系数
两个集合之间的相似性度量相似性最常用的公式。
3、余弦相似度
余弦相似度可以认为是极坐标系中用θ值度量两个点之间的距离,而非欧式坐标中两点间的直线距离。
4、Pearson相关系数
用两个向量之间的相关系数作为度量标准
5、相对熵(K-L距离)
两个向量一个的分布概率是px,一个是qx,就可以用相对熵作为其相似性的度量。
相对熵求最小是与最大似然估计求最大值有关。
6、Hellinger距离
聚类的基本思想
给定一个有N个对象的数据集,构造数据的K个簇,K<=N。满足下列条件
①每一个簇至少包含一个对象
②每一个对象属于且仅属于一个簇
将满足上述条件的K个簇称作一个合理划分
对于给定的类别数目K,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。
K-means算法
假定输入样本为S=x1、x2...xm,算法步骤为
1、选择初始的K个类别中心μ1μ2...μk
2、对于每个样本xi,将其标记为距离类别中心最近的类别,即
3、将每个类别中心更新为隶属该类别的所有样本的均值
4、重复最后两步,直到类别中心的变化小于某阈值。中止条件可以使用迭代次数、簇中心变化率、最小平方误差等判断。
K-means算法的公式化解释
记K个簇中心为μ1、μ2...μk,每个簇的样本数目为N1、N2...Nk
使用平方误差作为目标函数
该函数为关于μ1、μ2...μk的凸函数,其驻点为
所以说前面K均值算法取平均值也就是对目标函数进行梯度下降,这解释了取均值的原因。
K-means算法的思考
1、若簇中含有异常点,比如数组1、2、3、4、100,此时均值为22,那就不如用中位数3作为标准而不再使用均值,这种方法就是K-Mediods聚类(K中值聚类)
K均值聚类是初值敏感的算法,也就是说初始点的选择对聚类结果有影响,此时可以二分K-Means
如图当第一次聚类选取的初值点(+)聚类效果不好,可以在较大的类中选两个,在较小的两个均值接近的类中选一个,重新选择初值点进行聚类。
二分聚类的代码不好实现,此时我们可以先选出一个初始点,以这个初始点作为基准,计算其他点到基准点的距离,以距离作为权值,选取下一个初始点时,距离远的选中概率大。选出下一个基准点,然后再选下一个距离这两个基准点远的点。
Canopy算法
Canopy属于一种‘粗’聚类算法,即使用一种简单、快捷的距离计算方法将数据集分为若干可重叠的子集canopy,这种算法不需要指定k值、但精度较低,可以结合K-means算法一起使用:先由Canopy算法进行粗聚类得到k个质心,再使用K-means算法进行聚类。
Canopy算法步骤如下:
(1)将原始样本集随机排列成样本列表L=[x1,x2,...,xm](排列好后不再更改),根据先验知识或交叉验证调参设定初始距离阈值T1、T2,且T1>T2 。
(2)从列表L中随机选取一个样本P作为第一个canopy的质心,并将P从列表中删除。
(3)从列表L中随机选取一个样本Q,计算Q到所有质心的距离,考察其中最小的距离D:
如果D≤T1,则给Q一个弱标记,表示Q属于该canopy,并将Q加入其中;
如果D≤T2,则给Q一个强标记,表示Q属于该canopy,且和质心非常接近,所以将该canopy的质心设为所有强标记样本的中心位置,并将Q从列表L中删除;
如果D>T1,则Q形成一个新的聚簇,并将Q从列表L中删除。
(4)重复第三步直到列表L中元素个数为零。
聚类的衡量指标
均一性:一个簇只包含一个类别的样本,极端情况每一个类别都是一个簇
先计算类别本身的熵H(C),然后再算一下给定了分类的情况下熵是H(C|K),二者相除。
完整性:同类别样本被归到相同的簇中,极端情况所有类被一个簇
V-measure:均一性和完整性的加权平均
ARI(Adjusted Rand Index)
上面这个数据集S共有N个元素,两个聚类结果分别是X={X1.X2....Xr},Y={Y1.Y2....Ys},X和Y的元素个数为a={a1.a2....ar},b={b1.b2...bs}即a1是X1簇中元素个数,b1是Y1簇中元素个数。记
则
轮廓系数(Silhouette)
Silhouette系数是对聚类结果有效性的解释和验证。
计算样本i到同簇其他样本的平均距离 ai,ai 越小,说明样本i越应该被聚类到该簇,将 ai 称为样本 i 的簇内不相似度。
簇C中所有样本的 ai 均值称为簇 C 的簇不相似度。
计算样本 i 到其他某簇 Cj 的所有样本的平均距离 bij,称为样本 i 与簇 Cij 的不相似度。定义为样本i的簇间不相似度
bi越大,说明样本i越不属于其他簇。
根据样本 i 的簇内不相似度 ai 和簇间不相似度 bi,定义样本 i 的轮廓系数。
Si 接近1,说明样本 i 聚类合理,Si 接近-1,说明样本 i 更应该分类到另外的簇,若 Si 近似为0,说明样本 i 在两个簇的边界上。
所有样本的 si 的均值被称为聚类结果的轮廓系数,是该聚类是否合理有效的度量。
层次聚类
层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止,具体可分为
1、凝聚的层次聚类:AGNES算法
一种自底向上的策略,首先将每一个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到某个终结条件被满足。
2、分裂的层次聚类:DIANA算法
采用自顶向下的策略,首先将所有对象置于一个簇中,然后逐渐细分为越来越小的簇,直到达到某个终结条件。
密度聚类
指导思想是只要样本点的密度大于某阈值,则将该样本添加到最近的簇中;这类算法能克服基于距离的算法只能发现凸的(类圆形)聚类的缺点,可以发现任意形状的聚类,且对噪声数据不敏感,但是计算密度单元的计算复杂度大,需要建立空间索引来降低计算量。
经典的密度聚类算法可以看这个博客:https://blog.csdn.net/weixin_41690708/article/details/95480399