K-Means & DBSCAN 聚类算法

问题:

什么是聚类算法,其难点在哪

有哪些是聚类算法,其处理过程是什么,优劣势有哪些

评估聚类算法的方法

聚类算法,是无监督学习,也就是无标签(label),是把相似的数据划分在一起

聚类算法的普遍难点在于:如何选择合适的参数(调参),怎样评估聚类效果是好的(评估)

聚类算法中比较常用的有K-means 和DBSCAN

K-means : 以质心为中心,聚类成K个簇

需要设定的参数:K值

质心——对该簇所有点所有特征取均值

怎么找到点形成簇呢——距离度量:欧式距离或者(先标准化)余弦相似度(使用欧式距离的比较多)

K-means 就是找到离某个质心更近的那些点形成一个簇

那么我们希望的情况就是,聚完类后,每个点都能离所属簇的质心距离最近(相比于其他簇的质心)

因此我们可以得到我们的优化目标,就是使该簇的所有点到该簇的质心的距离之和尽量小,那么不断优化,直到质心不再变时,总距离也就不变,此时我们得到最后的聚类。

那么如何优化我们的质心呢?(也就是K-means的聚类过程)

首先,因为一开始没有质心可以确定,那么K个质心就会随机取(最后要分为K个簇),

那么质心就有初始化了,也就可以开始计算和比较各个点和各个质心之间的距离了,每个点找到离自己距离最近的质心,

那么第一次聚类就完成了。

之后的优化:除了质心以外,再次计算每个簇中每个点的均值,得到新的质心,然后又重新计算计算和比较各个点和各个质心之间的距离(也就是重新进行聚类,分簇),每个点再次找到离自己距离最近的质心,那么完成了新一次的聚类。

不断重复上面的优化,直到质心基本不变了,那么最后的聚类结果也就出来了。

动态分析网站:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

上面可以动态展示这个过程。

在K-means的聚类过程中,我们可以发现到,K-means会收一开始取得随机质心的位置影响十分大,会影响最后的聚类结果。

同时也可以发现,K-means对于规则的数据集效果是不错的,但是对于不规则的数据,例如笑脸数据和环状数据,效果不好,或者说是没有我们想要的聚类效果,难以发现不规则形状的簇。这是K-means的劣势。

还有的就是从数据方面,可以发现,K-means的复杂程度是会和数据量成线性关系,数据量大,复杂程度越大

那么K-means也有其优势:简单、适用于常规数据集(也就是我们人能直接分开的)

DBSCAN,基于密度的带有噪声点数据的空间聚类

Density-Based Spatial Clustering of Applications with Noise

DBSCAN 其实就是“画圆”

圆多大,圆里怎么样

“谁”能画,“谁”又不能

怎样聚类成簇

DSCAN,需要设定参数有:圆的半径r , 圆内至少多少个点(阈值):minPts

核心对象:以某个点为圆心,画半径为r的圆,如果圆内点数(不包括本身)超过阈值,那么就是核心对象

边界点:圆内点数(不包括本身)超过阈值,但在核心对象的领域内的点

离群点:圆不能圈到的点

还有一些相关的概念可看参考文章 聚类算法之DBSCAN

 http://itindex.net/detail/58485-%E8%81%9A%E7%B1%BB-%E7%AE%97%E6%B3%95-dbscan

DBSCAN聚类的过程就是

对于某个点来说,丈量一个圆,如果圆能圈住了超过阈值的点,那么就能“画圆”把点圈住,而他就是核心对象

核心对象加进簇中,

然后看被圈住的点,同样去看他是不是核心对象,如果不是核心对象,不能画圆,那么他们是边界点

边界点同样能加进簇中。重复这个过程直到簇没有新加点才去再建立一个新的簇

而最后没有在簇中,也不能被圈住的 点就是离群点

所以对于DBSCAN来说,聚类就是把核心对象和其领域里的点都包括起来

那么我们如何知道有合适的r和minPts呢

我们需要借助k-距离

k-距离的意思是某个点到所有点,除自己以外,距离第k近的距离,

而每个点都计算k-距离,也就是每个点都有到所有点,距离第k近的距离,把所有的距离由小到大进行排序

那么我们就能得到一个集合,放的都是距离

我们去观察距离,找到突变的点

例如 排序如 0.1 0.11 0.12 0.3 0.32 0.32 。。。

这样类似的,那么可以确定到0.3那发生了突变,而前面的三个值,我们可以拿来当r值,有三个点,即作为阈值

可以知道DBSCAN 的优势是不用指定簇,但同样的需要指定参数——半径r和阈值minPts

同时,因为这是基于密度的聚类方法,可以很好地发现不规则形状的簇,

而因为它能找到离群点,擅长离群点检测(sklearn中离群点作为-1的簇)

但是也有其劣势

处理高纬度的数据难,效率慢,也需要合适的参数

它需要进行比K-means进行更多的处理

对此我们可以进行降维,和数据削减

DBSCAN 动态处理展示:

https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

最后我们需要对聚类进行评估,聚类的效果怎么样——轮廓系数 silhoutte Coefficient

s(i)=b(i)-a(i) / max{b(i),a(i)}

a(i):样本i到同样簇的其他样本的平均距离

b(i):样本i到其他簇Cj的其他样本的平均距离

a(i)越小,说明其越该被聚类到该簇

可以知道

s(i)接近1,则样本i聚类合理,-1就是该分到别的簇,0就是意味着样本在两簇的边界上

对于聚类算法,大多流程如下:

聚类——可视化展示——评估——重新选取更合适参数

猜你喜欢

转载自blog.csdn.net/qq_40229367/article/details/88252840
今日推荐