天天看點

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

           最大似然估計是機率論中常常涉及到的一種統計方法。大體的思想是,在知道機率密度f的前提下,我們進行一次采樣,就可以根據f來計算這個采樣實作的可能性。當然最大似然可以有很多變化,這裡實作一種簡單的,實際項目需要的時候可以再更改。

           這裡實作的是特别簡單的例子如下(摘自wiki的最大似然)

考慮一個抛硬币的例子。假設這個硬币正面跟反面輕重不同。我們把這個硬币抛80次(即,我們擷取一個采樣

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

并把正面的次數記下來,正面記為H,反面記為T)。并把抛出一個正面的機率記為

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

,抛出一個反面的機率記為

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

(是以,這裡的

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

即相當于上邊的

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

)。假設我們抛出了49個正面,31個反面,即49次H,31次T。假設這個硬币是我們從一個裝了三個硬币的盒子裡頭取出的。這三個硬币抛出正面的機率分别為

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分
【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

.這些硬币沒有标記,是以我們無法知道哪個是哪個。使用最大似然估計,通過這些試驗資料(即采樣資料),我們可以計算出哪個硬币的可能性最大。這個似然函數取以下三個值中的一個:

<dl><dd><dl><dd></dd></dl></dd></dl>

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

我們可以看到當

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

時,似然函數取得最大值。這就是

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

的最大似然估計。

          有一點要提的是,因為用到了階乘,關于階乘問題本來想到的方法是用遞歸來實作。但是google了一下發現其實python的reduce方法用起來更加友善,一句話就解決的。

完整工程:

實作效果,對應上面的例子,當H=49,T=31,是P=2/3機率的可能性

【機器學習算法-python實作】最大似然估計(Maximum Likelihood)1.背景2.實作部分

/********************************

* 本文來自部落格  “李博Garvin“

******************************************/