天天看点

【机器学习算法-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“

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