聚类算法总结
Posted bigdatadnsc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聚类算法总结相关的知识,希望对你有一定的参考价值。
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。
以上是关于聚类算法总结的主要内容,如果未能解决你的问题,请参考以下文章