最大似然估計
公司年會的抽獎環節需要一個抽獎程序,部門A承擔了這個抽獎程序的編寫。抽獎結果出來后,發現100個獎項中的35個都被部門A的成員抽到了,而其它部門的中獎數量與與部門的人數占比是一致的;但是部門A的成員人數只占公司總人數的10%。此時大家肯定會認為抽獎程序是不公平的,並且偏向了部門A。
這里涉及了概率與統計的兩種應用,假設檢驗和最大似然估計。
我們想當然地認為抽獎程序是公平的,那么每個人抽到獎項的概率是一樣的,最可能出現的抽獎結果是每個部門抽到的獎項與部門的人數占比是一致的,至少不會差異太。這就是假設檢驗的零假設。零假設給出了各種情況出現的概率,如果出現概率極低的情況出現了就可以否定零假設,此處就是否定了程序是公平的假設。也就是說認為程序是不公平的就是假設檢驗的應用。
在知道A部門中獎概率為35%的情況下,對抽象程序的真實情況進行了推測——偏向部門A。因為直覺上我們認為只有程序偏向部門A才能說得通,才最可能導致這個結果。這就是極大似然估計的一種應用。
似然函數與概率函數
“最大似然估計”中的最大似然的意思是,在給定的分布模型下這個結果出現的概率最大,估計的意思就是求得此時分布模型的參數。可見似然也是概率,之所以叫做似然只是一種約定。通常我們說概率的時候,表示的是不同的結果在分布模型下的取值。此時結果已經出現了,如果仍然采用在結果出現之前給定的參數,這個結果的概率就是確定的。通過假設檢驗知道了之前給定的參數是不對的,需要估計新的參數,也就是將參數當作未知的。對於不同的參數,結果將會取得不同的概率值。可見似然函數與概率函數的模型是一樣的,區別只在於將誰看作變量,將誰看作參數。
如果將概率函數記作\(p(x;\theta)\),那么似然函數應當記作\(p(\theta;x)\),此種函數記法中分號左側的是變量右側是參數。對於概率函數更一般的記法為\(p(x|\theta)\),此時似然函數也記作\(p(x|\theta)\),這實際上是條件概率的記法,將參數\(\theta\)視作已經出現的條件。
為什么參數可以視作先驗條件這件事先不管,先說說為什么概率函數和似然函數用條件概率記法時都是\(p(x|\theta)\)?
因為概率函數和似然函數都表示的是在參數條件\(\theta\)成立的條件下,結果\(x\)出現的概率。而\(p(\theta|x)\)表示將參數視作先驗條件時,條件\(\theta\)的后驗概率,意義為在\(x\)出現后對\(\theta\)概率的再評估。根據貝葉斯公式,有:
顯然\(p(\theta|x)\)和\(p(x|\theta)\)的函數模型是不一樣的。(在貝葉斯公式中\(p(x)\)表示在所有需要考察的不同\(\theta\)出現時,\(x\)出現的概率總和。\(p(\theta)\)表示不同\(\theta\)出現的概率。如果需要考察的\(\theta\)就是全部可能的\(\theta\),那么\(\int{p(x)}d_x=1\),仍然有\(p(x)\le1\)。通常套用貝葉斯公式時,都有\(p(x)<1\)。如果\(p(x)=1\),說明\(x\)只有一個取值,這個取值就是\(x\)的全體,\(\theta\)屬於\(x\)的子事件時\(p(x|\theta)=1\),否則\(p(x|\theta)=0\)。)
回到文章開頭給出的例子,此時似然函數或者概率函數應該是什么樣的呢?如果不考察部門,別人中獎了,你沒中獎,並不能說明抽獎程序對你不公平;因此單考察每個人的中獎情況時沒有任何可用的信息對程序的公平性做出判斷。將人歸屬的部門納入考慮時,我們做出了程序在部門之間的公平性判斷,所基於的是部門A實際中獎人數與期望的中獎人數不一致。因而我們的似然函數或者概率函數應該是部門A的中獎人數在給定的部門中獎概率\(\theta\)之下的概率。
如公式所示,這是一個典型的二項分布。對應到經典的箱子和球時,可以設定部門A為紅球,其它部門為白球,已經知道紅球和白球的比率為\(\theta\),即每次抽獎抽到紅球的概率為\(\theta\)。從箱子里一次取100個球出來,取到\(x\)個紅球的概率就是上式。
當然實際抽獎時是一個一個的抽的,一般都相當於無放回的從箱子里取球。無放回的取球和有放回的取球對於考察某一個球這樣的個體來說是有區別的,此時考察的是某一類球這個群體的個數而不是個體,因而是否有放回是無關緊要的。可以換一種思路,無放回的從箱子里一個一個的取100個球,與用一個大鏟子一下子鏟出來100個球,效果是一樣的。但是如果考慮了群體中個體的組合關系,也就是還要考察某種球是第幾次抽到的,就不是二項分布了。為了簡單起見,就假裝是一次把100個獎全抽了吧,這相當於只進行了一次二項分布實驗。
似然函數的最大值
似然函數仍然是函數,約定了先驗條件\(\theta\)的不同取值與\(x\)的某個確定結果的概率之間的映射關系。為了解出\(\theta\)的取值,必須要有一個概率。我們確實也有了一個概率,將35和0.1帶入上式求出來的,再將這個概率帶入求出來的\(\theta\)仍然等於0.1,這樣做是沒有任何意義的。就是因為認為將35和0.1帶入上式求出來的概率不可信,太低了,才要重新求解參數\(\theta\)的取值。
既然認為根據先驗參數解出來的概率太低了,那么就應該用更大的概率帶入反算\(\theta\)。到底應該是多大呢?就讓這個概率取到它能取到的最大值吧。對應到我們人類的直覺就是,如果某個事件發生了,那么這個事件應該是所有可能發生事件中概率最大的那個。但是這個最大值是未知的,但是通過微積分的知識可以知道,如果在某個區間內函數圖像是凸的,那么最大值和極大值取在同一處,且如果可導的話該處的導數為零。因而我們可以對似然函數求導,令其等於零,然后解出\(\theta\)。這也是最大似然估計也被稱作極大似然估計的原因。
要能夠利用上面的公式,似然函數必須要滿足幾個條件。
- 似然函數在\(\theta\)的取值區間內函數圖形是凸的(凹函數);
- 似然函數在\(\theta\)的取值區間內處處可導;
- 令似然函數的導數等於零有解析解。
如果似然函數的函數圖像是凸的,尖點處不可導,導數等於零沒有解析解,可以設目標函數為\(-p(x|\theta)\),然后用梯度下降算法找到似然概率取到最大值時的\(\theta\)。比如似然概率函數的圖像是一個三角尖。

如果似然函數的函數圖像是一條水平線,即\(x\)是均勻分布的,此時是不能使用該方法求解參數的,因為不管\(\theta\)取任何值,\(x\)的概率都是一樣的。對於均勻分布的假設,只能通過假設檢驗否定這個假設,而不能用最大似然估計求解分布模型的參數。對於本文給出的例子,實際上隱含了一個均勻分布,那就是每個人中間的概率是一樣的。一般遇到這種情況,可以將原始的分布進行分段,然后轉換成伯努利分布,進而轉換成二項分布。此處,我們就是這么做的。最終得到的結果是分段的不均勻情況。
多樣本與乘法公式
在前面講述中,我們是通過實驗或者觀察取得了\(x\)某一個結果\(x_i\)(樣本),將其帶入\(p(x|\theta)\)得到似然函數。僅通過一個樣本對分布模型的參數進行估計未免過於武斷。更多情況是,進行多次實驗或者觀察多次,此時將會得到多個樣本。此時該如何操作呢,顯然不能讓每個樣本都取到分布能出現的最大值。此時需要換一種看待問題的方式,將多個樣本看作一個事件\(X\),這個事件的意義是觀察到樣本都發生。那么\(X\)的概率函數可以套用乘法公式。
如果\(x\)是離散型的,\(p(x|\theta)\)就是\(x\)的發生概率,當抽得的樣本為\(x_1,x_2,...,x_n\)時,樣本總體\(X\)的發生概率為:
因為\(x_1,x_2,...,x_n\)都是已知的,將\(\theta\)當做未知的變量,所以這個也就是似然函數。
如果\(x\)是連續型的,\(p(x|\theta)\)不是\(x\)的發生概率,給樣本值\(x_1,x_2,...,x_n\)加上一個鄰域\(dx_1,dx_2,...,dx_n\),其中\(dx_i>0\),又足夠小以至於所有的\(\left[x_i,x_i+dx_i \right]\)沒有重疊。將抽取到樣本\(x_i\)看作“樣本的取值落在范圍\(\left[x_i,x_i+dx_i \right]\)中”這樣一個事件\(X_i\)發生,那么對應的概率為
進而\(X_i\)的總體發生概率為
又由於\(dx_i\)是給定的微小正常數,不改變“令導數為零”的解,因而連續型的似然函數也被寫做(實際上也不改變函數的單調性,使用梯度下降算法時似然函數也可以使用同一個)
知道了似然函數,接下來就可以直接套用公式解了。讓我們再次回到本文開頭給出的例子,繼續轉換對問題的看待方式。就按照實際抽獎情況來看待,相當於無放回的取球。假設公司總員工數量為100吧,部門A有10個人,此時第一次抽到部門A的概率為0.1,那么第\(n\)次的概率是多少?不妨先看看第2次的。第二次的概率由兩種情況構成,第一次抽到部門A和第一次沒抽到部門A。
第一次抽到部門A時,第二次還抽到部門A的概率為
第一次抽到部門B時,第二次抽到部門A的概率為
把他們加到一起,並提取公因式得到
第三次抽取到時,前兩次的抽取有\({\begin{pmatrix} 2 \\ 1 \\ \end{pmatrix}}^2\)種情況;第\(n(n\le10)\)次抽取時有\({\begin{pmatrix} 2 \\ 1 \\ \end{pmatrix}}^{n-1}\)中情況,窮舉顯然是不合適的,不過觀察式子的結構,可以相信第\(n\)次抽取時抽到部門A的概率仍然為0.1,不相信的可以自己動手多算算,算多了就信了。
設每次抽到部門A這個事件為1,其概率為\(\theta\),沒抽到部門A這個事件為0,其概率就是\(1-\theta\),概率函數如下
可以看出每一次抽獎都是一個典型的伯努利分布。可能有人會對這個公式表示異議,因為某次抽獎的結果出來之后,剩下的人抽獎結果肯定都會增加的啊。確實是這樣的,在已經知道抽獎結果的情況下,再判斷剩余人的抽獎概率已經不屬於概率(不准確)了,是后驗概率。我們現在建立的是抽獎之前對中獎情況預估的概率模型,抽獎程序不是在抽獎過程中編寫的不是,而是在抽獎之前編寫的吧。最終檢驗的也是抽獎之前對中獎情況預估的概率模型,最終估計的也是抽獎之前對中獎情況預估的概率模型的先驗參數。
將抽獎過程看作多次伯努利實驗時,就不能僅僅考慮群體個數了,還需要考慮群體中個體的組合關系。按照時間先后的順序抽獎了100次,那么個體的組合關系也只有一種,也就是100個伯努利實驗結果發生了,那么他們的聯合概率函數應該應用乘法公式。
設抽到部門A的個數為\(n\),那么100次伯努利實驗結果的聯合概率函數就是
此時用最大似然估計將會估計到和二項分布一樣的參數,但是有100次實驗結果,是不是能把我們對\(\theta\)估計結果的信息提升100備呢!
PS: 二項分布是不考慮群體中個體的組合關系的多重伯努利分布。
