「機械学習の公式導出とコード実装」第22章-EMアルゴリズム

「機械学習の公式導出とコード実装」の学習ノート、自分の学習プロセスを記録します。詳細な内容については、著者の本を購入してください。

EMアルゴリズム

反復アルゴリズムとして、EM アルゴリズム ( expectation maximization、 ) は、隠れ変数を含む確率モデルのパラメーターの最尤推定期望极大值算法に使用されます

EM アルゴリズムには 2 つのステップが含まれます: E ステップ、期待値 ( expectation) を求める; M ステップ、最大値 ( maximization) を求める。

1 最尤推定

最尤推定( maximum likelihood estimationMLE) は、統計分野における古典的なパラメータ推定方法です。特定の確率分布を満たすが、その中の統計パラメータが不明なランダム サンプルの場合、最尤推定を使用すると、いくつかの実験の結果を通じてパラメータの値を推定できます。

古典的な例で説明すると、たとえば、ある大学の学生の身長分布を知りたいとします。この学校の生徒の身長分布は正規分布N ( μ , σ 2 ) N(\mu,\sigma^{2}) に従うと仮定します。N ( μ ,p2 )、ここで、分布パラメータμ \muμσ 2 \sigma^{2}p2不明。学校には数万人の生徒がおり、一人一人を測定するのは明らかに非現実的であるため、統計的サンプリング手法を使用して無作為に 100 人の生徒を選択し、身長を測定することにしました。

学校内の全生徒の身長を 100 人の身長から推定するには、次の質問を明確にする必要があります。最初の質問は、この 100 人が集まる確率はどれくらいかということです全員が独立して選択されるため、100 人が抽選される確率は、個人の確率の積として表すことができます。
L ( θ ) = L ( x 1 , x 2 , ⋯ , xn ; θ ) = ∏ i = 1 np ( xi ∣ θ ) L(\theta )=L(x_{1},x_{2},\cdots,x_{n};\theta)=\prod_{i=1}^{n}p(x_ {i}\ミッド\シータ)L ( i )=L ( ×1バツ2バツ;=i = 1p ( x私はθ )
上の式は尤度関数です。計算の便宜上、尤度関数の対数をとります:
H ( θ ) = ln ⁡ L ( θ ) = ln ⁡ ∏ i = 1 np ( xi ∣ θ ) = ∑ i = 1 n ln ⁡ p ( xi ∣ θ ) H(\theta )=\ln_{}{L(\theta )}=\ln_{}{\prod_{i=1}^{n}p( x_{i }\mid \theta)}=\sum_{i=1}^{n} \ln_{}{p(x_{i}\mid \theta)}H ( i )=lnL ( i )=lni = 1p ( x私は=i = 1lnp ( x私はθ )
2 番目の質問は、なぜこの 100 人が選ばれたのかということです最尤推定の理論によれば、学校に非常に多くの生徒がいる中、他の 100 人の生徒ではなく、この 100 人の生徒を選択しただけです。これはまさに、これら 100 人の生徒が出現する確率、つまり対応する尤度関数が非常に高いためです。は非常に大きい:
θ ^ = argmax L ( θ ) \hat{\theta} = argmax L(\theta )^=a r g max xL ( θ ) L ( θ ) L(\theta)
について直接最後の問題を解く方法L ( θ )を微分して0とします。

したがって、最尤推定法は、サンプリング結果からの条件の逆推定とみなすことができます。つまり、これらのサンプルの確率が非常に高く見えるようにする特定のパラメーターがわかっており、このパラメーターを真の推定値として直接使用します。パラメータ推定の値。

2 EMアルゴリズム

学校の全生徒の身長が分布に従うと仮定するのは一般的すぎますが、実際、男子の身長が分布 N ( μ 1 , σ 1 2 ) N(\) に従うと仮定すると、男性と女性の分布は異なります。ム^{}_{1},\シグマ^{ 2}_{1})N m1p12)、女の子の身長分布はN ( μ 2 , σ 2 2 ) N(\mu^{}_{2},\sigma^{2}_{2}) です。N m2p22この学校の生徒の身長を推定するには、単純に分布の仮定を使用することはできません。

50 人の男子と 50 人の女子が別々にサンプリングされ、別々に推定されるとします。サンプリングしたサンプルが男の子からのものか女の子からのものかがわからないと仮定します。

生徒の身長は観測変数( observable variable)、サンプルの性別は隠れ変数( hidden variable) です。

ここで、2 つの質問を推定する必要があります。1 つは、サンプルが男の子か女の子かということですが、男の子と女の子に対応する身長の正規分布パラメーターは何かということです。この場合、最尤推定は適用できないため、男子学生と女子学生の身長分布を推定するには、まず学生が男性であるか女性であるかを推定する必要がある。逆に、生徒が男性か女性かを推定するには、身長から判断する必要があります。ただし、この 2 つは相互に依存しており、最尤推定によって直接計算することはできません。

この隠れ変数を含むパラメータ推定問題の解決には、一般に EM( expectation maximization) アルゴリズム、つまり期待値最大化アルゴリズムが使用されます。前述の高さ推定問題に対する EM アルゴリズムの解決アイデアは次のとおりです。2 つの問題は相互に依存しているため、これは動的解決プロセスでなければなりません。男性と女性の身長分布の初期値を直接与え、初期値に従ってどのサンプルが男性/女性であるかの確率を推定し ( E ステップ)、その後、最尤法を使用して身長分布パラメータを推定する方が良いでしょう。男子学生と女子学生の割合 ( M ステップ) を計算し、終了条件が満たされるまで動的に反復調整が行われます。

EM アルゴリズムの応用シナリオは、隠れた変数を含む確率モデルのパラメーター推定問題を解くことです。観測変数データ Y隠れ変数データ Z同時確率分布P ( Y , Z ∣ θ ) P(Y,Z|\theta) が与えられるとします。P ( Y ,Z θ )、およびP ( Z ∣ Y , θ ) P(Z|Y,\theta)の条件付き分布P ( Z Y θ )、EM アルゴリズムを使用してパラメーターθ \thetaθの推定手順は
(1) モデルパラメータθ ( 0 ) \theta^{(0)}( 0 )、反復を開始します。
(2) ステップ E:θ ( i ) \theta^{(i)}(i)为第 i i i反復パラメータθ \thetai+1 i+1におけるθの推定値+1 E 関数を定義し、関数 Q を解きます。
Q ( θ , θ ( i ) ) = EZ [ log ⁡ P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] = ∑ Z log ⁡ P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) Q(\theta,\theta^{(i)})=E_{Z}\left [ \log_{}{P(Y,Z\mid\ theta)}\mid Y,\theta^{(i)} \right ] =\sum_{Z}^{}\log_{}{P(Y,Z\mid\theta)}P(Z|Y,\シータ^{(i)})Q ( θ ,( i ) )=EZ[ログ_P ( Y ,Zやあ( i ) ]=Zログ_P ( Y ,Zi ) P ( Z Y (i))
其中 P ( Z ∣ Y , θ ( i ) ) P(Z|Y,\theta^{(i)}) P ( Z Y ( i ) )は与えられた観測データYYYと現在のパラメーター推定値θ ( i ) \theta^{(i)}( i )の場合、隠し変数データZZZの条件付き確率分布。E ステップの鍵となるのはこの Q 関数です。これは、完全なデータの対数尤度関数log ⁡ P ( Y , Z ∣ θ ) \log_{}{P(Y,Z\mid\theta)} としてログ_P ( Y ,Z与えられた観測データYYについてのθ )Yと現在のパラメータθ ( i ) \theta^{(i)}( i )の場合、未観測データZZZの条件付き確率分布。
(3) M ステップ: Q 関数を最大化するθ \thetaθi + 1 i+1+1回の反復θ ( i + 1 ) \theta^{(i+1)}( i + 1 )
θ ( i + 1 ) = argmax θ Q ( θ , θ ( i ) ) \theta^{(i+1)}=\underset{\theta}{argmax}Q(\theta,\シータ^{(i)})( i + 1 )=最大_ _ _Q ( θ ,( i ) )
(4) 収束するまでステップ E とステップ M を繰り返します。

EM アルゴリズムのプロセスから、重要なのは E ステップで Q 関数を決定することであることがわかります。Eステップはモデルパラメータを固定した条件で隠れ状態変数分布を推定し、Mステップは隠れ変数を固定してモデルパラメータを推定します。この 2 つは、アルゴリズムが収束するまで対話的に実行されます。

EM アルゴリズムの動的反復プロセス:
画像の説明を追加してください

3 スリーコインモデル

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

4 numpyをベースにしたスリーコインモデルの実現

import numpy as np

## EM算法过程定义
def em(data, thetas, max_iter=50, eps=1e-3): # data观测数据,thetas初始化的估计参数值,eps收敛阈值

    ll_old = 0 # 初始化似然函数值
    for i in range(max_iter):
        # E步:求隐变量分布
        log_like = np.array([np.sum(data*np.log(theta), axis=1) for theta in thetas]) # 对数似然 2*5
        like = np.exp(log_like) # 似然 2*5
        ws = like/like.sum(0) # 隐变量分布 2*5
        ll_new = np.sum([w*l for w, l in zip(ws, log_like)]) # 期望

        # M步:更新参数值
        vs = np.array([w[:, None] * data for w in ws]) # 概率加权 2*5*2
        thetas = np.array([v.sum(0)/v.sum() for v in vs]) # 2*2

        # 打印结果
        print(f'Iteration:{
      
      i+1}')
        print(f'theta_B = {
      
      thetas[0,0]:.2}, theta_C = {
      
      thetas[1,0]:.2}, {
      
      ll_new}')

        # 满足条件退出迭代
        if np.abs(ll_new - ll_old) < eps:
            break
        ll_old = ll_new
    
    return thetas

EM アルゴリズムは、スリーコイン問題を解決します。

# 观测数据,5次独立实验,每次试验10次抛掷的正反面次数
observed_data = np.array([(5, 5), (9, 1), (8, 2), (4, 6), (7, 3)]) # 比如第一次试验为5次正面5次反面
# 初始化参数值,硬币B出现正面的概率0.6,硬币C出现正面的概率为0.5
thetas = np.array([[0.6, 0.4], [0.5, 0.5]])
# EM算法寻优
thetas = em(observed_data, thetas, max_iter=30)
thetas
Iteration:1
theta_B = 0.71, theta_C = 0.58, -32.68721052517165
Iteration:2
theta_B = 0.75, theta_C = 0.57, -31.258877917413145
Iteration:3
theta_B = 0.77, theta_C = 0.55, -30.760072598843628
Iteration:4
theta_B = 0.78, theta_C = 0.53, -30.33053606687176
Iteration:5
theta_B = 0.79, theta_C = 0.53, -30.071062062760774
Iteration:6
theta_B = 0.79, theta_C = 0.52, -29.95042921516964
Iteration:7
theta_B = 0.8, theta_C = 0.52, -29.90079955867412
Iteration:8
theta_B = 0.8, theta_C = 0.52, -29.881202814860167
Iteration:9
theta_B = 0.8, theta_C = 0.52, -29.873553692091832
Iteration:10
theta_B = 0.8, theta_C = 0.52, -29.870576075992844
Iteration:11
theta_B = 0.8, theta_C = 0.52, -29.86941691676721
Iteration:12
theta_B = 0.8, theta_C = 0.52, -29.868965223428773

array([[0.7967829 , 0.2032171 ],
       [0.51959543, 0.48040457]])

アルゴリズムは 7 回目の反復で収束し、最終的にコイン B とコイン C の表が現れる確率はそれぞれ 0.80 と 0.52 になります。

Notebook_Github アドレス

おすすめ

転載: blog.csdn.net/cjw838982809/article/details/131969878