em演算法(最大期望演算法[expectation-maximization algorithm, em])是為處理缺失資料的引數的估計問題,主要分為e步和m步交替組成,對給定的初始引數依賴較大。
from numpy import
*import numpy as np
import matplotlib.pyplot as plt
import random
defcreate_sample_data
(m, n)
: mat_y = mat(zeros(
(m, n)))
for i in
range
(m):
for j in
range
(n):
# 通過產生隨機數,每一行表示一次實驗結果
mat_y[i, j]
= random.randint(0,
1)return mat_t
# em演算法
defem
(arr_y, theta, tol, iterator_num)
: pi =
0 p =
0 q =
0 m, n = shape(arr_y)
mat_y = arr_y.geta(
)for i in
range
(iterator_num)
: miu =
pi = copy(theta[0]
) p = copy(theta[1]
) q = copy(theta[2]
)for j in
range
(m):
miu_value =
(pi *
(p ** mat_y[j])*
((1- p)**(
1- mat_y[j]))
)/ \
(pi *
(p ** mat_y[j])*
((1- p)**(
1- mat_y[j]))
+(1- pi)
*(q ** mat_y[j])*
((1- q)**(
1- mat_y[j]))
) sum1 =
0.0for j in
range
(m):
sum1 += miu[j]
theta[0]
= sum1 / m
sum1 =
0.0 sum2 =
0.0for j in
range
(m):
sum1 += miu[j]
* mat_y[j]
sum2 += miu[j]
theta[1]
= sum1 / sum2
sum1 =
0.0 sum2 =
0.0for j in
range
(m):
sum1 +=(1
- miu[j]
)* mat_y[j]
sum2 +=(1
- miu[j]
) theta[2]
= sum1 / sum2
print
("------------------------------------------"
)print
(theta)if(
abs(theta[0]
- pi)
<= tol and
abs(theta[1]
- p)
<= tol \
andabs(theta[2]
- q)
<= tol)
:print
("break"
)break
return pi, p, q
defmain()
:# mat_y = create_sample_data(100, 1)
mat_y = mat(zeros((10
,1))
) mat_y[0,
0]=1
mat_y[1,
0]=1
mat_y[2,
0]=0
mat_y[3,
0]=1
mat_y[4,
0]=0
mat_y[5,
0]=0
mat_y[6,
0]=1
mat_y[7,
0]=0
mat_y[8,
0]=1
mat_y[9,
0]=1
#theta 三個引數可以自行更改,然後對比一下結果
theta =
[0.4
,0.6
,0.7
]print
(mat_y)
pi, p, q = em(mat_y, theta,
0.001
,100
)print
(pi, p, q)
main(
)
《統計學習方法》—— 李航 機器學習演算法 EM演算法
介紹 理論分析 現在,已經知道目標函式 似然函式 maxj p x 假設隱變數為z,那麼可以寫成j zp x z 我們假設當前的引數為 i 那麼可以得到 j j i logp x logp x i log zp x,z logp x i log z p z x,i p x z p z x,i log...
機器學習演算法 EM演算法
e步 利用當前估計的引數值,求出在該引數下隱含變數的條件概率值 計算對數似然的期望值 m步 結合e步求出的隱含變數條件概率,求出似然函式下界函式的最大值 尋找能使e步產生的似然期望最大化的引數 值 然後,新得到的引數值重新被用於e步.直到收斂到區域性最優解。note 每次迭代實際在求q函式及其極大,...
機器學習 EM演算法推導
有時,我們用極大似然的時候,公式中可能會有隱變數 l i 1m p yi i 1 m z p yi z i 1m zp z p y i z 也就是 y 取什麼值是由隱含的變數 z 決定的。舉個栗子 有三個硬幣,abc,先拋a,由a的正反面決定下一步拋 b 還是拋 c a是正面拋b,a是反面拋c。第二...