【机器学习算法-python实现】最大似然估计(Maximum Likelihood)
生活随笔
收集整理的這篇文章主要介紹了
【机器学习算法-python实现】最大似然估计(Maximum Likelihood)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.背景
最大似然估計是概率論中常常涉及到的一種統計方法。大體的思想是,在知道概率密度f的前提下,我們進行一次采樣,就可以根據f來計算這個采樣實現的可能性。當然最大似然可以有很多變化,這里實現一種簡單的,實際項目需要的時候可以再更改。 ? ? ? ?博主是參照wiki來學習的,地址請點擊我 這里實現的是特別簡單的例子如下(摘自wiki的最大似然)離散分布,離散有限參數空間[編輯]
考慮一個拋硬幣的例子。假設這個硬幣正面跟反面輕重不同。我們把這個硬幣拋80次(即,我們獲取一個采樣并把正面的次數記下來,正面記為H,反面記為T)。并把拋出一個正面的概率記為,拋出一個反面的概率記為(因此,這里的即相當于上邊的)。假設我們拋出了49個正面,31個反面,即49次H,31次T。假設這個硬幣是我們從一個裝了三個硬幣的盒子里頭取出的。這三個硬幣拋出正面的概率分別為,?,?.這些硬幣沒有標記,所以我們無法知道哪個是哪個。使用最大似然估計,通過這些試驗數據(即采樣數據),我們可以計算出哪個硬幣的可能性最大。這個似然函數取以下三個值中的一個:
我們可以看到當時,似然函數取得最大值。這就是的最大似然估計。
2.實現部分
有一點要提的是,因為用到了階乘,關于階乘問題本來想到的方法是用遞歸來實現。但是google了一下發現其實python的reduce方法用起來更加方便,一句話就解決的。 ?def Factorial(x):return reduce(lambda x,y:x*y,range(1,x+1))
? ? ?? 完整工程: ''' Created on 2014-8-22 @author: Garvin Maximum Likelihood theory practicThis code is base on the http://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1 ''' w=2.0/3 h=49 t=31def DefineParam():H=hT=treturn H,Tdef MaximumLikelihood(p=w):H,T=DefineParam()f1=Factorial(H+T)/(Factorial(H)*Factorial(T))f2=(p**H)*((1.0-p)**T)return f1*f2def Factorial(x):return reduce(lambda x,y:x*y,range(1,x+1))
實現效果,對應上面的例子,當H=49,T=31,是P=2/3概率的可能性
代碼地址:請點擊我
/********************************
* 本文來自博客 ?“李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
總結
以上是生活随笔為你收集整理的【机器学习算法-python实现】最大似然估计(Maximum Likelihood)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【git学习五】git基础之git分支
- 下一篇: 【Android-tips】 Unabl