[机器学习]聚类算法

1、聚类算法思想

聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属于无监督学习。聚类算法的重点是计算样本项之间的相似度,有时候也称为样本间的距离。

2、距离公式(相似度)

闵可夫斯基距离(Minkowski)

dist(X,Y)=(i=1n|xiyi|p)1pdist(X,Y)=(∑i=1n|xi−yi|p)1p

  • 当p为1的时候是曼哈顿距离(Manhattan) 
    M_dist=i=1n|xiyi|M_dist=∑i=1n|xi−yi|
  • 当p为2的时候是欧式距离(Euclidean) 
    E_dist=(i=1n|xiyi|2)12E_dist=(∑i=1n|xi−yi|2)12
  • 当p为无穷大的时候是切比雪夫距离(Chebyshev) 
    C_dist=maxi|xiyi|C_dist=maxi|xi−yi|

余弦相似度

cos(θ)=aTb|a||b|cos(θ)=aT⋅b|a||b|

KL距离(相对熵)

D(P||Q)=xP(x)log(P(x)Q(x))D(P||Q)=∑xP(x)log(P(x)Q(x))

杰卡德相似系数(Jaccard)

J(A,B)=|AB||AB|J(A,B)=|A∩B||A∪B|
dist(A,B)=1J(A,B)dist(A,B)=1−J(A,B)

Pearson相关系数

ρXY=Cov(X,Y)D(X)D(Y)ρXY=Cov(X,Y)D(X)D(Y)
dist(A,B)=1ρXYdist(A,B)=1−ρXY

3、聚类的衡量指标

1、均一性、完整性、V-measure

均一性(类似于精确率)p:一个簇中只包含一个类别的样本,则满足均一性。其实也可以认为就是正确率(每个 聚簇中正确分类的样本数占该聚簇总样本数的比例和)

完整性(类似于召回率)r:同类别样本被归类到相同簇中,则满足完整性;每个聚簇中正确分类的样本数占该 
类型的总样本数比例的和

V-measure:均一性和完整性的加权平均 

V=(1+β2)prβ2p+rV=(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)}s(i)=b(i)−a(i)max{a(i),b(i)}

4、K-means算法

1 算法步骤

假设输入样本为T=X1,X2,...,XmX1,X2,...,Xm;则算法步骤为(使用欧几里得距离公式):

  • 选择初始化的k个类别中心a1,a2,...aka1,a2,...ak;
  • 对于每个样本XiXi,将其标记位距离类别中心aj最近的类别j
  • 更新每个类别的中心点ajaj为隶属该类别的所有样本的均值
  • 重复上面两步操作,直到达到某个中止条件

2 原理推导

因为更新每个类别的中心点ajaj为隶属该类别的所有样本的均值,所以方法叫做K-均值算法。推导如下: 
1) 记K个簇中心分别为a1,a2,...aka1,a2,...ak;每个簇的样本数量为N1,N2,...,NKN1,N2,...,NK
2) 使用平方误差作为目标函数(使用欧几里得距离),公式为: 

J(a1,a2,...,ak)=12j=1Ki=1n(xiaj)2J(a1,a2,...,ak)=12∑j=1K∑i=1n(xi−aj)2

3) 要获取最优解,也就是目标函数需要尽可能的小,对J函数求偏导数,可以得到 簇中心点a更新的公式为: 
Jaj=i=1n(xiaj)=0∂J∂aj=∑i=1n(xi−aj)=0
aj=1Nji=1Njxiaj=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算法中的密度定义方式。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

[机器学习]聚类算法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭