聚类算法总结

 

1      什么是聚类算法?

聚类算法就是根据特定的规则,将数据进行分类。分类的输入项是数据的特征,输出项是分类标签,它是无监督的。

常见的聚类规则包括:1)基于原型的,例如有通过质心或中心点聚类,常见的算法KMeans;2)基于图的,也就是通过节点和边的概念,形成连通分支的分类,常见的算法是凝聚层次聚类,最小生成树聚类;3)基于密度的,根据数据密度的大小进行聚类,常见的算法是DBSCAN,SNN密度聚类;4)基于统计的聚类,数据一般符合一种或几种概率分布,根据概率分布情况进行聚类。

2      常见的几类聚类算法

这里介绍KMeans、凝聚层次聚类和DBSCAN三种聚类方法。

2.1     KMeans聚类

KMeans聚类就是通过找出距离质心最近的点的分为一类的方法,达到SSE(误差平方和)最小的目标。

2.1.1     基本概念

K类:参数,聚类前设置的聚类形成的簇的个数;

质心:每个簇的聚集中心,一般L2距离为均值;余弦相似度为均值;L1距离为中位数。

距离:待聚类点到质心的距离,一般低维空间用L2距离,文档用余弦相似度。

SSE:KMeans聚类的目标函数,簇中各点到质心的距离平方和为簇内SSE,总SSE为K个簇内SSE之和。

2.1.2     KMeans聚类流程

Step1:确定要聚成的簇的个数n_clusters = k,选择k个初始质心;

Repeat:

Step2:根据质心,将每个数据点选择最近的质心聚为一个簇;

Step3:根据新簇,更新质心。

Until:质心不变动,或数据点所在簇不再更新;或者重复次数达到设置的上限。

2.1.3     KMeans聚类参数

KMeans聚类有两个初始参数:k 和初始质心;

k值:

k值设置可能出现的问题:由于事先不清楚数据的分布情况导致k值设置与数据实际的簇与设置不符;

解决方法:事前:1)通过可视化散点图观察,但是更多时候多维不好观察;2)通过多个k值得迭代,计算SSE或silhouette_score的趋势分布,找出拐点对应的k值;事后:3)尝试对SSE较大的簇进行分裂,或对质心距离很近的簇进行合并,计算SSE的增加量,改变簇的数量。

另外,可以采用二分K均值方法,逐步迭代。

初始质心:

初始质心默认采用随机选择的方法,但是由于质心的选择,如果初始质心在两个簇中间或在一个比较密的簇内,可能会出现,本来是两个簇的聚成一个簇或者本来该聚成一个簇的变成两个簇,使结果不能达到预期。

解决方法:1)一般解决方法,就是对初始质心多次尝试;2)还可以通过先计算全体数据均值,作为第一个质心,后一个质心取离前一个质心距离最远的点的方法,取出所有质心,但这种方法可能将离群点选为质心。

2.1.4     复杂度

KMeans聚类的空间复杂度为O( (m+k)n),其中m为点的个数,n为属性的个数,k为分类个数,代表要存储的质心数量;

时间复杂度为O(m*n*k*I),其中I为迭代次数。

2.1.5     算法优缺点

优点:简单、便于理解,易于实现,空间复杂度和时间复杂度不高;

缺点:参数选取(k值和初始质心选取问题);KMeans算法的本质是将按照距离将距离某个质心最近的点聚为一簇,它的计算中默认每个簇是以质心为中心的球形结构,对于不规则形状的簇、基于密度的簇等划分困难;3)KMeans聚类为完全聚类,目标函数为SSE,离群点对结果影响较大,可以先做离群点删除,再聚类。

2.2     凝聚层次聚类

凝聚层次聚类是一种基于图的聚类。它先是将每个点作为一个簇,通过邻近度矩阵,将距离最近的簇聚为一个新簇,然后更新邻近度矩阵。

2.2.1     基本概念

邻近度矩阵:任一簇到其他簇的距离形成的矩阵;

单链:用两个簇的最小距离代表两个簇的邻近度;可以看成两个簇结点的边长的最小值。

全连:用两个簇的最大距离代表两个簇的邻近度;可以看成两个簇结点的边长的最大值。

组平均:用分别在两个簇中点的全部点距离的平均值代表两个簇的邻近度。可以看成两个簇结点的边长的均值。

Ward:两个簇合并导致的平方误差的增量代表两个簇的邻近度。

2.2.2     聚类流程

Repeat:

Step1:计算邻近度矩阵;

Step2:将邻近度矩阵中最近的点合并为一个新簇;

Until:

只剩下一个簇。(这个有问题吧,只剩一个簇还聚类干嘛?)

2.2.3     复杂度

空间复杂度:由于要存储邻近度矩阵,所以空间复杂度为O(m2);

时间复杂度:需要m-1次迭代,每一步聚一个簇,第i步需要做O((m-i+1)2),所以时间复杂度为O(m3)。

2.2.4     算法优缺点

优点:1)不用事先设置聚类数量,根据结果就可以自动地形成合适的簇;2)不受初始质心影响,而且会将最近的点聚为一簇。

缺点:1)由于每次更新邻近度矩阵会覆盖原来的邻近度矩阵,所以聚类结果很可能是次最优的;2)复杂度比较高,开销大。3)对噪声可能不够敏感,高维计算时也可能出现问题。可以先使用其他技术进行局部聚类,再进行层次聚类。

2.3     DBSCAN(density based spatial cluster of application with noise)

将某一邻域内密度大于给定值的数据聚为一簇。这一聚类属于不完全聚类,噪声点将不会属于任何一个簇。

2.3.1     基本概念

核心点:在给定点的r邻域内,包含数据中点的个数大于等于min_pts个;

边界点:在某个核心点的邻域内,但是它的r邻域内点的个数小于min_pts个;

噪声点:非核心点和边界点。

2.3.2     聚类流程

Step1:将所有点标记为核心点、边界点和噪声点;

Step2:删除噪声点;

Step3:为距离小于eps的所有核心点构建一条边;

Step4:每组连通的核心点形成一个簇;

Step5:将边界点指派到与之相关联的核心点。

2.3.3     参数

DBSCAN的初始参数有两个,Eps和min_pts,即核心点邻域的半径和邻域中最小点的个数。

Eps:邻域的半径大小。

邻域设定可能会出现的问题:设置值过大,可能会将该分离的簇聚到一起;邻域设定过小,每个点都可能成为一个邻域。

方法:可以先计算任何点的距离,然后用线性图展现,找出距离的拐点,作为半径大小。

Min_pts:邻域中最小点的个数。

点的个数的设定与邻域的大小相关,设置过大,可能无法形成核心邻域,设置过小,可能将噪声作为核心点。

优化方法:???

2.3.4     复杂度

空间复杂度:要存储点m,空间复杂度为O(m);

时间复杂度:m*找出eps内的点需要的时间,复杂度最大O(m2),最小为O(mlogm)。

2.3.5     算法优缺点

优点:1)可以区分不规则形状的簇;2)简单、空间复杂度低;3)抗噪声;

缺点:1)初始参数eps和min_pts不好确定;2)高维空间不适用;3)对于不同区域密度不同的数据不能形成好的聚类效果;4)不是完全聚类,噪声会被删除。

3      聚类算法评估

1)    凝聚度SSE

2)    分离度:,c为全部点的均值;为簇的均值。

TSS=SSE+SSB。

3)    凝聚度和分裂度的融合,轮廓系数(silhouette_score),某个点i的轮廓系数

 

为一个数据点到其他簇所有点的距离;为一个数据点到簇内点的距离。

的值在[-1, 1]间,越大聚类效果越好。值为-1时,=0,没有形成聚类;值为1时,,达到了最好的聚类效果。

    邻近度矩阵矩阵:理想的相似度矩阵和现实的相似度矩阵的相关度。理想的相似度矩阵是块对角阵,每个数据点一行一列,两个点相似度矩阵值的坐标为:在同一簇中为1,不在同一簇中中值为0。

转载于:https://www.cnblogs.com/bigdatadnsc/p/10708333.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值