机器学习进阶(10):K-means的推导和算法理解

前言

聚类就是对大量未标注的数据集,按照数据的内在相似性将数据划分为多个类别,使得类别内的数据相似度较大,而类间相似度较小。

1 几种聚类常用距离
  1. 欧式距离:
    d i s t ( X , Y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p \mathrm{dist(}X,Y)=\left( \sum_{i=1}^n{\left| x_i-y_i \right|^p} \right) ^{\frac{1}{p}} dist(X,Y)=(i=1nxiyip)p1
    一般的情况用欧式距离。
  2. Jaccard相似系数:
    J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B)=\frac{|A\cap B|}{|A\cup B|} J(A,B)=ABAB
    涉及到集合情况用这个。
  3. 余弦相似度
    cos ⁡ ( θ ) = a T b ∣ a ∣ ⋅ ∣ b ∣ \cos\mathrm{(}\theta )=\frac{a^Tb}{|a|\cdot |b|} cos(θ)=abaTb
    词嵌入的时候欧式距离并不合适,而是夹角余弦值比较合适,文档之间也可以。
  4. Pearson相似系数
    ρ X x = c o v ( X , Y ) σ X σ Y = E [ ( X − μ X ) ( Y − μ Y ) ] σ X σ Y = ∑ i = 1 n ( X i − μ X ) ( Y i − μ Y ) ∑ i = 1 n ( X i − μ X ) 2 ∑ i = 1 n ( Y i − μ P ) 2 \rho _{Xx}=\frac{\mathrm{cov(}X,Y)}{\sigma _X\sigma _Y}=\frac{E\left[ \left( X-\mu _X \right) \left( Y-\mu _Y \right) \right]}{\sigma _X\sigma _Y}=\frac{\sum_{i=1}^n{\left( X_i-\mu _X \right)}\left( Y_i-\mu _{\mathrm{Y}} \right)}{\sqrt{\sum_{i=1}^n{\left( X_i-\mu _X \right) ^2}}\sqrt{\sum_{i=1}^n{\left( Y_i-\mu _{\mathrm{P}} \right) ^2}}} ρXx=σXσYcov(X,Y)=σXσYE[(XμX)(YμY)]=i=1n(XiμX)2 i=1n(YiμP)2 i=1n(XiμX)(YiμY)
  5. 相对熵
    D ( p ∣ q ) = ∑ x p ( x ) log ⁡ p ( x ) q ( x ) = E p ( x ) log ⁡ p ( x ) q ( x ) D(p|q)=\sum_x{p}(x)\log \frac{p(x)}{q(x)}=E_{p(x)}\log \frac{p(x)}{q(x)} D(pq)=xp(x)logq(x)p(x)=Ep(x)logq(x)p(x)
    4和5都是可以度量函数之间的相似性。
  6. Hellinger距离:
    D α ( p ∣ q ) = 2 1 − α 2 ( 1 − ∫ p ( x ) 1 + α 2 q ( x ) 1 − α 2 d x ) \quad D_{\alpha}(p|q)=\frac{2}{1-\alpha ^2}\left( 1-\int{p}(x)^{\frac{1+\alpha}{2}}q(x)^{\frac{1-\alpha}{2}}dx \right) Dα(pq)=1α22(1p(x)21+αq(x)21αdx)
2 K-means算法

基本思想:对于给定的类别数目k,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进后的划分方案都比前一次的好。

给定无标签的输入样本 S = x 1 , x 2 , . . . , x m \mathrm{S}=\mathrm{x}_1,\mathrm{x}_2,...,\mathrm{x}_{\mathrm{m}} S=x1,x2,...,xm,选择初始K个类别的类中心 μ 1 μ 2 . . . μ k \mu _1\mu _2...\mu _{\mathrm{k}} μ1μ2...μk

将其他样本标记为距离类中心最近的类别:
   l a b e l i = a r g min ⁡ 1 ≤ j ≤ k ∥ x i − μ j ∥ \,\,\mathrm{label} _i=\underset{1\le j\le k}{\mathrm{arg}\min}\left\| x_i-\mu _j \right\| labeli=1jkargminxiμj
其中这个距离可以使用其他的距离,以平方误差为例子:
   l a b e l i = a r g min ⁡ 1 ≤ j ≤ k    J ( μ 1 , μ 2 , ⋯ μ k ) = a r g min ⁡ 1 ≤ j ≤ k 1 2 ∑ j = 1 K ∑ i = 1 N j ( x i − μ j ) 2 \,\,\mathrm{label}_i=\underset{1\le j\le k}{\mathrm{arg} \min}\,\,J\left( \mu _1,\mu _2,\cdots \mu _k \right) =\underset{1\le j\le k}{\mathrm{arg} \min}\frac{1}{2}\sum_{j=1}^K{\sum_{i=1}^{N_j}{\left( x_i-\mu _j \right) ^2}} labeli=1jkargminJ(μ1,μ2,μk)=1jkargmin21j=1Ki=1Nj(xiμj)2

再将每个类中心更新为该类别所属样本的均值:
μ j = 1 ∣ c j ∣ ∑ i ∈ c j x i \mu _j=\frac{1}{\left| c_j \right|}\sum_{i\in c_j}{x_i} μj=cj1icjxi
重复以上最后两步,直到小于某个阈值,中止条件可以是迭代次数/类中心变化率/MSE(Minimum Squared Error)。下图可以展示算法的一个变化过程:
在这里插入图片描述
但是如果数据中出现个别极端样本,那么以均值为类中心就不够合适,修改为中位数更妥当,这种方式即K-mediods聚类(K中值聚类)。

3 初值选择

K-means算法对初始值的选择是敏感的,不然很有可能落到局部最优解上。
在这里插入图片描述
希望样本在初始化的时候就远一些,先随机选一个,然后再计算其他样本到这个初始值的距离,希望选择一个距离比较大的样本选为第二个。将距离除以总距离和,分配概率p。随机100次,按照概率大小来选择,并不是总是选概率最高的。

类别数K作为一个超参数也可以进行选择,例如手肘法:
在这里插入图片描述
当损失函数值下降到一个拐点的时候停止,就选择拐点的K值。

4 聚类的衡量指标

在这里插入图片描述
在这里插入图片描述
相当于从已有的分类中任意选两个,属于同样一个类别的概率可能性有多大。
在这里插入图片描述
在这里插入图片描述

5 结果分析

对于方差接近的混合高斯数据有好的效果:
在这里插入图片描述

但数据不是高斯分布的情况就很差:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值