网络资料整理个人学习,感谢各位大神!(若侵则删)
机器学习,参考https://zhuanlan.zhihu.com/p/391954665
问题14:无监督学习-聚类
常见的聚类算法
基于划分,基于密度,基于网格,层次聚类,除此之外聚类和其它领域也有很多的结合形成的交叉领域比如半监督聚类,深度聚类,集成聚类等等
kmeans的原理是什么?
kmeans是一种基于划分的聚类,中心思想很简单,类内距离尽量小,类间距离尽量大,算法过程为:
1.初始化k个质心,作为初始的k个簇的中心点,k为人工设定的超参数;
2.所有样本点n分别计算和k个质心的距离,这里的距离也是人工定义的可以是不同的距离计算方法,每个样本点和k个质心中最近的质心划分为1类簇;
3.重新计算质心,方法是针对簇进行聚合计算,kmeans中使用简单平均的方法进行聚合计算,也可以使用中位数等方式进行计算;
4.重复上述过程直到达到预定的迭代次数或质心不再发生明显变化
Kmeans的初始点怎么选择?不同的初始点选择策略有哪些缺陷?怎么解决?
1.随机初始化:随机选择k个样本点作为初始质心,缺陷在于如果选择到的质心距离很接近落在同一个簇内,则迭代的结果可能会比较差,因为最终迭代出来的质心点会落在簇间,
最理想的状态是k个质心恰好对应k个簇,由于随机初始化的随机性,可以考虑多次进行随机初始化,选择聚合结果最优的一次(这里涉及到聚类的评估方法);
kmeans++是一种启发式的初始化策略:
①从数据集中随机(均匀分布)选取一个样本点作为第一个初始聚类中心;
②接着计算每个样本与当前已有聚类中心之间的最短距离,Dx用表示;然后计算每个样本点被选为下一个聚类中心的概率,最后选择最大概率值所对应的样本点作为下一个簇中心;
其实就是选择最短距离最大的样本点作为下一个初始化聚类中心点
③重复第②步,直到选择出个聚类中心;
kmeans++是一种启发式的初始化策略,并没有严格的理论证明,是sklearn中kmeans的默认的初始化策略;
k-means如何调优
1.初始化策略调参;
2.k的大小调参,手工方法,手肘法为代表;
3.数据归一化和异常样本的处理;
参考:Kmeans聚类中常用的k值寻找方法-手肘法-轮廓系数法-CSDN博客
手肘法
核心指标是SSE(sum of the squared errors,误差平方和),
其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。
手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。
轮廓系数法
该方法的核心指标是轮廓系数(Silhouette Coefficient),某个样本点Xi的轮廓系数定义如下:
其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。而最近簇的定义是
其中p是某个簇Ck中的样本。事实上,简单点讲,就是用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。
求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。
k-means的缺点,怎么解决?
1.对异常样本很敏感,簇心会因为异常样本被拉得很远
注意,这里的异常样本指的仅仅是在某些特征维度上取值特别大或者特别小的样本,是异常检测中定义的异常样本的一个子集,因为欧式距离的计算不考虑不同变量之间的联合分布,默认所有特征是相互独立的,所以kmeans中会对结果产生影响的异常样本特指简单的异常样本,即某些特征维度存在异常值的样本,这类异常样本通过简单的统计就可以得到;
解决方法即做好预处理,将异常样本剔除或修正;
2.k值需要事先指定,有时候难以确定;
解决方法即针对k调参;
3.只能拟合球形簇,对于流形簇等不规则的簇或是存在簇重叠问题的复杂情况等,效果较差
解决方法,换算法;
4.无法处理离散特征,缺失特征,
4.无法保证全局最优
解决方法:矮子里面挑高个,跑多次,取不同的局部最优里最优的。kmeans的损失函数是一个非凸函数,所以无法保证全局最优;
dbscan和optics是怎么解决这些缺点的?
dbscan和optics是基于密度的聚类
1.kmeans对异常样本很敏感,簇心会因为异常样本被拉得很远
dbscan和optics定义了密度的计算方式,不涉及到任何的平均这种鲁棒性较差的计算方式,对异常样本不敏感,还能检测异常样本呢;
2.k值需要事先指定,有时候难以确定;
dbscan和optics不需要指定簇的数量;算法迭代过程中自然而然产生最优的k个聚类簇;
3.只能拟合球形簇,对于流形簇等不规则的簇或是存在簇重叠问题的复杂情况等,效果较差
基于密度的聚类可以拟合任意形状的簇,这也归功于密度的计算方式,基于密度的聚类本身不对聚类簇的形状有任何的假设;
4.无法处理离散特征,缺失特征:缺失特征要插补,离散特征可以换离散特征的距离度量方法,基于密度的聚类算法可以灵活搭配各种不同的distance的度量方式;
举例
离散数据的距离计算:
杰卡尔德距离:A,B集合的交集/A,B集合的并集
汉明距离:表示两个等长字符串在对应位置上不同字符的数目
5.无法保证全局最优:未解决
DBSCAN
该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。DBSCAN算法的显著优点是聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类。但是当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差。
优缺点 和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
step1.定义超参数eplison表示半径(即eplison-邻域),minpoints表示eplison-邻域下的最少样本数量;
step2.从数据集中依次选择一个样本点进入后续的处理,直到所有样本遍历完毕;
step3.对于选定的样本点s,做3件事