文章目录
一、聚类的基本概念
二、K-means聚类
三、基于模型的聚类
四、按密度聚类
五、matlab实现
一、聚类的基本概念
物以聚类,人以群分,相似的东西会被安排在一起。聚类就是把相似的一类事物找到一起。
聚类与分类不同,聚类之前数据样本并没有标签,学习过程完全靠数据驱动,是一种无监督学习。
相似的一类样本叫做一簇,簇内部元素相对接近,簇与簇之间元素差异较大。如下图:
因为聚类是一种无监督学习,所以聚类结果并没有严格意义上的对错之分。如下图,可以按蓝圈来聚类,也可以按绿圈来聚类。
聚类在实际生活中有很广泛的应用。例如,在世界地图上我们把地震点(红点)连在一起完成聚类,形成一个“地震图”,我们可以看出地震经常发生在板块交界处。
又例如聚类在图像分割中的应用:
聚类的簇越多,图像就越接近原始的图。
通常来说,定义两个物体接不接近要看从什么属性来判别,根据不同的角度来聚类要结合实际情况去指定。
坐标的变化也会影响聚类结果:
二、K-means聚类
K-means聚类方法,顾名思义,就是把我们的样本点划分到k个簇中。
K-means是怎么实现的呢?
我们先在坐标系中随机选取k个点(下图中红点)作为每个簇的中心(簇中心初始化是如此,但簇中心只是一个坐标,不代表任何点)。
那么样本中所有点都可以找到离自己最近的簇中心并把自己算到这个簇里。
所有点的簇划分好了之后,我们看到,此时的簇中心就不是该簇的位置中心点了。我们再把每个簇内单点位置的平均值作为这个簇的新中心。
K-means中的mean就是取均值的意思。簇中心更新如下图:
这样我们就可以按此方式迭代下去,直到每个簇和簇中心稳定下来为止。
K-means算法流程可以按下图表示。
一些注意事项:
1、K值选取老大难。
2、K-means对那些簇间距较远且簇形状大致为球形的样本运算速度很快,大致5、6步就能迭代完成。如下图:
3、因为簇中心是按照样本均值来更新的,对于形状较为复杂的簇,K-means就不能很好地解决。均值计算也很受噪点、离群点的影响。还是这个图:
4、运算结果也很受初始点选取的影响。
三、基于模型的聚类
模型聚类是一种基于模型的聚类,将数据点用模型去逼近,并没有把样本点严格的划分到哪一簇里。
比如我们用高斯模型去做聚类。
用一组高斯去逼近所给的数据,用权重连接起来
因为要保证所有高斯的概率面积和是1,所以所有的和为1。
我们可以用期望最大化法去实现。
模型聚类的实现是一个“曲线救国”的过程,但与K-means很类似:
我们假设所有的高斯方差相同,目标是计算簇均值和权重:
其中
m是所有样本点数量;
n是高斯个数(簇个数);
Zij表示第i个样本点是由第j个高斯生成的概率,E(Zij)表示Zij的期望。
E(Zij)是一个隐含的参数,它的作用类似我们算几何问题时的“辅助线“。
用高斯模型逼近数据的可视化过程如下图:
四、按密度聚类
我们看下面这个图:
图中每一簇的形状都很怪异,而且存在大量的噪点。K-means算法的缺点在这个图里基本都体现出来了。
DBSCAN(Density-BasedSpatial Clustering of Applications with Noise),是一种基于密度来对样本点聚类的方法。DBSCAN的聚类结果和人眼对样本点的直观感觉很接近。
而且扎心的是,相对K-means来说基于密度的聚类方法也不用事先设置K值。
DBSCAN对样本点的分类大致三种,如下图:
DBSCAN算法原理如下:
1.设置一个距离阈值l,如果某两个点的距离小于l,就说p、q之间的密度较小。
2.如果p、q距离较远,但p、q之间有一个和他俩都互为密度较小的点,并能将他俩联系在一起,就可以说他们三之间密度较小。
3.以此类推,我们就可以把密度较小的点连起来,有点像人际网络。
DBSCAN算法实现过程:从某个核心点出发,不断地把其他能关联的点拉拢过来,作为一个簇。噪点和谁的距离都很远,就不要了(K-means则把所有点都进行聚类,根据实际情况选择聚类方式)。
五、matlab实现
1、K-means聚类
2、DBSCAN聚类