机器学习:k-means聚类算法+算法优化

第六章:机器学习course02:k-means聚类算法

标签(空格分隔): 10-机器学习

$---by:Rianusr$


##1 课题导入
###1.1 k-means常见的应用场景
![image_1chcukhmphq811001isriao1iujp.png-117.9kB][1]
###1.2 k-means概念
聚类算法:是一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。
聚类算法与分类算法最大的区别是:聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。
在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。
###1.3 算法流程

  • 1.选择聚类的个数k.
  • 2.任意产生k个聚类, 然后确定聚类中心, 或者直接生成k个中心。
  • 3.对每个点确定其聚类中心点。
  • 4.再计算其聚类新中心。
  • 5.重复以上步骤直到满足收敛要求(通常就是确定的中心点不再改变)。
    ![image_1chcv5d2d17u81gql17n9curlei1m.png-180.1kB][2]

###1.4 主要优缺点
####1.4.1 优点
a. 原理简单(靠近中心点)容易实现;
b. 聚类效果中上(依赖k的选择);
c. 结果不一定全局最优,只能保证局部最优(与k的个数及初选值有关)。
####1.4.2 缺点
a. 对离群点,噪声敏感(中心点易偏移);
b. 很难发现大小差别很大的簇进行增量计算;
c. 空间复杂度o(N),时间复杂度o(IKN #N-样本点个数;K-中心点个数;I-迭代次数)。
##2 K值的确定
###2.1 肘部法则核心指标
         ~~~~~~~~         肘方法的核心指标是SSE(sum of the squared errors, 误差平方和),Ci是第i个簇,p是Ci中的样本点, mi是Ci的质心(Ci中所有样本的均值) ,SSE是所有样本的聚类误差, 代表了聚类效果的好坏。
                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                         ![SSE.png-8kB][3]
###2.2 k值的确定
         ~~~~~~~~         肘方法的核心思想: 随着聚类数k的增大, 样本划分会更加精细, 每个簇的聚合程度会逐渐提高, 那么误差平方和SSE自然会逐渐变小。 并且, 当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度, 故SSE的下降幅度会很大, 而当k到达真实聚类数时, 再增加k所得到的聚合程度回报会迅速变小, 所以SSE的下降幅度会骤减, 然后随着k值的继续增大而趋于平缓, 也就是说SSE和k的关系图是一个手肘的形状, 而这个肘部对应的k值就是数据的真实聚类数。 这也是该方法被称为肘方法的原因。
                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                         ![02-肘部法则.png-73.5kB][4]
##3 k-means算法衡量
###3.1 轮廓系数法
####3.1.1 轮廓系数法计算
         ~~~~~~~~         轮廓系数法( Silhouette Coefficient) 结合了聚类的凝聚度( Cohesion) 和分离度( Separation),用于评估聚类的效果。 该值处于-1~1之间,值越大,表示聚类效果越好。
                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                         ![03轮廓系数法.png-10.5kB][5]

  • a是Xi与同簇的其他样本的平均距离, 称为凝聚度;
  • b是Xi与最近簇中所有样本的平均距离, 称为分离度。

####3.1.2 轮廓系数法评判标准
         ~~~~~~~~         轮廓系数取值为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。且当值为负时,表明ai < bi,样本被分配到错误的簇中,聚类结果不可接受。对于接近0的结果,则表明聚类结果有重叠的情况。
###3.2 Calinski-Harabasz

         ~~~~~~~~         Calinski-Harabasz:类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数s会高,分数s高则聚类效果越好。
                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                         ![07-Calinski-Harabasz聚类评判.png-6.1kB][6]
其中: - m为训练集样本数,
           ~~~~~~~~~~           - k为类别数。
           ~~~~~~~~~~           - Bk为类别之间的协方差矩阵,
           ~~~~~~~~~~           - Wk为类别内部数据的协方差矩阵,
           ~~~~~~~~~~           - tr为矩阵的迹。
           ~~~~~~~~~~           -公式的m-k与k-1作为一种拉普拉斯平滑,主要是为了某种小概率情况留一种可能性。
###3.3 最近簇
                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                         ![04最近簇.png-6.2kB][7]
         ~~~~~~~~         其中p是某个簇Ck中的样本。 即,用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后, 选择离Xi最近的一个簇作为最近簇。
![05轮廓系数实现效果图.png-124.1kB][8]

##4 Canopy算法配合k-means加快聚合过程
         ~~~~~~~~         k-means聚类算法最耗费计算的地方是计算对象相似性的时候。而Canopy聚类最大的特点是不需要事先指定k值(即clustering的个数), 因此具有很大的实际应用价值。
         ~~~~~~~~         Canopy聚类虽然精度较低, 但其在速度上有很大优势, 因此可以使用Canopy聚类先对数据进行“粗”聚类,得到k值后再使用K-means进行进一步“细”聚类。
###4.1 Canopy算法详解
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                ![06canopy+kmeans.png-154kB][9]
$$1、首先选择两个距离阈值:T1和T2,其中T1 > T2;
$
$2、从list中任取一点P,用低计算成本方法快速计算点P与所有Canopy之间的距离(如果当前不存在Canopy,则把点P作为一个Canopy),如果点P与某个Canopy距离在T1以内, 则将点P加入到这个Canopy;
$$3、如果点P曾经与某个Canopy的距离在T2以内,则需要把点P从list中删除,这一步是认为点P此时与这个Canopy已经够近了,因此它不可以再做其它Canopy的中心了;
$
4 、 重 复 步 骤 2 、 3 , 直 到 l i s t 为 空 结 束 。 < i c l a s s = " i c o n − p e n c i l " > < / i > 4、重复步骤2、 3, 直到list为空结束。 <i class="icon-pencil"></i> 423list<iclass="iconpencil"></i>$T2以内的删除,T1之外的直接作为另一个簇的中心点,T1、T2之间的保留,待定,可能会成为另一个簇中心。
###4.2 Canopy + k-means
$
$1、Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理;
$
$2、在各个Canopy 内使用传统的聚类方法(如K-means),不属于同一Canopy 的对象之间不进行相似性计算,根据Canopy算法产生的Canopies代替初始的K个聚类中心点。
###4.3 Canopy + k-means优缺点
####4.3.1 优点
$
$1、Kmeans对噪声抗干扰较弱,通过Canopy对比,将较小的NumPoint的Cluster直接去掉有利于抗干扰;
$
$2、Canopy选择出来的每个Canopy的centerPoint作为K会更精确;
$
~~~~$3、只是针对每个Canopy的内做Kmeans聚类,减少相似计算的数量。
####4.3.1 缺点
         ~~~~~~~~         算法中 T1、 T2(T2 < T1) 的确定问题

##5 算法优化
         ~~~~~~~~         主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。目前,聚类问题的研究不仅仅局限于上述的硬聚类(即每一个数据只能被归为一类,数据集中每一个样本都是被100%确定得分到某一个类别中),模糊聚类也是聚类分析中研究较为广泛的一个分支。模糊聚类(通过隶属函数来确定每个数据隶属于各个簇的程度,而不是将一个数据对象硬性地归类到某一簇中,可以理解为每个样本是以一定的概率被分到某一个类别中) 。
###5.1 硬聚类-1:K-means++
         ~~~~~~~~         假设已经选取了n个初始聚类中心(0< n< K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。 在选取第一个聚类中心(n=1)时同样通过随机的方法。可以说这也符合我们的直觉: 聚类中心当然是互相离得越远越好。
###5.2 硬聚类-2:ISODATA
         ~~~~~~~~         类别数目随着聚类过程而变化;对类别数的“合并”:(当聚类结果某一类中样本数太少,或两个类间的距离太近时),“分裂”(当聚类结果中某一类的类内方差太大, 将该类进行分裂)。
###5.3 硬聚类-3:Kernel k-means
         ~~~~~~~~         kernel k-means实际公式上,就是将每个样本进行一个投射到高维空间的处理,然后再将处理后的数据使用普通的k-means算法思想进行聚类。
###5.4 硬聚类-4:二分K-means
         ~~~~~~~~         首先将所有点作为一个簇,然后将该簇一分为二。之后选择能最大限度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。 以此进行下去,直到簇的数目等于用户给定的数目k为止。
         ~~~~~~~~         隐含的一个原则就:因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于他们的质心,聚类效果就越好。所以我们就需要对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果越不好,越有可能是多个簇被当成了一个簇,所以我们首先需要对这个簇进行划分。
         ~~~~~~~~         二分K均值算法可以加速K-means算法的执行速度,因为它的相似度计算少了不受初始化问题的影响,因为这里不存在随机点的选取,且每一步都保证了误差最小。
##6 Mini Batch K-Means(适合大数据的聚类算法):
         ~~~~~~~~         大数据量是什么量级?通过当样本量大于1万做聚类时,就需要考虑选用Mini Batch K-Means算法。
         ~~~~~~~~         Mini Batch KMeans使用了一个种叫做Mini Batch(分批处理)的方法对数据点之间的距离进行计算。 Mini Batch的好处是计算过程中不必使用所有的数据样本, 而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本量少, 所以会相应的减少运行时间,但另一方面抽样也必然会带来准确度的下降。

         ~~~~~~~~         该算法的迭代步骤有两步:
$$1: 从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心
$
$2: 更新质心与K均值算法相比,数据的更新是在每一个小的样本集上。
         ~~~~~~~~         对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心, 随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数, 停止计算。

##7 聚类分析结果的优化
###7.1 业务专家的作用
         ~~~~~~~~         业务专家的作用非常大,主要体现在聚类变量的选择和对于聚类结果的解读:
         ~~~~~~~~         比如要对于现有的客户分群,那么就要根据最终分群的目的选择不同的变量来分群,这就需要业务专家经验支持。如果要优化客户服务的渠道,那么就应选择与渠道相关的数据;如果要推广一个新产品,那就应该选用用户目前的使用行为的数据来归类用户的兴趣。算法是无法做到这一点的
         ~~~~~~~~         欠缺经验的分析人员和经验丰富的分析人员对于结果的解读会有很大差异。其实不光是聚类分析,所有的分析都不能仅仅依赖统计学家或者数据工程师。
###7.2 GMM高斯混合模型
####7.2.1 课题的导入
         ~~~~~~~~         在点(样本点)模式的分析中, 一般会考察如下五种内容:
$$1、 点的疏密,包括点数据的分布探索,是否一致、均匀或者不均匀;
$
$2、 点的方位,包括点的分布和方向;
$$3、 点的数量:多少(极值和均值);
$
$4、 点的大小:代表的含义(如点一个点代表多少人口);
$~~~~~~~~$5、 其他,如点的一些动态变化等。
####7.2.2 标准差椭圆–假设数据服从高斯分布
                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                 ![02-标准差椭圆.png-222.1kB][10]
         ~~~~~~~~         图中红色的点是伤寒发病的案例,蓝色的河流是长江太湖流域段,从计算的结果来看,发病的数据方向与长江的流向方向基本一致,而范围较大。
         ~~~~~~~~         从上图,我们基本上就可以看出方向分布工具–标准差椭圆的主要作用了,它可以识别一组数据的方向以及分布的趋势,并且了解到这份数据是否具有一些特性,至于有哪些特性,我们后面再说。
         ~~~~~~~~         我们先来看看这个标准差椭圆的生成算法
####7.2.3 标准差椭圆的生成

  • 主要步骤:
  • 1.确定圆心;
    • 直接利用的算数平均中心来计算椭圆的圆心坐标,公式如下:
      S D E x = ∑ i = 1 n ( x i − X ‾ ) 2 n SDE_x = \sqrt{{\sum_{i=1}^n(x_i- \overline X)^2} \over n} SDEx=ni=1n(xiX)2
      S D E y = ∑ i = 1 n ( y i − Y ‾ ) 2 n SDE_y = \sqrt{{\sum_{i=1}^n(y_i- \overline Y)^2} \over n} SDEy=ni=1n(yiY)2
      其中, x i , y i x_i,y_i xi,yi是每个要素的空间未知坐标,X和Y是算数平均中心。
  • 2.确定旋转角度;
    • 以X轴为准,正北方(12点方向)为0度,顺时针旋转,计算公式如下:
      $tan~\theta = {{A+B} \over C} $
      A = ( ∑ i = 1 n x ~ i 2 − ∑ i = 1 n y ~ i 2 ) A=(\sum_{i=1}^n\tilde{x}_i^2 - \sum_{i=1}^n\tilde{y}_i^2 ) A=(i=1nx~i2i=1ny~i2)
      B = ( ∑ i = 1 n x ~ i 2 − ∑ i = 1 n y ~ i 2 ) 2 − 4 ( ∑ i = 1 n x ~ i y ~ i ) 2 B=\sqrt{(\sum_{i=1}^n\tilde{x}_i^2 - \sum_{i=1}^n\tilde{y}_i^2 )^2-4(\sum_{i=1}^n\tilde{x}_i\tilde{y}_i)^2} B=(i=1nx~i2i=1ny~i2)24(i=1nx~iy~i)2
      C = 2 ∑ i = 1 n x ~ y ~ C=2\sum_{i=1}^n\tilde{x}\tilde{y} C=2i=1nx~y~
      其中 x ~ \tilde{x} x~ y ~ \tilde{y} y~是平均中心和xy坐标的差
  • 3.确定XY轴(长短轴)的长度。
    • 确定xy轴的长度
      σ x = 2 ∑ i = 1 n ( x ~ i c o s   θ − y ~ i s i n   θ ) 2 n \sigma_x=\sqrt2 \sqrt{{\sum_{i=1}^n(\tilde{x}_icos~\theta-\tilde{y}_isin~\theta)^2} \over n} σx=2 ni=1n(x~icos θy~isin θ)2
      σ y = 2 ∑ i = 1 n ( x ~ i s i n   θ + y ~ i c o s   θ ) 2 n \sigma_y=\sqrt2 \sqrt{{\sum_{i=1}^n(\tilde{x}_isin~\theta+\tilde{y}_icos~\theta)^2} \over n} σy=2 ni=1n(x~isin θ+y~icos θ)2
  • 带入数据可以算出椭圆参数。
    ![03-标准差椭圆.png-324.5kB][11]

####7.2.4 标准差椭圆反应的数据的特性

  • 1、椭圆的长半轴表示的是数据分布的方向, 短半轴表示的是数据分布的范围, 长短半轴的值差距越大(扁率越大),表示数据的方向性越明显。反之,如果长短半轴越接近,表示方向性越不明显。如果长短半轴完全相等,就等于是一个圆了,圆的话就表示没有任何的方向特征。
    2、短半轴表示数据分布的范围,短半轴越短,表示数据呈现的向心力越明显;反之,短半轴越长,表示数据的离散程度越大。同样,如果短半轴与长半轴完全相等了,就表示数据没有任何的分布特征。
    3、中心点表示了整个数据的中心位置,一般来说,只要数据的变异程度不是很大的话,这个中心点的位置大约与算数平均数的位置基本上是一致的,至于数据变异是什么情况,请看下面第4点。
    4、有的同学会很疑惑,为什么你画的这个椭圆,还有很多的点都在外面,没有把所有的点都包
    含进去? 那么就是就是“标准差椭圆”这个名词里面的“标准差”的含义所在了。

####7.2.5 标准差椭圆的等级 - 对应于3 σ \sigma σ准则

  • 一级标准差椭圆包含68%的数据;
  • 二级标准差椭圆包含95%的数据;
  • 三级标准差包含99%的数据。
  • 旋转不同等级的标准差椭圆对应的椭圆的中心位置也不一样。

####7.2.6 标准差椭圆工具的应用

  • 1、可用来在地图上标示一组犯罪行为的分布趋势,并且能够确定该行为与特定要素(一系列酒吧或餐馆、某条特定街道等)的关系。
    2、在地图上标示地下水井样本的特定污染,可以指示毒素的扩散方式,这在部署应急防灾策略时非常有用。
    3、对各个物种所在区域的椭圆的大小、形状和重叠部分进行比较可以分析与物种入侵或者隔离相关的深入信息。
    4、绘制一段时间内疾病爆发情况的椭圆可用于建立疾病传播的模型。

###7.3 高斯混合模型
         ~~~~~~~~         高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                 ![01高斯混合模型.png-141.4kB][12]
                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                    现实中数据通常比较复杂,通常可以描述为多个服从高斯分布数据的集合
###7.4 k-means+高斯混合模型+标准差椭圆
         ~~~~~~~~         在实际的数据分析过程中,在使用k-means聚类分析后,可以将样本分为几个簇,但是每个簇的中心并不一定是全局最优,另外对于每个簇的数据特性还需要做进一步的阐释,此时,通过GMM高斯混合模型对每个簇做一个高斯模型的标准差椭圆,做进一步的调整分析可以加深对数据的理解与认识。
###7.5 高斯混合模型深入探讨
         ~~~~~~~~         高斯混合模型也可用于聚类分析,且为模糊聚类–每个样本以极大似然估计概率分到某类。
####7.5.1 高斯混合模型

  •          ~~~~~~~~         设有随机变量X,则混合高斯模型可以用下式表示:
  • p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , ∑ k ) p(x)=\sum_{k=1}^K \pi_kN(x|\mu_k,\sum_k) p(x)=k=1KπkN(xμk,k)
    • 其中: N ( x ∣ μ k , ∑ k ) N(x|\mu_k,\sum_k) N(xμk,k)为k簇服从 ( μ k , ∑ k ) (\mu_k,\sum_k) (μk,k)分布,在该情况下x出现的概率, ∑ k \sum_k k表示协方差矩阵;
    • π k \pi_k πk是混合系数,可以看作第k个簇的权重,且满足 ∑ k = 1 K π k = 1 , 0 ≤ π k ≤ 1 \sum_{k=1}^K \pi_k=1,0 \le \pi_k \le 1 k=1Kπk=10πk1
  • 每个GMM由K个Gaussian分布组成,每个Gaussian称为一个‘Component’,这些Component线性加成在一起就组成了GMM的概率密度函数:
    p ( x ) = ∑ k = 1 K p ( k ) p ( x ∣ k ) p(x)=\sum_{k=1}^Kp(k)p(x|k) p(x)=k=1Kp(k)p(xk)
             = ∑ k = 1 K π k p ( x ∣ k ) N ( x ∣ μ k , ∑ k ) ~~~~~~~~=\sum_{k=1}^K\pi_kp(x|k)N(x|\mu_k,\sum_k)         =k=1Kπkp(xk)N(xμk,k)

####7.5.2 高斯混合模型的求解
         ~~~~~~~~         可以通过EM算法进行求解。
[1]: http://static.zybuluo.com/rianusr/8792bk00enm1rh1mde6k5tsi/image_1chcukhmphq811001isriao1iujp.png
[2]: http://static.zybuluo.com/rianusr/4grxdnbovaf219n3edyuvqmj/image_1chcv5d2d17u81gql17n9curlei1m.png
[3]: http://static.zybuluo.com/rianusr/lzv2sv5s10k8h7gl0pb2xgwr/SSE.png
[4]: http://static.zybuluo.com/rianusr/chv54teosfbcrgvkl7nv29gq/02-%E8%82%98%E9%83%A8%E6%B3%95%E5%88%99.png
[5]: http://static.zybuluo.com/rianusr/lvwecsqpz1p0jk6z0p2oz86j/03%E8%BD%AE%E5%BB%93%E7%B3%BB%E6%95%B0%E6%B3%95.png
[6]: http://static.zybuluo.com/rianusr/320gffq2qojl7gbiis5xilg8/07-Calinski-Harabasz%E8%81%9A%E7%B1%BB%E8%AF%84%E5%88%A4.png
[7]: http://static.zybuluo.com/rianusr/gvxu6gj0ogkpwan486iz38uz/04%E6%9C%80%E8%BF%91%E7%B0%87.png
[8]: http://static.zybuluo.com/rianusr/1q9yw4y3bze2o8am476ejyev/05%E8%BD%AE%E5%BB%93%E7%B3%BB%E6%95%B0%E5%AE%9E%E7%8E%B0%E6%95%88%E6%9E%9C%E5%9B%BE.png
[9]: http://static.zybuluo.com/rianusr/jsirw25ba0w7ewswxjy3ho09/06canopy+kmeans.png
[10]: http://static.zybuluo.com/rianusr/v5crf388yaic6gop0ev4xv3z/02-%E6%A0%87%E5%87%86%E5%B7%AE%E6%A4%AD%E5%9C%86.png
[11]: http://static.zybuluo.com/rianusr/gfc0gmy8pe5jejouq6rcimkc/03-%E6%A0%87%E5%87%86%E5%B7%AE%E6%A4%AD%E5%9C%86.png
[12]: http://static.zybuluo.com/rianusr/5ptjvy8enqt8j49on0lqec1a/01%E9%AB%98%E6%96%AF%E6%B7%B7%E5%90%88%E6%A8%A1%E5%9E%8B.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值