日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习之十大经典算法(九)EM算法

發(fā)布時(shí)間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习之十大经典算法(九)EM算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


EM算法

? ? ? ? ?一、EM算法簡(jiǎn)介:

EM 算法是DempsterLaindRubin1977年提出的求參數(shù)極大似然估計(jì)的一種方法,它可以從非完整數(shù)據(jù)集中對(duì)參數(shù)進(jìn)行MLE估計(jì),是一種非常簡(jiǎn)單實(shí)用的學(xué)習(xí)算法。這種方法可以廣泛地應(yīng)用于處理缺損數(shù)據(jù)、截尾數(shù)據(jù)以及帶有噪聲等所謂的不完全數(shù)據(jù)。具體地說,我們可以利用EM算法來填充樣本中的缺失數(shù)據(jù)、發(fā)現(xiàn)隱藏變量的值、估計(jì)HMM中的參數(shù)、估計(jì)有限混合分布中的參數(shù)以及可以進(jìn)行無監(jiān)督聚類等等。

最大期望算法(Expectation Maximization Algorithm,又譯為:期望最大化算法),是一種迭代算法,用于含有隱變量(hidden variable)的概率參數(shù)模型的最大似然估計(jì)或極大后驗(yàn)概率估計(jì)。

在統(tǒng)計(jì)計(jì)算中,最大期望(EM)算法是在概率(probabilistic)模型中尋找參數(shù)最大似然估計(jì)或者最大后驗(yàn)估計(jì)的算法,其中概率模型依賴于無法觀測(cè)的隱藏變量(Latent Variable)。最大期望經(jīng)常用在機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺的數(shù)據(jù)聚類(Data Clustering)領(lǐng)域。

最大期望算法經(jīng)過兩個(gè)步驟交替進(jìn)行計(jì)算,第一步是計(jì)算期望(E),也就是將隱藏變量象能夠觀測(cè)到的一樣包含在內(nèi)從而計(jì)算最大似然的期望值;另外一步是最大化(M),也就是最大化在 E 步上找到的最大似然的期望值從而計(jì)算參數(shù)的最大似然估計(jì)。M 步上找到的參數(shù)然后用于另外一個(gè) E 步計(jì)算,這個(gè)過程不斷交替進(jìn)行。

二、基本步驟(具體公式及推導(dǎo),讀者參考其他文獻(xiàn)):

  • 參數(shù)初始化

    對(duì)需要估計(jì)的參數(shù)進(jìn)行初始賦值,包括均值、方差、混合系數(shù)以及期望。

  • E-Step計(jì)算

    利用概率分布公式計(jì)算后驗(yàn)概率,即期望。

  • M-step計(jì)算

    重新估計(jì)參數(shù),包括均值、方差、混合系數(shù)并且估計(jì)此參數(shù)下的期望值。

  • 收斂性判斷

    將新的與舊的值進(jìn)行比較,并與設(shè)置的閾值進(jìn)行對(duì)比,判斷迭代是否結(jié)束,若不符合條件,則返回到第2步,重新進(jìn)行計(jì)算,直到收斂符合條件結(jié)束。

  • ? ? 三、python實(shí)現(xiàn)EM算法過程,下面以投硬幣為例,供讀者研究:

    TEST=[[5,5],[9,1],[8,2],[4,6],[7,3]];

    #投出來的結(jié)果,前面是正面向上的次數(shù),每組結(jié)果后面數(shù)字表示反面向上的次數(shù)。

    #由于每次投幣要不選擇A或者B,且僅從單個(gè)樣本數(shù)據(jù),無法獲知,EM算法的主要目標(biāo)是:通過大量計(jì)算和統(tǒng)計(jì),將數(shù)據(jù)分離或?qū)ふ译[含變量。

    print(TEST)#整個(gè)考慮可以從正面入手,反面配合。

    def P(sA,sB,t1,t2):???

    ??? #s是初始的概率,t1取正面的個(gè)數(shù);t2取反面的個(gè)數(shù),以概率密度為準(zhǔn)。

    ???PA=Cmn(t1+t2,t1)*(sA**t1)*((1-sA)**t2) #計(jì)算A出現(xiàn)的概率。

    ???PB=Cmn(t1+t2,t1)*(sB**t1)*((1-sB)**t2) #計(jì)算B出現(xiàn)的概率。

    ???return round(PA/(PA+PB),2)???? #求出新的概率值,然后根據(jù)這個(gè)概率值進(jìn)行后面期望值的計(jì)算;且保留2位有效數(shù)字。

    def fac(n):#階乘。

    ??? f=1

    ??? fory in range(2,n+1):

    ???????f=f*y

    ???return f

    def Cmn(m,n):#先定義cmn后面利用這個(gè)概率密度函數(shù),會(huì)使用排列組合關(guān)系。當(dāng)Cmn=Cmm-n。減少計(jì)算量。

    ???s=m-n

    ??? ifs<n:

    ???????n=s

    ???f=1;t=m

    ??? fory in range(0,n):

    ???????f=f*t

    ???????t=t-1

    ???return f/fac(n)

    def CoinAB(oldoA,oldoB):? #計(jì)算期望值,通過一次期望值的求解,再重新迭代概率值。

    ???UA1=0;UA2=0;?? ????#UA1UA2A硬幣投出的期望值。

    ???t3=0;t4=0;t5=0;t6=0;? #t3t4t5t6都是為計(jì)算硬幣AB的期望值。

    ??? fory in TEST:??????? ?#遍歷所有樣本數(shù)據(jù)。

    ???????UA1,UA2=y???????? #取當(dāng)前值,前面表示正面,后面表示反面。

    ???????oA=P(oldoA,oldoB,UA1,UA2)? #計(jì)算出出A硬幣的概率。

    ???????print(oA,1-oA)????

    ???????t3=t3+UA1*round(oA,2)??????? #計(jì)算A期望值(針對(duì)正面這個(gè)事實(shí)開始討論)

    ???????t4=t4+UA2*round(oA,2)

    ???????t5=t5+UA1*round((1-oA),2)??? #計(jì)算B期望值(針對(duì)正面這個(gè)事實(shí)開始討論)

    ???????t6=t6+UA2*round((1-oA),2)?????

    ???return round(t3/(t3+t4),2),round(t5/(t5+t6),2)? #返回迭代新一輪的AB的概率。

    def EM(oA,oB):

    ???y=0;? #計(jì)迭代次數(shù)。

    ???while(1):

    ???????y=y+1

    ???????oldoA=oA;oldoB=oB?????? #先存儲(chǔ)迭代數(shù)據(jù),為了計(jì)算收斂值,結(jié)束條件。

    ???????oA,oB=CoinAB(oldoA,oldoB)? #分別賦值,為了下次使用。

    ???????print("----y={},oA={},oB={}".format(y,oA,oB))

    ???????if (oldoA-oA)**2+(oldoB-oB)**2<0.005:#自己設(shè)置收斂條件,目的為終止循環(huán)。

    ???????????break

    ???print("oA=",oA,"oB=",oB)???

    #oA,oB=eval(input("請(qǐng)輸入初始值-oA,oB,逗號(hào)隔開:\n"))

    oA=0.6

    oB=0.4

    EM(oA,oB)

    大家,加油!

    總結(jié)

    以上是生活随笔為你收集整理的机器学习之十大经典算法(九)EM算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。