聚类方法介绍
聚类方法主要分为自上而下聚类和自下而上聚类。
自上而下聚类指的是,首先将所有的样本点一起看作一类,对这一大类不停地进行拆分;
而自下而上聚类指的是,首先把每个点自己都看成一类,这样起始会有n类,之后再逐渐合并。
1.k均值聚类方法
- 首先找到k个种子;
- 计算每个点到种子的距离,将其分到最近的种子所属的那一类;
- 重新计算k个类的重心,重复上述步骤。
- 满足设定的迭代次数,或类的重心距离变化小于阈值时停止迭代。
2.系统聚类法(自下而上)
- 首先将每一个点都看作一类;
- 找到距离最近的两个点,合并成一类;
- 再找到距离最近的两个点或两类,合并成一类,以此类推,直到最后合并为一类。
- 根据聚类的过程(谱系聚类图)以及所需要的聚类的数目得到聚类结果。
3.注意事项
因为使用欧式距离,因此要做标准化。
聚类方法的改进
1. k-means方法的优缺点
- 优点:非常快,O(KNt);很多时候局部最优也够用了。
- 缺点:
=局部最优;
=受异常值点和噪声影响大;
=受到初始值设定的影响,结果不稳定;
=当类内分布差异较大时聚类结果不佳。
2. k值的选取
其实选k的方法就是选取不停地k进行尝试之后选择类内离差平方和最小的k。
主要有碎石图法和gap statistic方法,思想类似。
- 碎石图法找损失函数最小的k;
- gap statistic方法找和期望相差最大的k。
G a p ( K ) = E ( l o g D k ) − l o g D k Gap(K)=E(logD_k)-logD_k Gap(K)=E(logDk)−logDk - 核函数法,低维映射到高维,增加线性可分的可能性。
3.初始值的选择方法改进
- k-means ++
k-means的初始值是随机选取的,不好;
改进方法是k-means++方法。
k-means++方法中,第一个种子随机选取,之后的每一个种子,都选择与前面的种子距离比较大的那些。 - isodata
k-means聚类过程中k不变化,不好;如果能够动态变化就好了。isodata就是这个思想。
如果某类过大(方差超过阈值),则将其拆分;
如果某两类距离过近(重心距离小于阈值),则将其合并;
如果某类拆分后的子类过小(内部元素个数小于阈值),则不拆。
聚类效果的评价
-
在进行聚类之前,需要判断数据是否可以进行聚类,即数据是否是随机分布,是否存在非随机的簇结构。
方法是:
a) 首先计算数据集中每一个点到最近点的距离,得到n个距离 x i x_i xi;
b) 在数据取值范围内随机生成n个点,对这随机生成的n个点中的每一个点,寻找与其距离最近的点,并分别计算距离,得到n个距离 y i y_i yi;
c) 比较 Σ x i \Sigma{x_i} Σxi和 Σ y i \Sigma{y_i} Σ