em演算法是用於解決含有隱變數的概率模型引數的極大似然估計,每次迭代由兩步組成,e步求期望,m步求極大。而對於高斯混合模型(gmm)上em演算法也是乙個有效的解決方法。
現以習題9.1為例,簡單實現一下em演算法
import numpy as np
#計算e步
defexpectationcal
(pi,p,q,y)
: u = pi *
(p ** y)*(
(1- p)**(
1- y)
) v =(1
- pi)
*(q ** y)*(
(1- q)**(
1- y)
) u = np.divide(u,u + v)
return u
#計算m步
defmaximumcal
(u,y)
: n = np.shape(y)[0
] usum = np.
sum(u)
pi = np.full(n,usum / n)
p = np.
sum(u * y)
/ usum
p = np.full(n,p)
q = np.
sum((1
- u)
* y)
/ np.
sum(
1- u)
q = np.full(n,q)
return pi,p,q
#引數計算
defemcal
(ylabel,pi,p,q,
iter=40
):y = np.array(ylabel)
n = np.shape(ylabel)[0
] pi_old = np.full(n,pi)
p_old = np.full(n,p)
q_old = np.full(n,q)
for i in
range
(iter):
u = expectationcal(pi_old,p_old,q_old,y)
pi_new,p_new,q_new = maximumcal(u,y)
if np.
abs(np.
sum(pi_new - pi_old)
)<=
0.01
or np.
abs(np.
sum(p_new - p_old)
)<=
0.01
or np.
abs(np.
sum(q_new - q_old)
)<=
0.01
:break
else
: pi_old = pi_new
p_old = p_new
q_old = q_new
return pi_new,p_new,q_new
輸入以下數值:
ylabel =[1
,1,0
,1,0
,0,1
,0,1
,1]pi =
0.46
p =0.55
q =0.67
可以得知pi_new = 0.4619,p_new = 0.5346,q_new = 0.6561 統計學習方法九 EM演算法
一 em演算法是什麼?em演算法是一種迭代演算法,用於含有隱變數的概率模型引數的極大似然估計。作用 簡單直白的說,估計引數 是一種生成模型 1 用在概率模型中 2 含有隱變數 3 用極大似然估計方法估計引數 個人理解,概率模型中的一些引數,通常是一些概率 1 如果概率模型中的變數全部可觀測,那可以統...
統計學習方法 第9章 EM演算法
2019 july 04 em演算法 em 演算法精髓 em 演算法是通過不斷求解下界得極大化逼近對數似然函式極大化得演算法。構造下界函式 jessen 不等式 通過巧妙地取 q 的值而保證在引數的當前迭代點處下界函式與要求解的目標函式數值相等 jessen 不等式取等號 從而保證優化下界函式後在新...
統計學習方法 第9章 EM演算法
2019 july 06 em演算法 em 演算法精髓 em 演算法是通過不斷求解下界得極大化逼近對數似然函式極大化得演算法。構造下界函式 jessen 不等式 通過巧妙地取 q 的值而保證在引數的當前迭代點處下界函式與要求解的目標函式數值相等 jessen 不等式取等號 從而保證優化下界函式後在新...