机器学习基础---聚类方法---k-Means&模糊C均值聚类(fuzzy C-Means)

K-Means方法 & fuzzy C-Means方法

算法描述

核心思想:
  • k-means方法

    • 无监督聚类算法,输入数据为样本矩阵 D = [ x 1 , x 2 , . . . x n ] D=[x_1,x_2,...x_n] D=[x1,x2,...xn],目标是获得簇划分 C = { C 1 , C 2 , . . . , C k } C=\{C_1,C_2,...,C_k\} C={C1,C2,...,Ck},每个簇对应簇心 u = { u 1 , u 2 , . . . , u k } u=\{u_1,u_2,...,u_k\} u={u1,u2,...,uk}

    • 同时做出假设,样本 x i x_i xi所属类别为距离其最近的簇心对应类别

    • 聚类的优劣可以通过划分的k个簇的集中程度来表示

    • K-Means算法的核心目的为最小化各样本到其对应簇簇心距离之和,即最小化:
      J = ∑ i = 1 k ∑ x ∈ C i k ∣ ∣ x − u i ∣ ∣ 2 2 J=\sum_{i=1}^k\sum_{x\in{C_i}}^k ||x_-u_i||_2^2 J=i=1kxCikxui22

  • fuzzy C-Means方法

    • 对于k-means方法,每个样本对应唯一的类别

    • 当样本无法划分出明显分离的簇时,指派一个样本到一个特定的簇可能出错,因此对每个样本和每个簇赋予一个权值表明该样本属于该簇的程度

    • 与k-means方法相比,优化目标中增加了参数 f i j f_{ij} fij用来表示样本 x i x_i xi属于j类的程度
      J = ∑ i = 1 k ∑ x ∈ C i k f i j m ∣ ∣ x − u i ∣ ∣ 2 2 J=\sum_{i=1}^k\sum_{x\in{C_i}}^k f_{ij}^m||x-u_i||_2^2 J=i=1kxCikfijmxui22

相关定义:
  • 指示矩阵F:矩阵大小为N*C(样本数*类别数);该矩阵每个行向量 F i F_i Fi与样本 x i x_i xi对应,当 x i x_i xi为第c类样本, F i c = 1 F_{ic}=1 Fic=1 F i F_i Fi其他元素为0

    相关计算:
    F T F C ∗ C = [ n 1 0 . . . 0 0 n 2 . . . 0 . . . . . . . . . . . . 0 0 . . . n c ] ( n i 为 第 i 类 样 本 的 数 量 ) \underset{C*C}{F^TF}=\left[ \begin{matrix} n_1 & 0 & ... & 0\\ 0 & n_2 & ...& 0\\ ... & ... & ... & ...\\ 0 & 0 & ... & n_c \end{matrix} \right]\\ (n_i为第 i类样本的数量) CCFTF=n10...00n2...0............00...nc(nii)

    X F = [ ∑ j x j 1 , ∑ j x j 2 , . . . , ∑ j x j C ] ( x j c 代 表 第 c 类 的 第 j 个 样 本 ; X F 的 列 向 量 X _ j 代 表 第 j 类 样 本 向 量 之 和 ) XF=[\sum_jx_j^1, \sum_jx_j^2,...,\sum_jx_j^C]\\ (x_j^c代表第c类的第j个样本;XF的列向量X_{\_j}代表第j类样本向量之和) XF=[jxj1,jxj2,...,jxjC](xjccjXFX_jj)

  • 均值矩阵M:用于表示各簇样本向量均值(簇中心)
    M = [ u 1 , u 2 , . . . u c ] = X F ( F T F ) − 1 ( u i 为 第 i 类 样 本 均 值 ) M=[u_1, u_2,...u_c]=XF(F^TF)^{-1}\\ (u_i为第i类样本均值) M=[u1,u2,...uc]=XF(FTF)1(uii)

    M F T = [ u c 1 , u c 2 , . . . , u c n ] ( u c i 代 表 第 i 个 样 本 对 应 类 别 的 均 值 ) MF^T=[u_{c1},u_{c2},...,u_{cn}]\\ (u_{ci}代表第i个样本对应类别的均值) MFT=[uc1,uc2,...,ucn](ucii)

目标优化推导:

  • K-Means方法

    • 目标函数:
      J = ∑ i = 1 k ∑ x ∈ C i k ∣ ∣ x − c i ∣ ∣ 2 2 = ∑ i = 0 k ∑ j = 0 N ∣ ∣ x i − u j ∣ ∣ f i j J=\sum_{i=1}^k\sum_{x\in{C_i}}^k ||x-c_i||_2^2=\sum_{i=0}^k\sum_{j=0}^N||x_i-u_j||f_{ij} J=i=1kxCikxci22=i=0kj=0Nxiujfij
      f i j f_{ij} fij为指示矩阵i行j列内容,表示样本 x i x_i xi是否为第j类,若是,则为1,否则为0

    • 优化内容:
      a r g   m i n F , M ∑ i = 0 k ∑ j = 0 N ∣ ∣ x i − u j ∣ ∣ f i j s . t .    ∑ j = 1 C f i j = 1    ( f i j ∈ { 0 , 1 } ) \underset{F,M}{arg\ min}\sum_{i=0}^k\sum_{j=0}^N||x_i-u_j||f_{ij}\\ s.t.\ \ \sum_{j=1}^Cf_{ij}=1\ \ (f_{ij}\in\{0,1\}) F,Marg mini=0kj=0Nxiujfijs.t.  j=1Cfij=1  (fij{0,1})

    • 矩阵形式推导:

      代数形式的目标函数可以被转化为如下矩阵形式目标:
      J = ∣ ∣ X − M F T ∣ ∣ F 2 = t r [ ( X − M F T ) ( X − M F T ) T ] = t r ( X X T − X F M T − M F T X T + M F T F M ) \begin{aligned} J &=||X-MF^T||_F^2\\ &=tr[(X-MF^T)(X-MF^T)^T]\\ &=tr(XX^T-XFM^T-MF^TX^T+MF^TFM) \end{aligned} J=XMFTF2=tr[(XMFT)(XMFT)T]=tr(XXTXFMTMFTXT+MFTFM)
      因此该优化问题为针对两矩阵变量(F,M)的最小化问题,采用交替优化方法进行优化,即先确定一个参数,再确定另一个

      • 求解M

        • 矩阵M是簇中心矩阵,其中数取值为实数域,可以通过求偏导,令为零的方法求解:
          ∂ J ∂ M = − X F − X F + 2 M F T F = 2 M F T F − 2 X F \frac{\partial{J}}{\partial{M}}=-XF-XF+2MF^TF=2MF^TF-2XF MJ=XFXF+2MFTF=2MFTF2XF

          ∂ J ∂ M = 0 = > 2 M F T F − 2 X F = 0 = > M F T F = X F = > M = X F ( F T F ) − 1 \begin{aligned} &\frac{\partial{J}}{\partial{M}}=0\\ &=>2MF^TF-2XF=0\\ &=>MF^TF=XF\\ &=>M=XF(F^TF)^{-1}\\ \end{aligned} MJ=0=>2MFTF2XF=0=>MFTF=XF=>M=XF(FTF)1

          即,在已知指示矩阵F(分类情况)下,使损失最小化的簇心即为各类样本向量均值 [ u 1 , u 2 , . . . , u k ] [u_1,u_2,...,u_k] [u1,u2,...,uk]

      • 求解F

        • 对于k-Means方法,指示矩阵F存在约束,元素 f i j ∈ { 0 , 1 } f_{ij}\in\{0,1\} fij{0,1}

        • 因为F元素不连续,不能直接求导,因此将目标重新表示:
          X − M F T = [ x 1 , x 2 , . . . , x n ] − [ u 1 , u 2 , . . . , u k ] [ f 11 f 21 . . . f n 1 f 12 f 22 . . . f n 2 . . . . . . . . . . . . f 1 k f 2 k . . . f n k ] X-MF^T=[x_1,x_2,...,x_n]-[u_1,u_2,...,u_k] \left[ \begin {matrix} f_{11} & f_{21} & ... & f_{n1}\\ f_{12} & f_{22} & ... & f_{n2}\\ ... & ... & ... & ...\\ f_{1k} & f_{2k} & ... & f_{nk}\\ \end{matrix} \right] XMFT=[x1,x2,...,xn][u1,u2,...,uk]f11f12...f1kf21f22...f2k............fn1fn2...fnk
          矩阵 F T F^T FT第j列的列向量 f j f_j fj代表样本 x j x_j xj的分类情况,对每个样本都有k种情况(一个样本可能是k类中的一类)

          因此可以对每一个样本向量 x j x_j xj枚举其类别,然后计算在该样本处产生的误差,选择误差最小的作为其预测类别

          因此对n个样本,需要进行n*k次枚举

          该方法等价于"将每个样本分到离其最近簇心对应的类"

      • 采用的交替优化方法即为先选取当前簇心矩阵下的最优指示矩阵,再选取当前指示矩阵下最优簇心矩阵,不断迭代

      • 由于迭代过程的每一步都能对目标函数进行优化,即目标函数值 J J J每次都在下降,又 J J J作为F范数平方大于0,有下界,因此必收敛

  • fuzzy C-Means方法

    • 将K-means方法中的标签矩阵F替换为权值F’,其元素 f i j ′ f'_{ij} fij代表第i个样本属于第j类的程度

    • 优化目标
      J = ∑ i = 1 k ∑ x ∈ C i k f ′ i j m ∣ ∣ x − u i ∣ ∣ 2 2         ( m ≥ 2 ) J=\sum_{i=1}^k\sum_{x\in{C_i}}^k {f'}_{ij}^m||x-u_i||_2^2 \ \ \ \ \ \ \ (m\geq2) J=i=1kxCikfijmxui22       (m2)

      • 权值 f i j ′ f'_{ij} fij与标签 f i j f_{ij} fij相比的区别:
        • f i j ′ ∈ [ 0 , 1 ] f'_{ij}\in{[0,1]} fij[0,1] f i j ∈ { 0 , 1 } f_{ij}\in{\{0,1\}} fij{0,1}
        • 在优化目标中,权值需要进行m次方运算,若 m = 1 m=1 m=1,则最终问题与k-means等价,F’会收敛于F(最小损失一定出现在分类唯一时)
    • 同样使用交替优化方法分别求解 F ′ 与 M F'与M FM,得:
      f i j ′ = 1 ∑ i = 1 k [ ∣ ∣ x i − u i ∣ ∣ ∣ ∣ x i − u k ∣ ∣ ] 2 m − 1 f'_{ij}=\frac1{\sum_{i=1}^k[\frac{||x_i-u_i||}{||x_i-u_k||}]^{\frac2{m-1}}} fij=i=1k[xiukxiui]m121

      u j = ∑ i = 1 N f ′ i j m x i ∑ i = 1 N f i j ′ u_j=\frac{\sum_{i=1}^N{f'}_{ij}^mx_i}{\sum_{i=1}^Nf'_{ij}} uj=i=1Nfiji=1Nfijmxi

算法流程

  • K-Means 与 fuzzy C-Means聚类流程

    • 1)指定类别数k
    • 2)初始化簇心矩阵与指示/权值矩阵
    • 3)迭代:
      • 根据目前簇心矩阵更新指示/权值矩阵
      • 根据目前指示/权值矩更新阵簇心矩阵
      • 当相邻两次簇心更新量小于阈值时迭代停止
    • 4)得到指示/权值矩阵
  • 超参数K选择:

    • 肘部法

      以误差平方和SSE为指标,计算给定k值下所有样本的聚类误差和,用于代表聚类效果好坏

      当k小于真实类别时,随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,误差平方和会变小,且下降幅度会很大;

      当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓

在这里插入图片描述

  • 轮廓系数法

    • 对样本点 x i x_i xi

      • 定义凝聚度a,是样本点与同类其他样本平均距离
      • 定义分离度b,是样本点与最近簇中所有样本的平均距离
    • 最近簇:
      C j = a r g m i n C k 1 n ∑ x ∈ C k ∣ ∣ x − u k ∣ ∣ C_j=\underset{C_k}{arg min}\frac1n \sum_{x\in{C_k}}||x-u_k|| Cj=Ckargminn1xCkxuk

    • 定义轮廓系数
      S = b − a m a x ( a , b ) S=\frac{b-a}{max(a,b)} S=max(a,b)ba

    • 求出所有样本的轮廓系数后再求平均值,得到对数据集X的平均轮廓系数

    • 簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好

    • 即令平均轮廓系数最大的k值即为最优k值

参考资料

【1】《机器学习》周志华

【2】《统计学习方法》李航

【3】[K-means中K值的选取][https://blog.csdn.net/sxllllwd/article/details/82151996]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值