机器学习基础---聚类方法---k-Means&模糊C均值聚类(fuzzy C-Means)
K-Means方法 & fuzzy C-Means方法算法描述核心思想:k-means方法无监督聚类算法,输入数据为样本矩阵D=[x1,x2,...xn]D=[x_1,x_2,...x_n]D=[x1,x2,...xn],目标是获得簇划分C={C1,C2,...,Ck}C=\{C_1,C_2,...,C_k\}C={C1,C2,...,Ck},每个簇对应簇心u={u1,u2,.
K-Means方法 & fuzzy C-Means方法
算法描述
核心思想:
-
k-means方法
-
无监督聚类算法,输入数据为样本矩阵D=[x1,x2,...xn]D=[x_1,x_2,...x_n]D=[x1,x2,...xn],目标是获得簇划分C={C1,C2,...,Ck}C=\{C_1,C_2,...,C_k\}C={C1,C2,...,Ck},每个簇对应簇心u={u1,u2,...,uk}u=\{u_1,u_2,...,u_k\}u={u1,u2,...,uk}
-
同时做出假设,样本xix_ixi所属类别为距离其最近的簇心对应类别
-
聚类的优劣可以通过划分的k个簇的集中程度来表示
-
K-Means算法的核心目的为最小化各样本到其对应簇簇心距离之和,即最小化:
J=∑i=1k∑x∈Cik∣∣x−ui∣∣22 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方法相比,优化目标中增加了参数fijf_{ij}fij用来表示样本xix_ixi属于j类的程度
J=∑i=1k∑x∈Cikfijm∣∣x−ui∣∣22 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(样本数*类别数);该矩阵每个行向量FiF_iFi与样本xix_ixi对应,当xix_ixi为第c类样本,Fic=1F_{ic}=1Fic=1且FiF_iFi其他元素为0
相关计算:
FTFC∗C=[n10...00n2...0............00...nc](ni为第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类样本的数量)XF=[∑jxj1,∑jxj2,...,∑jxjC](xjc代表第c类的第j个样本;XF的列向量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=[u1,u2,...uc]=XF(FTF)−1(ui为第i类样本均值) M=[u_1, u_2,...u_c]=XF(F^TF)^{-1}\\ (u_i为第i类样本均值) M=[u1,u2,...uc]=XF(FTF)−1(ui为第i类样本均值)MFT=[uc1,uc2,...,ucn](uci代表第i个样本对应类别的均值) MF^T=[u_{c1},u_{c2},...,u_{cn}]\\ (u_{ci}代表第i个样本对应类别的均值) MFT=[uc1,uc2,...,ucn](uci代表第i个样本对应类别的均值)
目标优化推导:
-
K-Means方法
-
目标函数:
J=∑i=1k∑x∈Cik∣∣x−ci∣∣22=∑i=0k∑j=0N∣∣xi−uj∣∣fij 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
fijf_{ij}fij为指示矩阵i行j列内容,表示样本xix_ixi是否为第j类,若是,则为1,否则为0 -
优化内容:
arg minF,M∑i=0k∑j=0N∣∣xi−uj∣∣fijs.t. ∑j=1Cfij=1 (fij∈{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−MFT∣∣F2=tr[(X−MFT)(X−MFT)T]=tr(XXT−XFMT−MFTXT+MFTFM) \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=−XF−XF+2MFTF=2MFTF−2XF \frac{\partial{J}}{\partial{M}}=-XF-XF+2MF^TF=2MF^TF-2XF ∂M∂J=−XF−XF+2MFTF=2MFTF−2XF∂J∂M=0=>2MFTF−2XF=0=>MFTF=XF=>M=XF(FTF)−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(分类情况)下,使损失最小化的簇心即为各类样本向量均值[u1,u2,...,uk][u_1,u_2,...,u_k][u1,u2,...,uk]
-
-
求解F:
-
对于k-Means方法,指示矩阵F存在约束,元素fij∈{0,1}f_{ij}\in\{0,1\}fij∈{0,1}
-
因为F元素不连续,不能直接求导,因此将目标重新表示:
X−MFT=[x1,x2,...,xn]−[u1,u2,...,uk][f11f21...fn1f12f22...fn2............f1kf2k...fnk] 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⎦⎥⎥⎤
矩阵FTF^TFT第j列的列向量fjf_jfj代表样本xjx_jxj的分类情况,对每个样本都有k种情况(一个样本可能是k类中的一类)因此可以对每一个样本向量xjx_jxj枚举其类别,然后计算在该样本处产生的误差,选择误差最小的作为其预测类别
因此对n个样本,需要进行n*k次枚举
该方法等价于"将每个样本分到离其最近簇心对应的类"
-
-
采用的交替优化方法即为先选取当前簇心矩阵下的最优指示矩阵,再选取当前指示矩阵下最优簇心矩阵,不断迭代
-
由于迭代过程的每一步都能对目标函数进行优化,即目标函数值JJJ每次都在下降,又JJJ作为F范数平方大于0,有下界,因此必收敛
-
-
-
fuzzy C-Means方法:
-
将K-means方法中的标签矩阵F替换为权值F’,其元素fij′f'_{ij}fij′代表第i个样本属于第j类的程度
-
优化目标:
J=∑i=1k∑x∈Cikf′ijm∣∣x−ui∣∣22 (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)- 权值fij′f'_{ij}fij′与标签fijf_{ij}fij相比的区别:
- fij′∈[0,1]f'_{ij}\in{[0,1]}fij′∈[0,1]而fij∈{0,1}f_{ij}\in{\{0,1\}}fij∈{0,1}
- 在优化目标中,权值需要进行m次方运算,若m=1m=1m=1,则最终问题与k-means等价,F’会收敛于F(最小损失一定出现在分类唯一时)
- 权值fij′f'_{ij}fij′与标签fijf_{ij}fij相比的区别:
-
同样使用交替优化方法分别求解F′与MF'与MF′与M,得:
fij′=1∑i=1k[∣∣xi−ui∣∣∣∣xi−uk∣∣]2m−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−121uj=∑i=1Nf′ijmxi∑i=1Nfij′ 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值的继续增大而趋于平缓
-
-
轮廓系数法:
-
对样本点xix_ixi
- 定义凝聚度a,是样本点与同类其他样本平均距离
- 定义分离度b,是样本点与最近簇中所有样本的平均距离
-
最近簇:
Cj=argminCk1n∑x∈Ck∣∣x−uk∣∣ C_j=\underset{C_k}{arg min}\frac1n \sum_{x\in{C_k}}||x-u_k|| Cj=Ckargminn1x∈Ck∑∣∣x−uk∣∣ -
定义轮廓系数
S=b−amax(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]
更多推荐
所有评论(0)