1、聚类算法思想
聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属于无监督学习。聚类算法的重点是计算样本项之间的相似度,有时候也称为样本间的距离。
2、距离公式(相似度)
闵可夫斯基距离(Minkowski)
dist(X,Y)=(∑i=1n|xi−yi|p)1p
- 当p为1的时候是曼哈顿距离(Manhattan)
M_dist=∑i=1n|xi−yi| - 当p为2的时候是欧式距离(Euclidean)
E_dist=(∑i=1n|xi−yi|2)12 - 当p为无穷大的时候是切比雪夫距离(Chebyshev)
C_dist=maxi|xi−yi|
余弦相似度
cos(θ)=aT⋅b|a||b|
KL距离(相对熵)
D(P||Q)=∑xP(x)log(P(x)Q(x))
杰卡德相似系数(Jaccard)
J(A,B)=|A∩B||A∪B|
dist(A,B)=1−J(A,B)
Pearson相关系数
ρXY=Cov(X,Y)D(X)‾‾‾‾‾√D(Y)‾‾‾‾‾√
dist(A,B)=1−ρXY
3、聚类的衡量指标
1、均一性、完整性、V-measure
均一性(类似于精确率)p:一个簇中只包含一个类别的样本,则满足均一性。其实也可以认为就是正确率(每个 聚簇中正确分类的样本数占该聚簇总样本数的比例和)
完整性(类似于召回率)r:同类别样本被归类到相同簇中,则满足完整性;每个聚簇中正确分类的样本数占该
类型的总样本数比例的和
V-measure:均一性和完整性的加权平均
V=(1+β2)∗prβ2∗p+r
2、轮廓系数
簇内不相似度:计算样本i到同簇其它样本的平均距离为ai,应尽可能小。
簇间不相似度:计算样本i到其它簇Cj的所有样本的平均距离bij,应尽可能大。
轮廓系数:si值越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到 另外的簇中,近似为0,表示样本i应该在边界上;所有样本的si的均值被成为聚类结果的轮廓系数。
s(i)=b(i)−a(i)max{a(i),b(i)}
4、K-means算法
1 算法步骤
假设输入样本为T= X1,X2,...,Xm ;则算法步骤为(使用欧几里得距离公式):
- 选择初始化的k个类别中心 a1,a2,...ak ;
- 对于每个样本 Xi ,将其标记位距离类别中心aj最近的类别j
- 更新每个类别的中心点 aj 为隶属该类别的所有样本的均值
- 重复上面两步操作,直到达到某个中止条件
2 原理推导
因为更新每个类别的中心点 aj 为隶属该类别的所有样本的均值,所以方法叫做K-均值算法。推导如下:
1) 记K个簇中心分别为 a1,a2,...ak ;每个簇的样本数量为 N1,N2,...,NK ;
2) 使用平方误差作为目标函数(使用欧几里得距离),公式为:
J(a1,a2,...,ak)=12∑j=1K∑i=1n(xi−aj)2
3) 要获取最优解,也就是目标函数需要尽可能的小,对J函数求偏导数,可以得到 簇中心点a更新的公式为:
∂J∂aj=∑i=1n(xi−aj)=0
aj=1Nj∑i=1Njxi
3 算法优缺点:
- 优点:
- 理解容易,聚类效果不错
- 处理大数据集的时候,该算法可以保证较好的伸缩性和高效率
- 当簇近似高斯分布的时候,效果非常不错
- 缺点:
- K值是用户给定的,在进行数据处理前,K值是未知的,不同的K值得到的结果也不一样;
- 对初始簇中心点是敏感的
- 不适合发现非凸形状的簇或者大小差别较大的簇
- 特殊值(离群值)对模型的影响比较大
4 算法改良
K-Mediods聚类(K中值聚类)
为了解决K-means对离群点敏感的问题,不是用均值来决定簇中心点,而是用中值来决定中心点。
K-Means++算法
为了解决K-Means算法对初始簇心比较敏感的问题:
- 从数据集中任选一个节点作为第一个聚类中心
- 对数据集中的每个点x,计算x到所有已有聚类中心点的距离和D(X),距离较远的一个点成为新增的一个聚类中心点。
- 重复步骤2直到找到k个聚类中心点
算法缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的 问题(第k个聚类中心点的选择依赖前k-1个聚类中心点的值)
Canopy算法结合K-means
为了解决K-means需要设定K值,能够缓解K-Means算法对于初始聚类中心点敏感的问题
Canopy算法
- 先验值r1和r2,r1 < r2
- 从列表中选出一个点P,计算它到所有簇中心的距离(如果没有,他就是簇中心),取最小的距离D。
- 如果D>r2,则P是一个新的簇中心点。
- 如果r1 < D < r2,则P是属于这个簇。
- D < r1,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所 以将该聚簇的中心点设置为P,并将P从列表L中删除
- 直到列表L中的元素数据不再有变化或者元素数量为0的时候,结束循环操作
聚类的结果作为初值再进行k-means聚类。
5、层次聚类算法
层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:自下而上的凝聚类算法,自上而下的分裂类算法。
凝聚的层次聚类:AGNES算法
采用自底向上的策略。最 初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可 以由这两个不同簇中距离最近的数据点的相似度来确定;聚类的合并过程反复进行直到所 有的对象满足簇数目。
- 最小距离(SL聚类):
两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法),缺点:最终得到模型容易形成链式结构 - 最大距离(CL聚类):
两个聚簇中最远的两个样本的距离(complete-linkage聚类法),缺点:如果存在异常值,那么构建可能不太稳定 - 平均距离(AL聚类):
两个聚簇中样本间两两距离的平均值(average-linkage聚类法) 两个聚簇中样本间两两距离的中值(median-linkage聚类法)
优化算法:
BIRCH算法(平衡迭代削减聚类法):聚类特征使用3元组进行一个簇的相关信息, 通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类,聚类特征树其实是 一个具有两个参数分枝因子和类直径的高度平衡树;分枝因子规定了树的每个节 点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它 子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对 模型进行更新操作。
优缺点:
适合大规模数据集,线性效率; 但只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数;
CURE算法(使用代表点的聚类法):该算法先把每个数据点看成一类,然后合并距 离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取 消了使用所有点或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、 分布较好的点作为此类的代表点,并将这些代表点乘以一个适当的收缩因子,使 它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的 场景,而且收缩因子的使用可以减少噪音对聚类的影响
优缺点:
能够处理非球形分布的应用场景 采用随机抽样和分区的方式可以提高算法的执行效率
分裂的层次聚类:DIANA算法(DIvisive ANALysis)
采用自顶向下的策略。首先将所 有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式 距离),直到达到某个终结条件(簇数目或者簇距离达到阈值)。
6、密度聚类算法
密度聚类方法的指导思想: 只要样本点的密度大于某个阈值,则将该样本添加到 最近的簇中,这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。但计算复杂度高,计算量大。
DBSCAN
一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定义为密度相连的点的最大集合,能够将足够高密度 的区域划分为簇,并且在具有噪声的空间数据商能够发现任意形状的簇。DBSCAN算法的核心思想是:用一个点的邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的簇,而且聚类的时候事先不需要给定簇的数量。
MDCA(Maximum Density Clustering Application)
算法基于密度的思想引入划分聚类中,使用密度而不是初始点作为考察簇归属情况的依据,能够自动确定簇数量并发现任意形状的簇,另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。MDCA算法的基本思路是寻找最高密度的对象和它所在的稠密区域,MDCA算法在原理上来讲,和密度的定义没有关系,采用任意一种密度定义公式均可,一般情况下采用DBSCAN算法中的密度定义方式。