聚类

简述

几种典型的聚类算法*(聚类算法属于面试非常常见的问题)

1、基于划分的聚类----K-均值算法

k-means中样本间的相似度是由他们之间的距离决定的,距离越近,相似度越高。
常见的距离计算方式:欧式距离,曼哈顿距离,切比雪夫距离,明可夫斯基距离等等。

算法步骤:

1、首先选取k个簇(k需要指定)的质心,通常是随机选取。
2、对剩余的每个样本点,计算它们到各个质心的欧式距离,并将其归入到相互间距离最小的质心所在的簇,计算各个新簇的质心。
3、在所有样本点都划分完毕后,根据划分情况重新计算各个簇的质心所在位置然后迭代计算各个样本点到各簇质心的距离,对所有样本点重新进行划分
4、重复2和3步骤,直到迭代计算后,所有样本点的划分情况保存不变,此时说明k-均值算法得到最优解,返回结果

缺点

1、由于算法采用了贪心策略,导致算法容易局部收敛,在大规模的数据集上求解缓慢
2、对离群点和噪声点非常敏感,初始聚类中心的选取对算法结果影响很大,不同的初始中心可能会导致不同的结果
3、k值的选取直接影响聚类结果

关于k值的确定

1、手肘法
可以尝试不同的K值,并将不同K值所对应的损失函数画成折线,横轴为K的取值,纵轴为误差平方和所定义的损失函数
2、轮廓系数
在实际应用中,由于kmeans一般作为数据预处理,或者用于辅助分聚类贴标签,所以k一般不会设置很大。可以通过枚举,另k从2到一个固定值如10,在每个k值上重复运行kmeans(避免局部最优解),计算当前k的平均轮廓系数,最后选取轮廓系数最大的值所对应的k作为最终的集群数目。

如何根据kmeans算法的优缺点进行调优

K均值算法的调优一般可以从以下几个角度出发。
(1)数据归一化和离群点处理
K均值聚类本质上是一种基于欧式距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生决定性的影响,所以未做归一化处理和统一单位的数据是无法直接参与运算和比较的。同时,离群点或者少量的噪声数据就会对均值产生较大的影响,导致中心偏移,因此使用K均值聚类算法之前通常需要对数据做预处理。
(2)合理选择K值
关于如何确定k值的方法很多,上述简单介绍了两种。
(3)采用核函数
采用核函数是另一种可以尝试的改进方向。传统的欧式距离度量方式,使得K均值算法本质上假设了各个数据簇的数据具有一样的先验概率,并呈现球形或者高维球形分布,这种分布在实际生活中并不常见。面对非凸的数据分布形状时,可能需要引入核函数来优化,这时算法又称为核K均值算法,是核聚类方法的一种。核聚类方法的主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的特征空间中进行聚类。非线性映射增加了数据点线性可分的概率,从而在经典的聚类算法失效的情况下,通过引入核函数可以达到更为准确的聚类结果。

针对K均值算法的缺点,有哪些改进的模型?

K均值算法的主要缺点如下。
(1)需要人工预先确定初始K值,且该值和真实的数据分布未必吻合。
(2)K均值只能收敛到局部最优,效果受到初始值很大。
(3)易受到噪点的影响。
(4)样本点只能被划分到单一的类中。

k-means++

K均值的改进算法中,对初始值选择的改进是很重要的一部分。而这类算法中,最具影响力的当属K-means++算法,其思想是使得初始聚类中心的相互距离尽可能的远离。
原始K均值算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心。假设已经选取了n个初始聚类中心(0

Mini Batch K-Means算法

K-means算法的变种,采用小批量的数据子集减小计算时间。这里的小批量指的是每次训练算法时随机抽取的数据子集,采用这些随机产生的子集进行训练算法,大大减小了计算时间,结果一般只略差于标准算法。
该算法有两个步骤:
1、从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心。
2、更新质心:与k-means算法相比,数据的更新是在每一个小的样本集上。因此Mini-batch k-means比k-means有更快的收敛速度,但同时也降低了聚类的效果。

2、基于密度的聚类

基于划分和基于层次的聚类是根据距离来划分簇的,因此只能用于挖掘球状数据。为了解决这一问题,基于密度聚类算法利用密度思想,将样本中的高密度区域划为簇,将簇看作是样本空间中被稀疏区域(噪声)分隔开来的稠密区域。

DBSCAN算法

该算法将具有足够高密度的区域划为簇,所以可以发现任何形状的聚类,并且能够过滤噪声样本对聚类结果的影响。
详细的算法过程可以参考 :
https://www.jianshu.com/p/e594c2ce0ac0

算法思想

任意选取一个核心对象作为“种子”,然后从种子出发寻找所有密度可达的核心对象,并且包含每个核心对象的领域内的非核心对象,将这些核心对象和非核心对象作为一个簇。当寻找完成一个簇后,选择没有被簇标记的其他核心对象买得到一个新簇,反复执行这个过程,直到所有的核心对象都属于某一个簇为止。

优缺点:

  • 当数据量增大时,要求较大的内存支持I/O消耗也很大
  • 当空间聚类的密度不均匀,聚类间距相差很大是,聚类质量较差

DBSCAN 和k-means相比:

  • DBSCAN不需要输入聚类的个数
  • 对聚类簇的形状没有要求
  • 可以在需要时输入过滤噪声的参数

你可能感兴趣的:(机器学习)