算法强化 —— K-means

本文深入探讨了K-means聚类算法的主要思想、工作流程及数学原理,包括其背后的EM算法理论支撑,以及如何通过最小化平方误差函数实现数据点的最优聚类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k-means

主要思想

有四个牧师去郊区布道,一开始牧师们随意选择了几个布道点,并且把这几个布道点的情况公告给了郊区所有的居民,于是每个居民到离自己家最近的布道点去听课。听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己上课所有居民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。牧师每一次移动不可能离所有人都很近。有的人发现A牧师移动以后自己还不如去B牧师出听课更近,于是每个居民又去了离自己最近的布道点,…,这样,牧师每个礼拜更新自己的位置,居民根据自己的情况选择布道点,最终稳定下来。
在这里插入图片描述
在这里插入图片描述
从上图中,我们可以看到,A,B,C,D,E是五个在图中点,而灰色的点是我们的种子点,也就是我们用来找点群的点。有两个种子点,所以看= 2

然后K-mean的算法如下:
1.随机在图中取k(这里k = 2)个种子点
2.然后对图中所有点求到这个k个种子点的距离,假如点PiP_iPi离种子点SiS_iSi最近,那么PiP_iPi属于SiS_iSi点群(上图中,我们可以看到A,B输入上面的种子点,C,D,E属于下面中部的种子点)
3.接下来,我们要移动种子点到属于他的"点群"的中心
4.重复第2、3步,直到种子点没有移动(我们可以看到图中的第四步上面的种子点聚合了A,B,C,下面的种子点聚合了D,E)

归纳下K-mean算法的过程是

1.选取初始聚类中心
2.通过计算距离进行聚类
3.重新计算聚类中心
4.重复2-3步直至聚类中心不发生改变(或者变化小于一定的阈值)或者达到迭代次数上限

k-mean损失函数浅探

该算法旨在最小化目标函数,即在上面这些情况下的平方误差函数
arg⁡min⁡S∑i=1k∑j∈Si∥xj−μSi∥2\underset{S}{\arg \min } \sum_{i=1}^{k} \sum_{j \in S_{i}}\left\|x_{j}-\mu_{S_{i}}\right\|^{2}Sargmini=1kjSixjμSi2
其中S=S1,S2,...,SkS = S_1,S_2,...,S_kS=S1,S2,...,Sk代表聚类后的k个类别∣∣xj−μsi∣∣2||x_j - \mu_{si}||^2xjμsi2是我们这里选定的距离公式,用于计算数据点和群集中心的距离
那么,k-means是否一定会收敛?k-means背后的理论支撑————EM(Expectation Maximum)算法

Expectation Maximum

问题定义
假设有两枚硬币A,B,以相同的概率随机选择一个硬币,进行如下抛硬币实验:共做5次实验,每次实验独立的抛10次,结果如下表,例如某次实验产生了H,T,T,T,H,H,T,H,T,H(H代表正面朝上)。a是在知道每次选择的是A还是B的情况下进行,b是在不知道选择的是A还是B的情况下进行,问如何估计两个硬币正面出现的概率。
a Maximum likelihood

CoinACoinB
NULL5H,5T
9H,1TNULL
8H,2TNULL
NULL4H,6T
7H,3TNULL
24H,6T9H,11T

b Expectation maximization

CoinACoinB
2.2H,2.2T2.8H,2.8T
7.2H,0.8T1.8H,0.2T
5.9H,1.5T2.1H,0.5T
1.4H,2.1T2.6H,3.9T
4.5H,1.9T2.5H,1.1T
21.3H,8.6T11.7H,8.4T

在case b中,我们假设A硬币投正面的概率是0.6,B硬币投正面的概率是0.5,然后通过极大似然估计来估计每一组结果是由A硬币投出的概率和由B硬币投出的概率。然后通过估计出来的选择硬币概率反过来重新计算投正面概率。其中每一轮选择的是A硬币还是B硬币我们称之为隐参数z,A硬币投正面的概率和B硬币投正面的概率称之为模型参数θ\thetaθ
总而言之,EM就是解决带隐参数的参数估计问题的一类算法。

Jensen不等式

在这里插入图片描述
如果f是凸函数,X是随机变量,那么
E[f(X)]≥f(EX)E[f(X)]\geq f(EX)E[f(X)]f(EX)
更特殊的形式
f(x1+x2+⋯+xnn)≤f(x1)+f(x2)+⋯+f(xn)nf\left(\frac{x_{1}+x_{2}+\cdots+x_{n}}{n}\right) \leq \frac{f\left(x_{1}\right)+f\left(x_{2}\right)+\cdots+f\left(x_{n}\right)}{n}f(nx1+x2++xn)nf(x1)+f(x2)++f(xn)
log函数上的jensen不等式:
在这里插入图片描述
E[log(X)]≤log(EX)E[log(X)] \leq log(EX)E[log(X)]log(EX)

算法思路

给定的m个观察样本{x(1),x(2),...,x(m)x^{(1)},x^{(2)},...,x^{(m)}x(1),x(2),...,x(m)},模型的参数为θ\thetaθ,我们想找到隐参数z,能使得p(X,z)p(X,z)p(X,z)最大,简历似然函数
ℓ(θ)=∑i=1mlog⁡p(x(i);θ)=∑i=1mlog⁡∑zp(x(i),z;θ)\begin{aligned} \ell(\theta) &=\sum_{i=1}^{m} \log p\left(x^{(i)} ; \theta\right) \\ &=\sum_{i=1}^{m} \log \sum_{z} p\left(x^{(i)}, z ; \theta\right) \end{aligned}(θ)=i=1mlogp(x(i);θ)=i=1mlogzp(x(i),z;θ)
直接计算上述似然函数的最大值比较困难,所以我们希望能够找到一个不带隐变量z的函数γ(x∣θ)≤l(x,z;θ)\gamma (x|\theta) \leq l(x,z;\theta)γ(xθ)l(x,z;θ)恒成立,并用$\gamma (x|\theta) $逼近目标函数。

在这里插入图片描述
在绿色线位置,找到一个函数γ\gammaγ,能够使得该函数最接近目标函数,固定γ\gammaγ函数,找到最大值,然后更新θ\thetaθ,得到红线
对于红线位置的参数θ\thetaθ:固定θ\thetaθ,找到一个最好的函数γ\gammaγ,使得该函数最接近目标函数。重复该过程,直到收敛到局部最大值。

K-means的收敛性

求解的似然函数是
P(x,z∣μ1,μ2,…,μk)∝{exp⁡(−∥x−μz∥22),∥x−μz∥2=min⁡k∥x−μk∥20,∥x−μz∥2>min⁡k∥x−μk∥2P\left(x, z | \mu_{1}, \mu_{2}, \ldots, \mu_{k}\right) \propto\left\{\begin{aligned} \exp \left(-\left\|x-\mu_{z}\right\|_{2}^{2}\right),\left\|x-\mu_{z}\right\|_{2}=\min _{k}\left\|x-\mu_{k}\right\|_{2} \\ 0,\left\|x-\mu_{z}\right\|_{2}>\min _{k}\left\|x-\mu_{k}\right\|_{2} \end{aligned}\right.P(x,zμ1,μ2,,μk)exp(xμz22),xμz2=kminxμk20,xμz2>kminxμk2
E步是固定模型参数μk\mu_kμk(中心点的位置),进而求隐变量的分布,也就是每个样本属于哪个类型
γnk={1, if k=argmin⁡j∥xn−μj∥20, otherwise \gamma_{n k}=\left\{\begin{array}{ll} 1, & \text { if } k=\operatorname{argmin}_{j}\left\|x_{n}-\mu_{j}\right\|^{2} \\ 0, & \text { otherwise } \end{array}\right.γnk={1,0, if k=argminjxnμj2 otherwise 
M步是计算出所有样本所属类别之后,更新模型参数μk\mu_kμk(中心点的位置):
μk=∑nγnkxn∑nγnk\mu_{k}=\frac{\sum_{n} \gamma_{n k} x_{n}}{\sum_{n} \gamma_{n k}}μk=nγnknγnkxn
通过将K-means"EM"化,就可以通过说明EM收敛性等价到K-means收敛性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值