最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)EM算法實(shí)例代碼

 更新時(shí)間:2020年10月04日 08:31:46   作者:程序員大本營(yíng)  
這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)EM算法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

EM算法實(shí)例

通過(guò)實(shí)例可以快速了解EM算法的基本思想,具體推導(dǎo)請(qǐng)點(diǎn)文末鏈接。圖a是讓我們預(yù)熱的,圖b是EM算法的實(shí)例。

這是一個(gè)拋硬幣的例子,H表示正面向上,T表示反面向上,參數(shù)θ表示正面朝上的概率。硬幣有兩個(gè),A和B,硬幣是有偏的。本次實(shí)驗(yàn)總共做了5組,每組隨機(jī)選一個(gè)硬幣,連續(xù)拋10次。如果知道每次拋的是哪個(gè)硬幣,那么計(jì)算參數(shù)θ就非常簡(jiǎn)單了,如

下圖所示:

如果不知道每次拋的是哪個(gè)硬幣呢?那么,我們就需要用EM算法,基本步驟為:

  1、給θ_AθA​和θ_BθB​一個(gè)初始值;

  2、(E-step)估計(jì)每組實(shí)驗(yàn)是硬幣A的概率(本組實(shí)驗(yàn)是硬幣B的概率=1-本組實(shí)驗(yàn)是硬幣A的概率)。分別計(jì)算每組實(shí)驗(yàn)中,選擇A硬幣且正面朝上次數(shù)的期望值,選擇B硬幣且正面朝上次數(shù)的期望值;

  3、(M-step)利用第三步求得的期望值重新計(jì)算θ_AθA​和θ_BθB​;

  4、當(dāng)?shù)揭欢ù螖?shù),或者算法收斂到一定精度,結(jié)束算法,否則,回到第2步。

計(jì)算過(guò)程詳解:初始值θ_A^{(0)}θA(0)​=0.6,θ_B^{(0)}θB(0)​=0.5。

由兩個(gè)硬幣的初始值0.6和0.5,容易得出投擲出5正5反的概率是p_A=C^5_{10}*(0.6^5)*(0.4^5)pA​=C105​∗(0.65)∗(0.45),p_B=C_{10}^5*(0.5^5)*(0.5^5)pB​=C105​∗(0.55)∗(0.55), p_ApA​/(p_ApA​+p_BpB​)=0.449, 0.45就是0.449近似而來(lái)的,表示第一組實(shí)驗(yàn)選擇的硬幣是A的概率為0.45。然后,0.449 * 5H = 2.2H ,0.449 * 5T = 2.2T ,表示第一組實(shí)驗(yàn)選擇A硬幣且正面朝上次數(shù)和反面朝上次數(shù)的期望值都是2.2,其他的值依次類推。最后,求出θ_A^{(1)}θA(1)​=0.71,θ_B^{(1)}θB(1)​=0.58。重復(fù)上述過(guò)程,不斷迭代,直到算法收斂到一定精度為止。

這篇博客對(duì)EM算法的推導(dǎo)非常詳細(xì),鏈接如下:

https://blog.csdn.net/zhihua_oba/article/details/73776553

Python實(shí)現(xiàn)

#coding=utf-8
from numpy import *
from scipy import stats
import time
start = time.perf_counter()

def em_single(priors,observations):
 """
 EM算法的單次迭代
 Arguments
 ------------
 priors:[theta_A,theta_B]
 observation:[m X n matrix]

 Returns
 ---------------
 new_priors:[new_theta_A,new_theta_B]
 :param priors:
 :param observations:
 :return:
 """
 counts = {'A': {'H': 0, 'T': 0}, 'B': {'H': 0, 'T': 0}}
 theta_A = priors[0]
 theta_B = priors[1]
 #E step
 for observation in observations:
  len_observation = len(observation)
  num_heads = observation.sum()
  num_tails = len_observation-num_heads
  #二項(xiàng)分布求解公式
  contribution_A = stats.binom.pmf(num_heads,len_observation,theta_A)
  contribution_B = stats.binom.pmf(num_heads,len_observation,theta_B)

  weight_A = contribution_A / (contribution_A + contribution_B)
  weight_B = contribution_B / (contribution_A + contribution_B)
  #更新在當(dāng)前參數(shù)下A,B硬幣產(chǎn)生的正反面次數(shù)
  counts['A']['H'] += weight_A * num_heads
  counts['A']['T'] += weight_A * num_tails
  counts['B']['H'] += weight_B * num_heads
  counts['B']['T'] += weight_B * num_tails

 # M step
 new_theta_A = counts['A']['H'] / (counts['A']['H'] + counts['A']['T'])
 new_theta_B = counts['B']['H'] / (counts['B']['H'] + counts['B']['T'])
 return [new_theta_A,new_theta_B]


def em(observations,prior,tol = 1e-6,iterations=10000):
 """
 EM算法
 :param observations :觀測(cè)數(shù)據(jù)
 :param prior:模型初值
 :param tol:迭代結(jié)束閾值
 :param iterations:最大迭代次數(shù)
 :return:局部最優(yōu)的模型參數(shù)
 """
 iteration = 0;
 while iteration < iterations:
  new_prior = em_single(prior,observations)
  delta_change = abs(prior[0]-new_prior[0])
  if delta_change < tol:
   break
  else:
   prior = new_prior
   iteration +=1
 return [new_prior,iteration]

#硬幣投擲結(jié)果
observations = array([[1,0,0,0,1,1,0,1,0,1],
      [1,1,1,1,0,1,1,1,0,1],
      [1,0,1,1,1,1,1,0,1,1],
      [1,0,1,0,0,0,1,1,0,0],
      [0,1,1,1,0,1,1,1,0,1]])
print (em(observations,[0.6,0.5]))
end = time.perf_counter()
print('Running time: %f seconds'%(end-start))

總結(jié)

到此這篇關(guān)于Python實(shí)現(xiàn)EM算法實(shí)例的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)EM算法實(shí)例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你弄懂Python3中的def?__init__

    一文帶你弄懂Python3中的def?__init__

    說(shuō)起基礎(chǔ)的init函數(shù)也是我們的老朋友了,組合函數(shù)的要么是理解又一定的難度,要么是操作方法有復(fù)雜的地方,小編今天要講的def __init()__屬于第一種,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文帶你弄懂Python3中的def?__init__的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python中subprocess模塊的用法詳解

    Python中subprocess模塊的用法詳解

    這篇文章主要介紹了Python中subprocess模塊的用法詳解,subprocess是Python 2.4中新增的一個(gè)模塊,它允許你生成新的進(jìn)程,連接到它們的 input/output/error 管道,并獲取它們的返回狀態(tài)碼,這個(gè)模塊的目的在于替換幾個(gè)舊的模塊和方法,需要的朋友可以參考下
    2023-08-08
  • 詳解用python寫(xiě)一個(gè)抽獎(jiǎng)程序

    詳解用python寫(xiě)一個(gè)抽獎(jiǎng)程序

    這篇文章主要介紹了用python寫(xiě)一個(gè)抽獎(jiǎng)程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 詳解django+django-celery+celery的整合實(shí)戰(zhàn)

    詳解django+django-celery+celery的整合實(shí)戰(zhàn)

    這篇文章主要介紹了詳解django+django-celery+celery的整合實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python unittest框架操作實(shí)例解析

    Python unittest框架操作實(shí)例解析

    這篇文章主要介紹了Python unittest框架操作實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 使用python實(shí)現(xiàn)男神女神顏值打分系統(tǒng)(推薦)

    使用python實(shí)現(xiàn)男神女神顏值打分系統(tǒng)(推薦)

    這篇文章主要介紹了用python做一個(gè)男神女神顏值打分系統(tǒng)(程序分析見(jiàn)注釋),需要的朋友可以參考下
    2019-10-10
  • Python+Opencv實(shí)現(xiàn)圖像匹配功能(模板匹配)

    Python+Opencv實(shí)現(xiàn)圖像匹配功能(模板匹配)

    這篇文章主要為大家詳細(xì)介紹了Python+Opencv實(shí)現(xiàn)圖像匹配功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python中__new__和__init__的區(qū)別與聯(lián)系

    Python中__new__和__init__的區(qū)別與聯(lián)系

    這篇文章主要介紹了Python中__new__和__init__的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2021-05-05
  • Pyhton模塊和包相關(guān)知識(shí)總結(jié)

    Pyhton模塊和包相關(guān)知識(shí)總結(jié)

    文中詳細(xì)整理了關(guān)于Python模塊和包的相關(guān)知識(shí)點(diǎn),剛?cè)腴T(mén)Python的小伙伴們可以學(xué)習(xí)一下,有助于加深Python基礎(chǔ)的理解.而且有詳細(xì)說(shuō)明及代碼示例,需要的朋友可以參考下
    2021-05-05
  • 對(duì)Python 語(yǔ)音識(shí)別框架詳解

    對(duì)Python 語(yǔ)音識(shí)別框架詳解

    今天小編就為大家分享一篇對(duì)Python 語(yǔ)音識(shí)別框架詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12

最新評(píng)論

永胜县| 信丰县| 天水市| 茶陵县| 西乌珠穆沁旗| 贵州省| 株洲县| 万盛区| 罗定市| 枣强县| 永清县| 金塔县| 阳原县| 南乐县| 靖宇县| 姜堰市| 合江县| 射洪县| 南乐县| 武邑县| 清丰县| 视频| 葵青区| 阿尔山市| 特克斯县| 留坝县| 梧州市| 永城市| 云龙县| 河间市| 清河县| 仪征市| 临城县| 磐石市| 广西| 益阳市| 阿荣旗| 东兰县| 滦南县| 搜索| 都昌县|