1. 程式人生 > >機器學習之概率分佈1

機器學習之概率分佈1

機器學習-概率分佈-伯努利分佈

概率論在機器學習領域發揮了重要的作用。目前機器學習的很多方法本質上是統計學習,而統計學習的本質則是概率論。在概率論中概率分佈是一個非常重要的工具。概率分佈 p(x) 描述的是隨機變數 x 的概率密度分佈。
首先介紹最簡單的一種分佈-伯努利分佈。變數 x{0,1} 即變數 x 要麼為 1 要麼為 0。真實世界中的一個例子是拋硬幣,設硬幣正面朝上表示 1, 反面朝上表示為 0。假設硬幣經過了特定設計,那麼正面朝上的概率和反面朝上的概率是不一樣的,設正面朝上的概率為μ,0<μ<1。那麼我們拋一次硬幣,正面朝上的概率可表示為:

p(x=1|μ)=u
同理,反面朝上的概率為:
p
(x=0|μ)=1u

因此,變數x的概率可寫為:
p(x)=ux(1u)1x
假設我們拋硬幣拋了N次,得到了N次結果D={x1,x2,,xN},那麼這些觀測變數的似然為:
p(D|μ)=n=1Np(xn|μ)=n=1Nuxn(1μ)1xn
我們可以通過最大似然來估計概率分佈的引數μ。最大化似然等價於最大化對數似然。對上述求對數
lnp(D|μ)=n=1N{xnlnμ+(1xn)ln(1μ)}
最大化上面的對數似然就可以得到引數μ的最大似然估計。具體過程為:lnp(D|μ)mu求導並令其為0,可得:
0μ==n=1Nxn1μn=1N(1xn)11μ1N
n=1Nxn

我們用python來實現上述的引數估計過程,用scipy包中的bernoulli分佈來生成樣本,再根據這些樣本估計bernoulli分佈的引數。下面的程式碼表示bernoulli分佈的引數為0.32,我們用這個分佈生成了10000個樣本。再用這10000個樣本估計該分佈的引數。看看估計出來的引數是多少。減少生成樣本的個數(size),重新估計引數,看有什麼變化。

程式碼

估計伯努利分佈的引數:

from scipy.stats import bernoulli,poisson,norm,expon
import numpy
X=bernoulli.rvs(0.32,size=10000) #根據伯努利分佈來生成樣本#
mu=numpy.mean(X)#用樣本來估計引數# print(mu)