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=1∑kx∈Ci∑k∣∣x−ui∣∣22
-
-
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=1∑kx∈Ci∑kfijm∣∣x−ui∣∣22
-
相关定义:
-
指示矩阵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类样本的数量) C∗CFTF=⎣⎢⎢⎡n10...00n2...0............00...nc⎦⎥⎥⎤(ni为第i类样本的数量)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=[j∑xj1,j∑xj2,...,j∑xjC](xjc代表第c类的第j个样本;XF的列向量X_j代表第j类样本向量之和)
-
均值矩阵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(ui为第i类样本均值)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](uci代表第i个样本对应类别的均值)
目标优化推导:
-
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=1∑kx∈Ci∑k∣∣x−ci∣∣22=i=0∑kj=0∑N∣∣xi−uj∣∣fij
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=0∑kj=0∑N∣∣xi−uj∣∣fijs.t. j=1∑Cfij=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=∣∣X−MFT∣∣F2=tr[(X−MFT)(X−MFT)T]=tr(XXT−XFMT−MFTXT+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 ∂M∂J=−XF−XF+2MFTF=2MFTF−2XF∂ 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} ∂M∂J=0=>2MFTF−2XF=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] X−MFT=[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=1∑kx∈Ci∑kf′ijm∣∣x−ui∣∣22 (m≥2)- 权值
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
i
j
′
f'_{ij}
fij′与标签
f
i
j
f_{ij}
fij相比的区别:
-
同样使用交替优化方法分别求解 F ′ 与 M F'与M F′与M,得:
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[∣∣xi−uk∣∣∣∣xi−ui∣∣]m−121u 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=1Nfij′∑i=1Nf′ijmxi
-
算法流程
-
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=Ckargminn1x∈Ck∑∣∣x−uk∣∣ -
定义轮廓系数
S = b − a m a x ( a , b ) S=\frac{b-a}{max(a,b)} S=max(a,b)b−a -
求出所有样本的轮廓系数后再求平均值,得到对数据集X的平均轮廓系数
-
簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好
-
即令平均轮廓系数最大的k值即为最优k值
-
参考资料
【1】《机器学习》周志华
【2】《统计学习方法》李航
【3】[K-means中K值的选取][https://blog.csdn.net/sxllllwd/article/details/82151996]