1. 程式人生 > 其它 >簡單易學的機器學習演算法——EM演算法

簡單易學的機器學習演算法——EM演算法

一、機器學習中的引數估計問題

二、EM演算法簡介

    在上述存在隱變數的問題中,不能直接通過極大似然估計求出模型中的引數,EM演算法是一種解決存在隱含變數優化問題的有效方法。EM演算法是期望極大(Expectation Maximization)演算法的簡稱,EM演算法是一種迭代型的演算法,在每一次的迭代過程中,主要分為兩步:即求期望(Expectation)步驟和最大化(Maximization)步驟。

三、EM演算法推導的準備

(圖片來自參考文章1)

注:若函式

是凹函式,上述的符號相反。

3、數學期望

四、EM演算法的求解過程   

五、EM演算法的收斂性保證

六、利用EM演算法引數求解例項

   

Python程式碼

#coding:UTF-8
'''
Created on 2015年6月7日

@author: zhaozhiyong
'''
from __future__ import division
from numpy import *
import math as mt
#首先生成一些用於測試的樣本
#指定兩個高斯分佈的引數,這兩個高斯分佈的方差相同
sigma = 6
miu_1 = 40
miu_2 = 20

#隨機均勻選擇兩個高斯分佈,用於生成樣本值
N = 1000
X = zeros((1, N))
for i in xrange(N):
    if random.random() > 0.5:#使用的是numpy模組中的random
        X[0, i] = random.randn() * sigma + miu_1
    else:
        X[0, i] = random.randn() * sigma + miu_2

#上述步驟已經生成樣本
#對生成的樣本,使用EM演算法計算其均值miu

#取miu的初始值
k = 2
miu = random.random((1, k))
#miu = mat([40.0, 20.0])
Expectations = zeros((N, k))

for step in xrange(1000):#設定迭代次數
    #步驟1,計算期望
    for i in xrange(N):
        #計算分母
        denominator = 0
        for j in xrange(k):
            denominator = denominator + mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
        
        #計算分子
        for j in xrange(k):
            numerator = mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
            Expectations[i, j] = numerator / denominator
    
    #步驟2,求期望的最大
    #oldMiu = miu
    oldMiu = zeros((1, k))
    for j in xrange(k):
        oldMiu[0, j] = miu[0, j]
        numerator = 0
        denominator = 0
        for i in xrange(N):
            numerator = numerator + Expectations[i, j] * X[0, i]
            denominator = denominator + Expectations[i, j]
        miu[0, j] = numerator / denominator
        
    
    #判斷是否滿足要求
    epsilon = 0.0001
    if sum(abs(miu - oldMiu)) < epsilon:
        break
    
    print step
    print miu
    
print miu

最終結果

[[ 40.49487592  19.96497512]]

參考文章:

1、(EM演算法)The EM Algorithm (http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html)

2、數學期望(http://wenku.baidu.com/view/915a9c1ec5da50e2524d7f08.html?re=view)