K-means聚类、DBScan聚类算法

K-means聚类

k-means算法,它在学术领域及业界都得到了广泛应用。聚类(或称为聚类分析)是一种可以找到相似对象群组的技术,与组间对象相比,组内对象之间具有更高的相似度。聚类在商业领域的应用包括:按照不同主题对文档、音乐、电影等进行分组,或基于常见的购买行为,发现有相同兴趣爱好的顾客,并以此构建推荐引擎。

与其他聚类算法相比,k-means算法易于实现,且具有很高的计算效率,这也许就是它得到广泛使用的原因。

具体有如下四个步骤:
1)从样本点中随机选择k个点作为初始簇中心。
2)将每个样本点划分到距离它最近的中心点μ(j),j∈{1,…,k}所代表的簇中。
3)用各簇中所有样本的中心点替代原有的中心点。
4)重复步骤2和3,直到中心点不变或者达到预定迭代次数时,算法终止。

 

现在面临的一个问题就是:如何度量对象之间的相似性?我们可以将相似性定义为距离的倒数,在m维空间中,对于特征取值为连续型实数的聚类分析来说,常用的距离度量标准是欧几里得距离的平方:

基于欧几里得度量标准,我们可以将k-means算法描述为一个简单的优化问题,通过迭代使得簇内误差平方和(within-cluster sum of squared errors,SSE)最小,也称作簇惯性(cluster intertia)。

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3,n_init=10,max_iter=300,tol=1e-04,random_state=0)
y_km = km.fit_predict(X)

指定先验的簇数量是k-means算法的一个缺陷

k-means++

经典的k-means算法,它使用随机点作为初始中心点,若初始中心点选择不当,有可能会导致簇效果不佳或产生收敛速度慢等问题。
解决此问题的一种方案就是在数据集上多次运行k-means算法,并根据误差平方和(SSE)选择性能最好的模型。
另一种方案就是使用k-means++算法让初始中心点彼此尽可能远离,相比传统k-means算法,它能够产生更好、更一致的结果。

k-means++算法的初始化过程可以概括如下:
1)初始化一个空的集合M,用于存储选定的k个中心点。
2)从输入样本中随机选定第一个中心点μ(j),并将其加入到集合M中。
3)对于集合M之外的任一样本点x(i),通过计算找到与其平方距离最小的样本d(x(i),M)2。
4)使用加权概率分布来随机选择下一个中心点μ(p)。
5)重复步骤2、3,直到选定k个中心点。
6)基于选定的中心点执行k-means算法。

通过scikit-learn的KMeans对象来实现k-means++算法,只需将init参数的值random替换为k-means++(默认值)即可。

k-means算法还有另一个问题,就是一个或多个簇的结果可能为空。但k-medoids或者模糊C-means算法中不存在这种问题,我们将在下一小节讨论这两种算法。
不过,此问题在当前scikit-learn实现的k-means算法中是存在的。
如果某个簇为空,算法将搜索距离空簇中心点最远的样本,然后将此最远样本点作为中心点。

 

 

当我们使用欧几里得距离作为度量标准将k-means算法应用到真实数据中时,需要保证所有特征值的范围处于相同尺度,
必要时可使用z-score标准化或最小-最大缩放方法对数据进行预处理。

DBSCAN

尽管无法在本章中介绍大量的不同的聚类算法,但我们至少可以再介绍另一种聚类方法:(包含噪声情况下)基于密度空间的聚类算法(Density-based Spatial Clustering of Applications with Noise,DBSCAN)。

在DBSACN中,密度被定义为指定半径ε范围内样本点的数量。

在DBSCAN中,基于以下标准,每个样本(点)都被赋予一个特殊的标签:
1.如果在一个点周边的指定半径内,其他样本点的数量不小于指定数量(MinPts),则此样本点称为核心点(core point)。
2.在指定半径ε内,如果一个点的邻居点少于MinPts个,但是却包含一个核心点,则此点称为边界点(border point)。
3.除了核心点和边界点外的其他样本点称为噪声点(noise point)。

完成对核心点、边界点和噪声点的标记后,DBSCAN算法可总结为两个简单的步骤:
1)基于每个核心点或者一组相连的核心点(如果核心点的距离很近,则将其看作是相连的)形成一个单独的簇。
2)将每个边界点划分到其对应核心点所在的簇中。

与k-means算法不同,DBSCAN的簇空间不一定是球状的,这也是此算法的优势之一。

 

posted @ 2019-10-18 23:58  心平万物顺  阅读(592)  评论(0编辑  收藏  举报