引入
设袋子里有红白两种球,比例为p:1−p。现在不知道比例值是多少,因此可以随机抽样:x1,x2...xn,每一个xi都是随机变量的随机抽样结果,并进行如下估计:p=|{xi=红}|n
如果有两个袋子,各自都有红色的球和白色的球,抽取的时候先随机挑选一个袋子,设选第一个袋子的概率为w,第一个袋子中红球:白球=p:1−p,第二个为红球:白球=q:1−q。
如果此时进行抽取,抽取到红球的概率为:P{x=红}=w×p+(1−w)×q,抽到白球的概率同理。
如果想要知道从第一个袋子中抽到红球的概率:P{第一个|xi=红},可以把概率乘以权重放到矩阵中:
(wpw(1−p) (1−w)q(1−w)(1−q) )
取矩阵的第一列分析,不难得出P{第一个|xi=红}=wpwp+(1−w)q。
此时模型的w,p,q三个参数均未知,可以使用极大似然法对其进行估计。令1代表红色,0代表白色,每个xi的密度函数为wpxi(1−p)1−xi+(1−w)qxi(1−q)1−xi,如果xi=1(红色),带入上式可以发现结果就是wp+(1−w)q,也就是矩阵第一列的和。
根据极大似然估计,需要把所有样本的密度函数做乘积,似然函数就是:
Πni=1[wpxi(1−p)1−xi+(1−w)qxi(1−q)1−xi],需要对其求极大值。如果按照极大似然的思路,会发现这个问题很复杂(中括号里的部分不易处理,不信你试试)。不过这个函数可以转换为如下的形式:
Πni=1[(wp+(1−w)q)xi(w(1−p)+(1−w)(1−q))1−xi],这直观上也很容易理解,因为xi只有0和1两种形式(带入xi=1 or 0试试)。对其处理的话,可以令P=wp+(1−w)q,Q=w(1−p)+(1−w)(1−q),函数继续变形为Πni=1PxiQ1−xi=Πni=1Pxi(1−P)1−xi,对其取对数后得(Σni=1xi)lnP+(n−Σni=1xi)ln(1−P),对P求导并令导数为0,可得P=Σni=1xin=kn,k为样本中1(红球)的个数,且有w(1−p)+(1−w)(1−q)=n−kn(本质上等于上面的方程)。
总结一下,刚才设计的模型(先随机选袋子,再随机选球)从极大似然估计的角度,wp+(1−w)q=kn就是最佳估计,但是一个方程里含有三个未知数,所以只要三个参数满足这个方程就是一个合理的估计,即给出两个参数就可以把另一个参数解出来。
从另一个角度看问题
现在给出三个参数p(0),q(0),w(0),对于xi,要根据它的颜色判断它来自于哪个袋子(利用上面的矩阵来计算):
红球来自第一个袋子的概率:wpwp+(1−w)q=ai,白球来自第一个袋子的概率:w(1−p)w(1−p)+(1−w)(1−q)=bi...同理设红球和白球来自第二个袋子的概率为ci,di,那么对于每个球,这四个概率都可以求出来,列成一张表:
|
x1 |
x2 |
.. |
|
第一个-红 |
wpwp+(1−w)q=a1 |
|
|
|
第一个-白 |
w(1−p)wp+(1−w)(1−q)=b1 |
|
|
|
第二个-红 |
(1−w)pwp+(1−w)q=c1 |
|
|
|
第二个-白 |
(1−w)(1−p)wp+(1−w)(1−q)=d1 |
|
|
|
每一列的总和都是一样的(都是1),因为这里考虑的是后验概率,即每个球已知是红色还是白色,所以对于每一列只是把和已知颜色对应的行加起来(而非把所有的行加起来)。
因此来自于第一个袋子的概率w可以给出一个重新的估计:w(1)=Σxi=1ai+Σxi=1bin,即表中前两行相加再除以n。这个过程就是:选定w(0)为初值,根据初值计算出一个个概率值,再根据上表的概率值计算出新的w(1)。
同理p(1)=Σxi=1aiΣxi=1ai+Σxi=0bi,q(1)=Σxi=1ciΣxi=1ci+Σxi=0di。如此可以继续迭代下去得到新的参数值,能够证明这个算法是收敛的,至少可以收敛到局部极大值(不一定是全局)。
整个过程就叫做EM算法。
推广
对于高斯分布N(μ,σ2),设有K个高斯分布,从中随机抽取到的概率分别为w1,w2...wk,且满足Σki=1=1。
X的密度函数w1f1(x)+....+wkfk(x),f(x)=1√2πσe−(x−μ)22σ2
现在给出x1,...xn,如何估计出所有的μj,σ2j,wi?
按照极大似然的过程,max Πni=1[ΣKj=1wjfj(xi)]等价于max Σni=1log(ΣKj=1wjfj(xi))。但是这样并没有对问题进行化简,所以根据前面的结果,给出一组参数μ(0)j,σ2(0)j,w(0)i,考虑建一个表:
高斯分布 |
x1 |
x2 |
.. |
|
1 |
w1f1(x1)w1f1(x1)+...+wkfk(x1)=w11 |
w1f1(x2)w1f1(x2)+...=w21 |
.. |
|
2 |
w2f2(x1)w1f1(x1)+...=w12 |
.. |
.. |
|
.. |
.. |
.. |
.. |
|
k |
.. |
.. |
.. |
|
这样就又可以进行估计了。同样,每一列的总和是1,则对于w1有一个很自然的估计:w(1)1=Σni=1wi1n,其余的w值同理。现在看均值和方差:
μ(1)1=Σni=1wi1xiΣni=1wi1,注意这里分布是对每一行的wi1求和,并不是1。σ(1)1=Σni=1wi1(xi−μ(1)1)2Σni=1wi1
迭代若干次以后就会得到比较合适的高斯分布了。
对于二维高斯分布,其参数也都可以用EM算法进行估计。
需要注意的是,这里的K是超参数,需要人为给定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-04-04 Codeforces Round #631 (Div. 2) B. Dreamoon Likes Permutations(排列组合)
2020-04-04 Codeforces Round #631 (Div. 2) A. Dreamoon and Ranking Collection(水题)