聚类方法 (clustering function)

聚类方法 (clustering function)

  • Abstract
    • 聚类是针对给定的样本,依据它们特征的相似度或距离,将其归并到若干个类或簇中
  • 聚类的基本概念
    • 相似度或距离 (similarity or distance)

      • 聚类的对象是观测数据,或样本集合
      • 假设有 n n n个样本,每个样本由 m m m个属性的特征向量组成
        • 矩阵 X X X表示样本集合
          • X = [ x i , j ] m × n = [ x 1 , 1 x 1 , 2 ⋯ x 1 , n x 2 , 1 x 2 , 2 ⋯ x 2 , n ⋮ ⋮ ⋮ ⋮ x m , 1 x m , 2 ⋯ x m , n ] X=[x_{i,j}]_{m\times n}=\left[\begin{matrix}x_{1,1}&x_{1,2}&\cdots&x_{1,n}\\x_{2,1}&x_{2,2}&\cdots&x_{2,n}\\\vdots&\vdots&\vdots&\vdots\\x_{m,1}&x_{m,2}&\cdots&x_{m,n}\end{matrix}\right] X=[xi,j]m×n=x1,1x2,1xm,1x1,2x2,2xm,2x1,nx2,nxm,n
          • 矩阵的第 j j j列表示第 j j j个样本
            • j = 1 , 2 , ⋯   , n j=1,2,\cdots,n j=1,2,,n
          • i i i行表示第 i i i个属性
            • i = 1 , 2 , ⋯   , m i=1,2,\cdots,m i=1,2,,m
      • 在聚类中,将样本集合看作是向量空间中点的集合,以该空间的距离表示样本之间的相似度
        • 向量空间
          • 定义
            • F F F上的向量空间 V V V是满足下面合成法则的集合
              • (a)加法
                • V × V → V V\times V\rightarrow V V×VV, 记作 v , w → v + w v,w\rightarrow v+w v,wv+w, 其中 v , w ∈ V v,w\in V v,wV
              • (b)标量乘法
                • F × V → V F\times V\rightarrow V F×VV, 记作 c , v → c v c,v\rightarrow cv c,vcv, 其中 c ∈ F , v ∈ V c\in F,v\in V cF,vV
          • 这两个合成法则满足下列公理
            • 加法使 V V V成为交换群 V + V^+ V+, 并带有恒等元,记作0
            • 1 v = v 1v=v 1v=v,对所有 v ∈ V v\in V vV成立
            • 结合律
              • ( a b ) v = a ( b v ) (ab)v=a(bv) (ab)v=a(bv)
              • 对所有 a , b ∈ F a,b\in F a,bF, v ∈ V v\in V vV成立
            • 分配律
              • ( a + b ) v = a v + b v (a+b)v=av+bv (a+b)v=av+bv
              • a ( v + w ) = a v + a w a(v+w)=av+aw a(v+w)=av+aw
              • 对所有 a , b ∈ F a,b\in F a,bF, v , w ∈ V v,w\in V v,wV成立
          • 元素在域 F F F中的列向量的加法和标量乘法的定义,这样的列向量空间 F n F^n Fn构成域 F F F上的向量空间
        • 闵可夫斯基距离(Minkowski distance)
          • 定义
            • 给定样本集合 X X X, X X X m m m维实数向量空间 R m R^m Rm中点的集合
              • x i , x j ∈ X x_i,x_j\in X xi,xjX
                • x i = ( x 1 , i , x 2 , i , ⋯   , x m , i ) T x_i=(x_{1,i},x_{2,i},\cdots,x_{m,i})^T xi=(x1,i,x2,i,,xm,i)T
                • x j = ( x 1 , j , x 2 , j , ⋯   , x m , j ) T x_j=(x_{1,j},x_{2,j},\cdots,x_{m,j})^T xj=(x1,j,x2,j,,xm,j)T
            • 样本 x i x_i xi与样本 x j x_j xj的闵可夫斯基距离为
            • d i , j = ( ∑ k = 1 m ∣ x k , i − x k , j ∣ p ) 1 p d_{i,j}=(\sum\limits_{k=1}^m|x_{k,i}-x_{k,j}|^p)^{\frac{1}{p}} di,j=(k=1mxk,ixk,jp)p1, p ≥ 1 p\geq 1 p1
        • 欧氏距离(Euclidean distance)
          • p = 2 p=2 p=2
            • d i , j = ( ∑ k = 1 m ∣ x k , i − x k , j ∣ 2 ) 1 2 d_{i,j}=(\sum\limits_{k=1}^m|x_{k,i}-x_{k,j}|^2)^{\frac{1}{2}} di,j=(k=1mxk,ixk,j2)21
        • 曼哈顿距离(Manhattan distance)
          • p = 1 p=1 p=1
            • d i , j = ∑ k = 1 m ∣ x k , i − x k , j ∣ d_{i,j}=\sum\limits_{k=1}^m|x_{k,i}-x_{k,j}| di,j=k=1mxk,ixk,j
        • 切比雪夫距离(Chebyshev distance)
          • p = ∞ p=\infty p=
            • d i , j = max ⁡ k ∣ x k , i − x k , j ∣ d_{i,j}=\max\limits_k|x_{k,i}-x_{k,j}| di,j=kmaxxk,ixk,j
            • 取各个坐标数值差的绝对值的最大值
        • 马哈拉诺比斯距离(Mahalanobis distance)
          • 马氏距离,考虑各个分量(特征)之间的相关性并与各个分量的尺度无关
          • 定义
            • 给定一个样本集合 X X X, X = [ x i , j ] m × n X=[x_{i,j}]_{m\times n} X=[xi,j]m×n, 其协方差矩阵记作 S S S
            • d i , j = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 d_{i,j}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^{\frac{1}{2}} di,j=[(xixj)TS1(xixj)]21
              • x i = ( x 1 , i , x 2 , i , ⋯   , x m , i ) T x_i=(x_{1,i},x_{2,i},\cdots,x_{m,i})^T xi=(x1,i,x2,i,,xm,i)T
              • x j = ( x 1 , j , x 2 , j , ⋯   , x m , j ) T x_j=(x_{1,j},x_{2,j},\cdots,x_{m,j})^T xj=(x1,j,x2,j,,xm,j)T
          • S S S为单位矩阵时,既样本数据的各个分量互相独立且各个分量的方差为1时,马氏距离就是欧式距离
        • 相关系数(correlation coefficient)
          • 相关系数的绝对值越接近于1,表示样本越相似;越接近于0,表示样本越不相似
          • 定义
            • r i , j = ∑ k = 1 m ( x k , i − x ‾ i ) ( x k , j − x ‾ j ) [ ∑ k = 1 m ( x k , i − x ‾ i ) 2 ∑ k = 1 m ( x k , j − x ‾ j ) 2 ] 1 2 r_{i,j}=\frac{\sum\limits_{k=1}^m(x_{k,i}-\overline{x}_i)(x_{k,j}-\overline{x}_j)}{[\sum\limits_{k=1}^m(x_{k,i}-\overline{x}_i)^2\sum\limits_{k=1}^m(x_{k,j}-\overline{x}_j)^2]^{\frac{1}{2}}} ri,j=[k=1m(xk,ixi)2k=1m(xk,jxj)2]21k=1m(xk,ixi)(xk,jxj)
              • x ‾ i = 1 m ∑ k = 1 m x k , i \overline{x}_i=\frac{1}{m}\sum\limits_{k=1}^mx_{k,i} xi=m1k=1mxk,i
              • x ‾ j = 1 m ∑ k = 1 m x k , j \overline{x}_j=\frac{1}{m}\sum\limits_{k=1}^mx_{k,j} xj=m1k=1mxk,j
        • 夹角余弦(cosine)
          • 夹角余弦越接近于1,表示样本越相似;越接近于0,表示样本越不相似
          • 定义
            • s i , j = ∑ k = 1 m x k , i x k , j [ ∑ k = 1 m x k , i 2 ∑ k = 1 m x k , j 2 ] 1 2 s_{i,j}=\frac{\sum\limits_{k=1}^mx_{k,i}x_{k,j}}{[\sum\limits_{k=1}^mx_{k,i}^2\sum\limits_{k=1}^mx_{k,j}^2]^\frac{1}{2}} si,j=[k=1mxk,i2k=1mxk,j2]21k=1mxk,ixk,j
    • 类或簇

      • 通过聚类得到的类或簇,本质是样本的子集
      • 硬聚类(hard clustering)
        • 一个聚类方法假定一个样本只能属于一个类,或类的交集为空集
      • 软聚类(soft clustering)
        • 一个聚类方法假定一个样本可以属于多个类,或类的交集不为空集
      • 定义
        • G G G表示类或簇
        • x i , x j x_i,x_j xi,xj表示类中的样本
        • n G n_G nG表示 G G G中样本的个数
        • d i , j d_{i,j} di,j表示样本 x i x_i xi与样本 x j x_j xj之间的距离
        • (a)设 T T T为给定的正数,若集合 G G G中任意两个样本 x i , x j x_i,x_j xi,xj, 有
          • d i , j ≤ T d_{i,j}\leq T di,jT
        • (b)设 T T T为给定的正数,若对集合 G G G的任意样本 x i x_i xi, 一定存在 G G G中的另一个样本 x j x_j xj, 使得
          • d i , j ≤ T d_{i,j}\leq T di,jT
        • (c)设 T T T为给定的正数,若对集合 G G G的任意一个样本 x i x_i xi, G G G中的另一个样本 x j x_j xj, 满足
          • 1 n G − 1 ∑ x j ∈ G d i , j ≤ T \frac{1}{n_G-1}\sum\limits_{x_j\in G}d_{i,j}\leq T nG11xjGdi,jT
        • (d)设 T T T V V V为给定的两个正数,如果集合 G G G中任意两个样本 x i , x j x_i,x_j xi,xj的距离 d i , j d_{i,j} di,j, 满足
          • 1 n G ( n G − 1 ) ∑ x i ∈ G ∑ x j ∈ G d i , j ≤ T \frac{1}{n_G(n_G-1)}\sum\limits_{x_i\in G}\sum\limits_{x_j\in G}d_{i,j}\leq T nG(nG1)1xiGxjGdi,jT
          • d i , j ≤ V d_{i,j}\leq V di,jV
      • 类的特征
        • (1)类的均值 x ‾ G \overline{x}_G xG, 又称为类的中心
          • x ‾ G = 1 n G ∑ i = 1 n G x i \overline{x}_G=\frac{1}{n_G}\sum\limits_{i=1}^{n_G}x_i xG=nG1i=1nGxi
        • (2)类的直径(diameter) D G D_G DG
          • 类的直径 D G D_G DG是类中任意两个样本之间的最大距离
          • D G = max ⁡ x i , x j ∈ G d i , j D_G=\max\limits_{x_i,x_j\in G}d_{i,j} DG=xi,xjGmaxdi,j
        • (3)类的样本散布矩阵(scatter matrix) A G A_G AG与样本协方差矩阵(covariance matrix) S G S_G SG
          • A G = ∑ i = 1 n G ( x i − x ‾ G ) ( x i − x ‾ G ) T A_G=\sum\limits_{i=1}^{n_G}(x_i-\overline{x}_G)(x_i-\overline{x}_G)^T AG=i=1nG(xixG)(xixG)T
          • S G = 1 m − 1 A G = 1 m − 1 ∑ i = 1 n G ( x i − x ‾ G ) ( x i − x ‾ G ) T S_G=\frac{1}{m-1}A_G=\frac{1}{m-1}\sum\limits_{i=1}^{n_G}(x_i-\overline{x}_G)(x_i-\overline{x}_G)^T SG=m11AG=m11i=1nG(xixG)(xixG)T
      • 类与类之间的距离
        • G p G_p Gp与类 G q G_q Gq之间的距离 D ( p , q ) D(p,q) D(p,q), 也称为连接(linkage)
        • 定义
          • G p G_p Gp包含 n p n_p np个样本
          • G q G_q Gq包含 n q n_q nq个样本
          • x ‾ p \overline{x}_p xp表示 G p G_p Gp的均值,即类的中心
          • x ‾ q \overline{x}_q xq表示 G q G_q Gq的均值,即类的中心
          • (a)最短距离或单连接(single linkage)
            • 定义类 G p G_p Gp的样本与 G q G_q Gq的样本之间的最短距离为两类之间的距离
            • D p q = min ⁡ { d i , j ∣ x i ∈ G p , x j ∈ G q } D_{pq}=\min\{d_{i,j}|x_i\in G_p,x_j\in G_q\} Dpq=min{di,jxiGp,xjGq}
          • (b)最长距离或完全连接(complete linkage)
            • 定义类 G p G_p Gp的样本与 G q G_q Gq的样本之间的最长距离为两类之间的距离
            • D p q = max ⁡ { d i , j ∣ x i ∈ G p , x j ∈ G q } D_{pq}=\max\{d_{i,j}|x_i\in G_p,x_j\in G_q\} Dpq=max{di,jxiGp,xjGq}
          • (c)中心距离
            • 定义类 G p G_p Gp与类 G q G_q Gq的中心 x ‾ p \overline{x}_p xp x ‾ q \overline{x}_q xq之间的距离为两类之间的距离
            • D p q = d x ‾ p , x ‾ q D_{pq}=d_{\overline{x}_p,\overline{x}_q} Dpq=dxp,xq
          • (d)平均距离
            • 定义类 G p G_p Gp与类 G q G_q Gq任意两个样本之间距离的平均值为两类之间的距离
            • D p q = 1 n p n q ∑ x i ∈ G p ∑ x j ∈ G q d i , j D_{pq}=\frac{1}{n_pn_q}\sum\limits_{x_i\in G_p}\sum\limits_{x_j\in G_q}d_{i,j} Dpq=npnq1xiGpxjGqdi,j
    • 层次聚类

      • 简介
        • 层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中
        • 层次聚类又有聚合(agglomerative)(自下而上bottom-up)聚类, 分列(divisive)(自上而下top-down)聚类两种方法
        • 层次聚类属于hard clustering
      • 策略
        • agglomerative clustering
          • 聚合聚类开始将每个样本各自分到一个类
          • 之后将相距最近的两类合并,建立一个新的类
          • 重复此操作直到满足停止条件,得到层次化的类别
        • divisive clustering
          • 分裂聚类开始将所有样本分到一个类
          • 之后将已有类中相距最远的样本分到两个新的类
          • 重复此操作直到满足停止条件,得到层次化的类别
      • 聚合聚类算法 (agglomerative clustering algorithm)
        • (1)计算 n n n个样本两两之间的欧式距离 { d i , j } \{d_{i,j}\} {di,j}, 记作矩阵 D = [ d i , j ] n × n D=[d_{i,j}]_{n\times n} D=[di,j]n×n
        • (2)构造 n n n个类,每个类只包含一个样本
        • (3)合并类间距离最小的两个类,其中最短距离为类间距离,构建一个新类
        • (4)计算新类与当前各类的距离,若类的个数为1,终止计算,否则回到(3)步
        • 聚合层次聚类算法的复杂度是 O ( n 3 m ) O(n^3m) O(n3m)
          • n n n是样本的个数
          • m m m是样本的维数
      • Examples
        • 给定5个样本的集合,样本之间的欧式距离由如下矩阵 D D D表示
          • D = [ d i , j ] 5 × 5 = [ 0 7 2 9 3 7 0 5 4 6 2 5 0 8 1 9 4 8 0 5 3 6 1 5 0 ] D=[d_{i,j}]_{5\times 5}=\left[\begin{matrix}0&7&2&9&3\\7&0&5&4&6\\2&5&0&8&1\\9&4&8&0&5\\3&6&1&5&0\end{matrix}\right] D=[di,j]5×5=0729370546250819480536150
          • d i , j d_{i,j} di,j表示第 i i i个样本与第 j j j个样本之间的欧式距离
        • (1)用5个样本构建5个类
          • G i = { x i } G_i=\{x_i\} Gi={xi}, i = 1 , 2 , 3 , 4 , 5 i=1,2,3,4,5 i=1,2,3,4,5
          • 样本之间的距离变为类之间的距离,5个类之间的距离矩阵亦为 D D D
        • (2)由矩阵 D D D可以看出, D 3 , 5 = D 5 , 3 = 1 D_{3,5}=D_{5,3}=1 D3,5=D5,3=1为最小
          • 0 7 7 2 0 2 9 5 5 9 3 4 0 4 3 6 8 8 6 1 0 1 5 5 0 \begin{matrix}&&&&0&&&&\\&&&7&&7&&&\\&&2&&0&&2&&\\&9&&5&&5&&9&\\3&&4&&0&&4&&3\\&6&&8&&8&&6&\\&&1&&0&&1&&\\&&&5&&5&&&\\&&&&0&&&&\\\end{matrix} 3962417585000007585241963
          • G 3 G_3 G3 G 5 G_5 G5合并为一个新类
            • G 6 = { x 3 , x 5 } G_6=\{x_3,x_5\} G6={x3,x5}
        • (3)计算 G 6 ​ G_6​ G6 G 1 , G 2 , G 4 ​ G_1,G_2,G_4​ G1,G2,G4之间的最短距离
          • D 6 , 1 = 2 D_{6,1}=2 D6,1=2
          • D 6 , 2 = 5 D_{6,2}=5 D6,2=5
          • D 6 , 4 = 5 D_{6,4}=5 D6,4=5
          • 其余两类之间的距离是
            • D 1 , 2 = 7 D_{1,2}=7 D1,2=7
            • D 1 , 4 = 9 D_{1,4}=9 D1,4=9
            • D 2 , 4 = 4 D_{2,4}=4 D2,4=4
          • D 6 , 1 = 2 D_{6,1}=2 D6,1=2最小,所以将 G 1 G_1 G1 G 6 G_6 G6合并成一个新类
            • G 7 = { x 1 , x 3 , x 5 } G_7=\{x_1,x_3,x_5\} G7={x1,x3,x5}
        • (4)计算 G 7 G_7 G7 G 2 , G 4 G_2,G_4 G2,G4之间的距离
          • D 7 , 2 = 5 D_{7,2}=5 D7,2=5
          • D 7 , 4 = 5 D_{7,4}=5 D7,4=5
          • D 2 , 4 = 4 D_{2,4}=4 D2,4=4
          • 其中 D 2 , 4 = 4 D_{2,4}=4 D2,4=4最小,所以将 G 2 G_2 G2 G 4 G_4 G4合并成一新类
            • G 8 = { x 2 , x 4 } G_8=\{x_2,x_4\} G8={x2,x4}
        • (5)将 G 7 G_7 G7 G 8 G_8 G8合并成一个新类
          • G 9 = { x 1 , x 2 , x 3 , x 4 , x 5 } G_9=\{x_1,x_2,x_3,x_4,x_5\} G9={x1,x2,x3,x4,x5}
        • 全部样本聚成1类,聚类终止
    • k k k均值聚类

      • k k k均值聚类是基于样本集合划分的聚类算法

        • 将样本集合划分为 k k k个子集,构成 k k k个类
        • n n n个样本分到 k k k个类中,每个样本到其所属类的中心距离最小
      • 模型

        • n n n个样本的集合
          • X = { x 1 , x 2 , ⋯   , x n } X=\{x_1,x_2,\cdots,x_n\} X={x1,x2,,xn}
          • 每个样本由一个特征向量表示,特征向量的维数是 m m m
        • k k k个类 G 1 , G 2 , ⋯   , G k G_1,G_2,\cdots,G_k G1,G2,,Gk形成对样本集合 X X X的划分
          • G i ∩ G j = ∅ G_i\cap G_j=\varnothing GiGj=
          • ⋃ i = 1 k G i = X \bigcup\limits_{i=1}^kG_i=X i=1kGi=X
        • C C C表示划分,一个划分对应着一个聚类结果
          • 划分 C C C是一个多对一的函数
          • 如果把每个样本用一个整数表示
            • i ∈ { 1 , 2 , ⋯   , n } i\in\{1,2,\cdots,n\} i{1,2,,n}
          • 每个类也用一个整数表示
            • l ∈ { 1 , 2 , ⋯   , k } l\in \{1,2,\cdots,k\} l{1,2,,k}
          • 划分或者聚类可以用函数
            • l = C ( i ) l=C(i) l=C(i)
        • k k k均值聚类的模型是一个从样本到类的函数
      • 策略

        • k k k均值聚类归结为样本集合 X X X的划分,或者从样本到类的函数的选择问题
        • k k k均值聚类的策略是通过损失函数的最小化选取最优的划分或函数 C ∗ C^* C
        • (1)采用欧氏距离平方(squared Euclidean distance)作为样本之间的距离 d ( x i , x j ) d(x_i,x_j) d(xi,xj)
          • d ( x i , x j ) = ∑ k = 1 m ( x k , i − x k , j ) 2 d(x_i,x_j)=\sum\limits_{k=1}^m(x_{k,i}-x_{k,j})^2 d(xi,xj)=k=1m(xk,ixk,j)2
            • = ∣ ∣ x i − x j ∣ ∣ 2 =||x_i-x_j||^2 =xixj2
        • (2)定义样本与其所属类的中心之间的距离的总和为损失函数
          • W ( C ) = ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ‾ l ∣ ∣ 2 W(C)=\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-\overline{x}_l||^2 W(C)=l=1kC(i)=lxixl2
          • x ‾ l = ( x ‾ 1 , l , x ‾ 2 , l , ⋯   , x ‾ m , l ) \overline{x}_l=(\overline{x}_{1,l},\overline{x}_{2,l},\cdots,\overline{x}_{m,l}) xl=(x1,l,x2,l,,xm,l)是第 l l l个类的均值或中心
          • n l = ∑ i = 1 n I ( C ( i ) = l ) nl=\sum\limits_{i=1}^nI(C(i)=l) nl=i=1nI(C(i)=l)
            • I ( C ( i ) = l ) I(C(i)=l) I(C(i)=l)是指示函数,取值为1或0
          • 函数 W ( C ) W(C) W(C)也称为能量
            • 表示相同类中的样本相似度
        • k k k均值问题就是求解最优化问题
          • C ∗ = a r g min ⁡ C W ( C ) C^*=arg\min\limits_CW(C) C=argCminW(C)
            • = a r g min ⁡ C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ‾ l ∣ ∣ 2 =arg\min\limits_C\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-\overline{x}_l||^2 =argCminl=1kC(i)=lxixl2
          • 相似的样本被聚到同类时,损失函数值最小,这个目标函数的最优化能达到聚类的目的
        • n n n个样本分到 k k k类,所有可能分法的数目是
          • S ( n , k ) = 1 k ! ∑ l = 1 k ( − 1 ) k − l ( k l ) k n S(n,k)=\frac{1}{k!}\sum\limits_{l=1}^k(-1)^{k-l}{k\choose{l}}k^n S(n,k)=k!1l=1k(1)kl(lk)kn, 指数级别
          • k k k均值聚类的最优解求解问题是NP困难问题
          • 二项系数
            • 符号 ( n k ) {n\choose{k}} (kn)表示 n n n集合中 k k k组合的数目,读作" n n n k k k"
              • ( n k ) = n ! k ! ( n − k ) ! {n\choose{k}}=\frac{n!}{k!(n-k)!} (kn)=k!(nk)!n!
            • 此公式对 k k k n − k n-k nk是对称的
              • ( n k ) = ( n n − k ) {n\choose{k}}={n\choose{n-k}} (kn)=(nkn)
            • 这些数出现在二项展开式中,所以称其为二项式系数
              • ( x + y ) n = ∑ k = 0 n ( n k ) x k y n − k (x+y)^n=\sum\limits_{k=0}^n{n\choose{k}}x^ky^{n-k} (x+y)n=k=0n(kn)xkynk
            • 二项展开式的一个特例
              • x = y = 1 x=y=1 x=y=1
                • 2 n = ∑ k = 0 n ( n k ) 2^n=\sum\limits_{k=0}^n{n\choose{k}} 2n=k=0n(kn)
                • 此公式对应于利用二进制 n n n串中所含1的个数来计数 2 n 2^n 2n个这类串的过程
                  • 因为从 n n n个位置中选择 k k k个放置1的方法数是 ( n k ) {n\choose{k}} (kn)
                  • 所以有 ( n k ) {n\choose{k}} (kn)个二进制 n n n串恰好含 k k k个1
      • 算法

        • k k k均值聚类的算法是一个迭代过程,每次迭代包括两个步骤
          • (1)选择 k k k个类的中心,将样本逐个指派到与其最近的中心的类中,得到一个聚类结果
            • 对给定的中心值 ( m 1 , m 2 , ⋯   , m k ) (m_1,m_2,\cdots,m_k) (m1,m2,,mk), 求一个划分 C C C, 使得目标函数极小化
              • 在类中心确定的情况下,将每个样本分到一个类中,使样本和其所属类的中心之间的距离总和最小
              • 求解结果,将每个样本指派到与其最近的中心 m l m_l ml的类 G l G_l Gl
              • min ⁡ C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − m l ∣ ∣ 2 \min\limits_C\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-m_l||^2 Cminl=1kC(i)=lximl2
          • (2)更新每个类的样本均值,作为类的新中心
            • 对给定的划分 C C C, 再求各个类的中心 ( m 1 , m 2 , ⋯   , m k ) (m_1,m_2,\cdots,m_k) (m1,m2,,mk),使得目标函数极小化
              • min ⁡ m 1 , ⋯   , m k ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − m l ∣ ∣ 2 \min\limits_{m_1,\cdots,m_k}\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-m_l||^2 m1,,mkminl=1kC(i)=lximl2
              • 在划分确定的情况下,使样本和其所属类的中心之间的距离总和最小,求解结果,对于每个包含 n l n_l nl个样本的类 G l G_l Gl,更新其均值 m l m_l ml
                • m l = 1 n l ∑ C ( i ) = l x i m_l=\frac{1}{n_l}\sum\limits_{C(i)=l}x_i ml=nl1C(i)=lxi, l = 1 , 2 , ⋯   , k l=1,2,\cdots,k l=1,2,,k
          • 重复(1)(2)直至收敛为止
            • 直到划分不再改变,得到聚类结果
        • k k k均值聚类算法 (k-means clustering algorithm)
          • (a)初始化
            • t = 0 t=0 t=0, 随机选择 k k k个样本点作为初始聚类中心
            • m ( 0 ) = ( m 1 ( 0 ) , ⋯   , m l ( 0 ) , ⋯   , m k ( 0 ) ) m^{(0)}=(m_1^{(0)},\cdots,m_l^{(0)},\cdots,m_k^{(0)}) m(0)=(m1(0),,ml(0),,mk(0))
          • (b)对样本进行聚类
            • 对固定的类中心
              • m ( t ) = ( m 1 ( t ) , ⋯   , m l ( t ) , ⋯   , m k ( t ) ) m^{(t)}=(m_1^{(t)},\cdots,m_l^{(t)},\cdots,m_k^{(t)}) m(t)=(m1(t),,ml(t),,mk(t))
              • m l ( t ) m_l^{(t)} ml(t)为类 G l G_l Gl的中心
            • 计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果 C ( t ) C^{(t)} C(t)
          • (c)计算新的类中心
            • 对聚类结果 C ( t ) C^{(t)} C(t),计算当前各个类中的样本的均值,作为新的类中心
              • m ( t + 1 ) = ( m 1 ( t + 1 ) , ⋯   , m l ( t + 1 ) , ⋯   , m k ( t + 1 ) ) m^{(t+1)}=(m_1^{(t+1)},\cdots,m_l^{(t+1)},\cdots,m_k^{(t+1)}) m(t+1)=(m1(t+1),,ml(t+1),,mk(t+1))
          • (d)如果迭代收敛或符合停止条件
            • 输出 C ∗ = C ( t ) C^*=C^{(t)} C=C(t)
            • 否则
              • t = t + 1 t=t+1 t=t+1, 返回第(b)步
      • Example

        • 给定含有5个样本的集合

          • X = [ 0 0 1 5 5 2 0 0 0 2 ] X=\left[\begin{matrix}0&0&1&5&5\\2&0&0&0&2\end{matrix}\right] X=[0200105052]

          • 将样本聚到2个类中

          • # import
            import warnings
            warnings.filterwarnings('ignore')
            import numpy as np
            X1=np.array((0,2)).T
            X2=np.array((0,0)).T
            X3=np.array((1,0)).T
            X4=np.array((5,0)).T
            X5=np.array((5,2)).T
            
        • (a)选择两个样本点作为类的中心

          • m 1 ( 0 ) = x 1 = ( 0 , 2 ) T m_1^{(0)}=x_1=(0,2)^T m1(0)=x1=(0,2)T
          • m 2 ( 0 ) = x 2 = ( 0 , 0 ) T m_2^{(0)}=x_2=(0,0)^T m2(0)=x2=(0,0)T
        • (b)以 m 1 ( 0 ) , m 2 ( 0 ) m_1^{(0)},m_2^{(0)} m1(0),m2(0)为类 G 1 ( 0 ) , G 2 ( 0 ) G_1^{(0)},G_2^{(0)} G1(0),G2(0)的中心

          • 计算

            • x 3 = ( 1 , 0 ) T x_3=(1,0)^T x3=(1,0)T
            • x 4 = ( 5 , 0 ) T x_4=(5,0)^T x4=(5,0)T
            • x 5 = ( 5 , 2 ) T x_5=(5,2)^T x5=(5,2)T
            • m 1 ( 0 ) = x 1 = ( 0 , 2 ) T m_1^{(0)}=x_1=(0,2)^T m1(0)=x1=(0,2)T
            • m 2 ( 0 ) = x 2 = ( 0 , 0 ) T m_2^{(0)}=x_2=(0,0)^T m2(0)=x2=(0,0)T
            • 的欧氏距离平方
          • def euclidean_distance2(x1,x2):
                res=[]
                for i in range(len(x1)):
                    res.append((x1[i]-x2[i])**2)
                return sum(res)
            
          • x 3 = ( 1 , 0 ) T ​ x_3=(1,0)^T​ x3=(1,0)T

            • d ( x 3 , m 1 ( 0 ) ) = 5 d(x_3,m_1^{(0)})=5 d(x3,m1(0))=5

            • d ( x 3 , m 2 ( 0 ) ) = 1 d(x_3,m_2^{(0)})=1 d(x3,m2(0))=1

            • x 3 x_3 x3分到类 G 2 ( 0 ) G_2^{(0)} G2(0)

            • display(euclidean_distance2(X3,X1))
              display(euclidean_distance2(X3,X2))
              
          • x 4 = ( 5 , 0 ) T x_4=(5,0)^T x4=(5,0)T

            • d ( x 4 , m 1 ( 0 ) ) = 29 d(x_4,m_1^{(0)})=29 d(x4,m1(0))=29

            • d ( x 4 , m 2 ( 0 ) ) = 25 d(x_4,m_2^{(0)})=25 d(x4,m2(0))=25

            • x 4 x_4 x4分到类 G 2 ( 0 ) G_2^{(0)} G2(0)

            • display(euclidean_distance2(X4,X1))
              display(euclidean_distance2(X4,X2))
              
          • x 5 = ( 5 , 2 ) T x_5=(5,2)^T x5=(5,2)T

            • d ( x 5 , m 1 ( 0 ) ) = 25 d(x_5,m_1^{(0)})=25 d(x5,m1(0))=25

            • d ( x 5 , m 2 ( 0 ) ) = 29 d(x_5,m_2^{(0)})=29 d(x5,m2(0))=29

            • x 5 x_5 x5分到类 G 1 ( 0 ) G_1^{(0)} G1(0)

            • display(euclidean_distance2(X5,X1))
              display(euclidean_distance2(X5,X2))
              
        • (c)得到新类

          • G 1 ( 1 ) = { x 1 , x 5 } G_1^{(1)}=\{x_1,x_5\} G1(1)={x1,x5}

          • G 2 ( 1 ) = { x 2 , x 3 , x 4 } G_2^{(1)}=\{x_2,x_3,x_4\} G2(1)={x2,x3,x4}

          • 计算类的中心

            • def class_mean(*args):
                  if len(args)<1:
                      return None
                  temp=[]
                  for i in range(len(args)):
                      temp.append(args[i])
                  mean=[]
                  count=0
                  for j in range(len(temp[0])):
                      for v in temp:
                          count+=v[j]
                      mean.append(count)
                      count=0
                  res=[]
                  for k in range(len(mean)):
                      res.append(mean[k]/len(args))      
                  return res  
              
            • m 1 ( 1 ) = ( 2.5 , 2.0 ) T m_1^{(1)}=(2.5,2.0)^T m1(1)=(2.5,2.0)T

              • tuple(class_mean(X1,X5))
                
            • m 2 ( 1 ) = ( 2 , 0 ) T m_2^{(1)}=(2,0)^T m2(1)=(2,0)T

              • tuple(class_mean(X2,X3,X4))
                
        • (d)重复步骤(b)和(c)

          • x 1 x_1 x1分到类 G 1 ( 1 ) G_1^{(1)} G1(1)
          • x 2 x_2 x2分到类 G 2 ( 1 ) G_2^{(1)} G2(1)
          • x 3 x_3 x3分到类 G 2 ( 1 ) G_2^{(1)} G2(1)
          • x 4 x_4 x4分到类 G 2 ( 1 ) G_2^{(1)} G2(1)
          • x 5 x_5 x5分到类 G 1 ( 1 ) G_1^{(1)} G1(1)
          • 得到新类
            • G 1 ( 2 ) = { x 1 , x 5 } G_1^{(2)}=\{x_1,x_5\} G1(2)={x1,x5}
            • G 2 ( 2 ) = { x 2 , x 3 , x 4 } G_2^{(2)}=\{x_2,x_3,x_4\} G2(2)={x2,x3,x4}
          • 由于得到新类没有改变,聚类停止
            • 得到结果
              • C 1 ∗ = { x 1 , x 5 } C_1^*=\{x_1,x_5\} C1={x1,x5}
              • C 2 ∗ = { x 2 , x 3 , x 4 } C_2^*=\{x_2,x_3,x_4\} C2={x2,x3,x4}
      • 总结

        • 选择不同的初始中心,会得到不同的聚类结果
        • 对于初始中心的选择,可以用层次聚类对样本进行聚类,得到 k k k个类时停止,然后从每个类中选取一个与中心距离最近的点
        • k k k值得选择,聚类结果的质量可以用类的平均直径来衡量
          • 类别变小时,平均直径会增加
          • 类别数变大超过某个值以后,平均直径会不表
          • 这个值是最优的 k k k

查看书籍

  • 统计学习方法
  • 算法导论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值