一、什么是高斯复合函数

详见:机器学习 01高斯混合模型(Gaussian Mixture Model:GMM)_基础知识与认识-CSDN博客

二、EM算法是什么?

1.EM算法是GMM背后的“引擎”,是处理含有隐变量问题的经典方法。

简单来说我们能够通过这个算法,来确定出GMM的最优参数:均值 μkμk​、协方差 ΣkΣk​ 和混合系数 πkπk​。

2. EM算法的原理是什么?

(1)EM算法的基本观点

在两个(或多个)高斯模型不确定的情况下,我们不知道样本对应的K(组别)是什么,所以我们需要不断的“试错”,我把这个算法理解为“穷举法”,然后找到最优解。

本质就是“迭代运算”:它假设复杂的世界是由若干个简单的“组件”(高斯分布)组成的。我们不知道每个数据点属于哪个组件(这是聚类的任务),但我们知道总体的样子是这些组件按照一定比例(πkπk​)混合而成的。

(2)进一步理解EM算法

在GMM中,我们面临一个两难问题:

  • 如果我们知道每个数据点属于哪个高斯成分(即知道隐变量 zz),那么我们可以轻松地计算出每个成分的均值 μkμk​、协方差 ΣkΣk​ 和混合系数 πkπk​——就是简单的统计每个簇内的数据。

  • 反过来,如果我们知道每个成分的参数(μk,Σk,πkμk​,Σk​,πk​),我们也可以轻松计算出每个数据点属于各个成分的概率(即隐变量的后验概率)。

但问题是:我们两者都不知道!

这就是EM算法要解决的“循环依赖”问题。

②EM算法的基本思想:猜一下,优化一下,再猜一下

3.举个🌰:两个不透明的箱子实验(EM算法的思想)

假设你有两个不透明的箱子,里面装着不同颜色的球。你可以从箱子里随机摸球,但你看不到是哪个箱子(隐变量),只能看到球的颜色(观测数据)。

你不知道:

  • 每个箱子里红球和蓝球的比例(即每个成分的参数)

  • 每次摸球是从哪个箱子摸出来的(即隐变量)

EM算法的解决方式:

  1. E步(猜测):先随便猜两个箱子的颜色比例。然后根据这个猜测,去推测每一个球“大概”是从哪个箱子来的(比如,如果箱子A红色多,那么摸出的红球大概率来自箱子A)。

  2. M步(优化):根据上面的猜测结果(每个球按概率分配给箱子A或B),重新计算每个箱子的颜色比例。

  3. 重复E步和M步,随着迭代次数增加,猜测越来越准,箱子的比例也越来越接近真实值。

4.再举个🌰:身高题目(EM算法的实践)

不知道的朋友见:就是01提及的案例:假设你是老师,看到一个班级的学生(数据点),但不知道谁是男生谁是女生(隐藏信息)。你想估计:

  • 男生的平均身高

  • 女生的平均身高

  • 男女生各占多少比例

  • (1)简单版

假设我们只有5个学生的身高数据:[150, 160, 170, 180, 190] cm,我们用高斯复合模型(两个高斯分布,对应“矮个子群体”和“高个子群体”),用EM算法求这两个群体的均值和比例。
① 初始化(随便猜参数)

- 高斯1(矮个子群体):均值μ₁=155cm(猜测的矮个子平均身高),权重0.5(猜测矮个子占总人数的50%);
- 高斯2(高个子群体):均值μ₂=185cm(猜测的高个子平均身高),权重0.5(猜测高个子占总人数的50%);
② E步:计算每个学生属于两个群体的概率
核心原则:身高离哪个群体的均值越近,属于那个群体的概率越高(以下概率为简化计算,仅体现逻辑):
- 150cm学生:离μ₁(155cm)很近,离μ₂(185cm)很远 → 属于高斯1的概率=0.95,属于高斯2的概率=0.05;
- 160cm学生:离μ₁更近 → 属于高斯1的概率=0.7,属于高斯2的概率=0.3;
- 170cm学生:离μ₁(155cm)和μ₂(185cm)距离相等(都是15cm) → 属于两个群体的概率各0.5;
- 180cm学生:离μ₂更近 → 属于高斯1的概率=0.3,属于高斯2的概率=0.7;
- 190cm学生:离μ₂很近 → 属于高斯1的概率=0.05,属于高斯2的概率=0.95;
③ M步:用概率重新计算均值(加权平均)
计算逻辑:每个学生的身高,按归属概率“拆分”,再分别求两个群体的平均身高:
- 新的μ₁(矮个子均值)=(150×0.95 + 160×0.7 + 170×0.5 + 180×0.3 + 190×0.05)÷(0.95+0.7+0.5+0.3+0.05)≈ 161cm;
- 新的μ₂(高个子均值)=(150×0.05 + 160×0.3 + 170×0.5 + 180×0.7 + 190×0.95)÷(0.05+0.3+0.5+0.7+0.95)≈ 179cm;
- 新的权重:高斯1权重=(0.95+0.7+0.5+0.3+0.05)÷5=0.5,高斯2权重=0.5(暂时不变,多迭代几次会变化);
④ 重复迭代,直到收敛
用新的μ₁(161cm)和μ₂(179cm),再回到E步,重新计算每个学生的归属概率(比如150cm属于高斯1的概率会比0.95更高,190cm属于高斯2的概率会比0.95更高);再用新的概率回到M步,修正均值。
反复迭代3-5轮后,参数会逐渐稳定:μ₁会收敛到155cm左右(贴合150、160两个矮身高数据),μ₂会收敛到185cm左右(贴合180、190两个高身高数据),170cm的归属概率会稳定在一个固定值,此时迭代停止,我们就得到了两个群体的精准参数。

(2)原理解释详细步骤

① 第一步:初始化——大胆猜(给参数一个初始值)
因为一开始没有任何信息,所以参数可以“随便猜”(只要合理即可,不影响最终结果,只会影响迭代次数),比如以“学生身高分男女”为例:
- 猜测男生平均身高:165cm
- 猜测女生平均身高:170cm
- 猜测男女生人数比例:各50%(即每个群体的权重都是0.5)
补充:这里的“平均身高”就是高斯分布的核心参数(均值μ),“比例”就是每个高斯分布的权重(π),EM算法最终就是要精准求出这两个参数。
② 第二步:E步(期望步)——算概率(每个数据属于每个群体的可能性)
有了初始参数,我们就可以反过来计算:每个数据(比如每个学生的身高),属于我们猜测的每个群体(男生/女生)的概率是多少——这一步不做“绝对判断”(不说“这个学生一定是男生”),只算“可能性大小”。
举个直观例子:看一个身高175cm的学生,结合我们初始猜测的参数(男生165cm、女生170cm):
- 175cm离女生平均身高170cm更近,所以“属于女生”的概率更高,比如算出来是0.9;
- 175cm离男生平均身高165cm更远,所以“属于男生”的概率更低,比如算出来是0.1;
补充:这里的概率计算,本质是用高斯分布的概率密度公式,距离均值越近,概率越高(可以理解为“越像这个群体的特征”),最终每个数据的所有归属概率加起来等于1(比如0.9+0.1=1)。
③ 第三步:M步(最大化步)——修参数(用概率重新算更合理的参数)
有了每个数据的归属概率(比如“175cm学生有0.1概率是男生、0.9概率是女生”),我们就可以用“加权平均”的方式,重新计算参数——权重就是每个数据的归属概率,这样算出来的参数,会比一开始“瞎猜”的更精准。
具体计算(还是以男女生身高为例):
- 新的男生平均身高 = 所有学生的身高 × 各自“属于男生的概率”,然后求和,再除以所有学生“属于男生的概率”之和(相当于“把每个学生按可能性加权,只算属于男生的那部分贡献”);
- 新的女生平均身高 = 所有学生的身高 × 各自“属于女生的概率”,求和后除以所有学生“属于女生的概率”之和;
- 新的男女生比例 = 所有学生“属于男生的概率”的平均值(比如10个学生,每个学生属于男生的概率加起来是6,比例就是6/10=0.6)。
④ 第四步:重复迭代——直到参数不变
用M步算出来的新参数,再回到E步,重新计算每个数据的归属概率;然后再用新的概率,回到M步修正参数……就这样反复循环。
这个过程就像“不断修正自己的猜测”:第一次猜的参数不精准,用概率修正后更接近真实值;再用修正后的参数算概率,概率更精准;再用精准的概率修正参数,直到参数不再变化(比如男生平均身高稳定在170cm左右,女生稳定在160cm左右),此时参数就是最贴合数据的结果,迭代停止。

注:上述内容借助网络资料与ai整理,仅供个人学习并记录,欢迎讨论,敬请批评指正!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐