常见聚类方法的介绍及其改进与评估方法

聚类方法介绍

聚类方法主要分为自上而下聚类和自下而上聚类。
自上而下聚类指的是,首先将所有的样本点一起看作一类,对这一大类不停地进行拆分;
而自下而上聚类指的是,首先把每个点自己都看成一类,这样起始会有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就是这个思想。
    如果某类过大(方差超过阈值),则将其拆分;
    如果某两类距离过近(重心距离小于阈值),则将其合并;
    如果某类拆分后的子类过小(内部元素个数小于阈值),则不拆。

聚类效果的评价

  1. 在进行聚类之前,需要判断数据是否可以进行聚类,即数据是否是随机分布,是否存在非随机的簇结构。
    方法是:
    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} Σyi之间的大小。
    d) 若原始数据随机分布,则二者相差不大,H接近0.5,否则接近1。
    H = Σ y i / ( Σ x i + Σ y i ) H={\Sigma{y_i}}/{(\Sigma{x_i}+\Sigma{y_i})} H=Σyi/(Σxi+Σyi)

  2. 聚类后,对聚类效果进行评价,由于是无监督学习,所以只能从聚类后的数据是否分得开入手。即是否做到了类内同质化最大,类间异质化最大。 下面的统计量基本都是基于这个思想来构造的。

  • 轮廓系数
    对于数据集内任意一点p,计算该点到类内其他点的平均距离 a ( p ) a(p) a(p),计算该点到与它最近的类内点点平均距离 b ( p ) b(p) b(p),计算下述统计量。易见统计量越大聚类效果越好,对所有点计算 s ( p ) s(p) s(p)后求平均,即得到整体的聚类效果评估。
    s ( p ) = ( b ( p ) − a ( p ) ) / m a x ( a ( p ) , b ( p ) ) s(p)=(b(p)-a(p))/max(a(p),b(p)) s(p)=(b(p)a(p))/max(a(p),b(p))

  • R方
    思想就是,看点到类内重心的距离有没有比聚类之前到整体重心的距离变小。
    计算公式如下,肯定是越大越好。
    R 2 = Σ x ∈ D ∣ ∣ x − c ∣ ∣ 2 − Σ i Σ x ∈ C i ∣ ∣ x − c i ∣ ∣ 2 Σ x ∈ D ∣ ∣ x − c ∣ ∣ 2 R^2=\frac{\Sigma_{x\in D}||x-c||^2-\Sigma_{i}\Sigma_{x\in C_i}||x-c_i||^2}{\Sigma_{x\in D}||x-c||^2} R2=ΣxDxc2ΣxDxc2ΣiΣxCixci2

  • 均方根标准偏差RMSSTD
    就是计算了每个点到重心的距离,之后相当于做了归一化,对维度P做了惩罚。越小越好。
    R M S S T D = Σ i Σ x ∈ C i ∣ ∣ x − c i ∣ ∣ 2 P Σ i ( n i − 1 ) RMSSTD=\frac{\Sigma_{i}\Sigma_{x\in C_i}||x-c_i||^2}{P\Sigma_i(n_i-1)} RMSSTD=PΣi(ni1)ΣiΣxCixci2

  • Hubert Γ \Gamma Γ统计量
    思想和上面是反着的,上面是计算类内距离,应该是越小越好,这个统计量则是计算不同类点之间的距离,越大越好。
    Γ = 2 n ( n − 1 ) Σ x ∈ D Σ y ∈ D d ( x , y ) d x ∈ C i , y ∈ C j ( c i , c j ) \Gamma=\frac{2}{n(n-1)} \Sigma_{x\in D}\Sigma_{y\in D}d(x,y)d_{x\in C_i,y\in C_j}(c_i,c_j) Γ=n(n1)2ΣxDΣyDd(x,y)dxCi,yCj(ci,cj)

你可能感兴趣的:(机器学习,聚类,非监督学习,k-means,机器学习)