1. 程式人生 > >06_邏輯迴歸演算法和最大熵模型

06_邏輯迴歸演算法和最大熵模型

  今天是2020年2月12日星期三,現在對學習有點麻木。看了一天的最大熵模型,多少理解了一些內容,在學校看的啥啊真是,要不是寫這個部落格,關鍵的地方真是一點看不出來啊。反思再反思,看書的時候難懂的地方直接翻過去了,現在為了寫出來,多查了很多資料。切忌眼高手低啊,不把模型真正用出來,很難有深入的理解啊。

  本章標題為邏輯斯諦迴歸與最大熵模型,這是兩個部分,不能混為一談。當然了放在一起肯定有李航老師的道理,最後會分析兩者聯絡。最大熵模型還是比較難懂的,這裡僅是記錄我的學習過程,歡迎討論,僅作參考,謝絕採納。


 GitHub:https://github.com/wangzycloud/statistical-learning-method


 邏輯斯諦迴歸模型

引入

  首先要說下,“邏輯斯諦”這個名字真是蠻奇怪的,可能因為我還是比較沒文化吧。腦子裡先入為主,總是想把吳恩達老師CS229上邏輯迴歸演算法的名字安放到這個模型上。所以接下來,都會以“邏輯迴歸”這個名字代替書中的“邏輯斯諦迴歸”。不得不說,該演算法從一個特殊的函數出發,發現了可將輸入變數x的線性函式值轉變為分類類別的概率。

邏輯斯諦分佈

  首先來看一下這個邏輯斯諦分佈和概率密度函式:

  分佈函式屬於邏輯斯諦函式,圖形像一條S型曲線,在中心附近增長較快,在兩端增長速度較慢。形狀引數γ的值越小,中心附近增長越快。 

二項邏輯迴歸模型

  作為分類模型,顧名思義,二項邏輯迴歸模型是一種二分類演算法,由條件概率分佈P(Y|X)表示,隨機變數X取實數,隨機變數Y取值為0或1。

  這裡得出類別結果的過程與樸素貝葉斯演算法類似(這裡強調的是,需要得到P(Y=1)和P(Y=0),兩演算法本身差別很大),每個類別都要求出該類的條件概率,然後比較大小得到分類結果。對於給定的輸入例項x,分別求得P(Y=1|x)和P(Y=0|x),比較兩個條件概率值的大小,將例項x劃分到概率值較大的類中。而感知機、決策樹是直接得到類別。

  接下來,從事件發生機率的角度上,看一下邏輯斯諦函式的特殊性。

  一個事件發生的機率是指該事件發生的概率與不發生的概率的比值,如果事件發生的概率是p,那麼該事件的機率是p/(1-p),其對數機率或logit函式是:

  有了對數機率的函式表達形式,我們將二項邏輯迴歸模型的表示式代入,得到:

  可以發現,輸入例項x與該例項被判斷成Y=1這個類別的對數機率,竟然是線性關係。換句話說,輸出Y=1的對數機率是由輸入x的線性函式決定的,這就是邏輯迴歸模型的來源。正如書中所描述的,換一個角度看,考慮對輸入x進行分類的線性函式w·x,其值域為實數域。擬合引數w,使輸入資料x可以找到一個決策邊界,這個邊界是由對數機率表現出來的。直觀來說,屬於正類的資料,通過w的線性變換,得到一個很大的實數值,因此該資料表現為判斷是正類的對數機率大。通過公式6.5,可以將w·x的線性函式值轉換為概率:

  這時候,線性函式w·x的值越接近正無窮,概率值越接近1;w·x的值越接近負無窮,概率值越接近0,這樣的模型就是邏輯迴歸模型。

模型引數估計

  根據以上描述,我們擁有了新的分類模型,可以將w·x的線性函式值轉化為類別的概率,那麼,我們如何找到分類邊界呢?也就是說,我們現在擁有了輸入x到類別概率的對映模型,可是怎麼保證每個隱射關係都是對的呢?通俗點講,每一個輸入例項x,乘引數向量w之後的線性函式值,轉化為類別後都能夠被正確分類。關鍵的問題,也就是在w,如何對w進行估計?這裡採用極大似然估計。

  似然函式很好理解,進行極大似然估計,需要把每個變量出現的概率連乘起來;連乘式裡的表示式,中括號分開的兩個部分,在同一個例項上,不會同時成立;式一,例項類別yi=1時,左側中括號內概率成立,右側值為1;例項類別yi=0時,右側中括號內概率成立,左側值為1。通過這一個式子,就把兩個類別出現的概率連乘在了一起。

  這樣,尋找合適w的過程(尋找決策邊界)就變成了以對數似然函式為目標的最優化問題,常用的方法是梯度下降法和擬牛頓法。

多項邏輯斯諦迴歸

  涉及到多分類的邏輯迴歸模型,該部分有待深入思考公式,留到開學後。

最大熵模型

引入

  我更喜歡把這部分內容當做原理,說這個模型的具體應用吧,我這個水平還沒有發現。但瞭解過大概思想後,發現這個模型應該在概率模型中處處存在。最大熵最大熵,顧名思義要讓熵最大,延續先前的知識,熵是不確定性的度量,最大熵模型也就是要找出熵最大某個物件。學習之前先提出疑問,比如一個簡單的問題,從哪裡找到熵最大?熵最大的什麼?我剛開始看到這個模型的時候,習慣性的向後翻了翻課本,上來就被數學公式嚇到了(靜下心來發現沒必要這樣),仔細閱讀一遍之後,除了“什麼都沒看懂”之外,什麼都沒懂。

  所以在開始記錄之前,有必要先強調一下,該模型從原理出發,討論的是一個概率模型的學習準則問題。假設現在我們有一個分類問題(必須是概率模型),比如說邏輯迴歸進行分類,我們最後通過比較類別的可能性大小,對新例項做出判斷。我們的學習過程,是找到合適的w,從而讓所有的資料點,能夠得到完美的分類。在邏輯迴歸模型中,我們是通過極大似然估計,來找到合適的w,而現在我們的最大熵模型,反映的是什麼呢?

  有了剛才的例子,其實我們可以發現,訓練集上每一個w代表了一個模型,只不過呢,有的w分類能力很好(最好的被我們用極大似然估計選擇了出來);有的呢,分類能力很差,不被我們採納。本節提到的最大熵模型,就是從滿足條件的模型集合中選出熵最大的模型,我們認為這個熵最大的模型就是最好的模型。簡單點,就是從一堆w中,運用熵最大原理找出這個最合適,分類能力最強的w。

最大熵原理

  最大熵原理認為,學習概率模型時,在所有可能的概率模型中,熵最大的模型是最好的模型,通常用約束條件來確定概率模型的集合。所以,最大熵原理也可以描述成在滿足約束條件的模型集合中選取熵最大的模型,該原理是概率模型學習的一個準則。

  解讀一下這段。首先,我們針對的是類似邏輯迴歸、樸素貝葉斯這樣的概率模型,不是針對感知機這種決策函式模型。其次,熵最大也就是不確定性最大,這好像與我們的目標相悖,畢竟我們是要找到一個明確的分類邊界,現在怎麼又要找不確定性最大的呢?這裡也挺好理解的,我們在什麼情況都不知道的處境下,當然不能偏袒任何一個類別,雨露均沾才能損失最小。如果太過於相信其中一個,萬一是假的不就一敗塗地了嘛,一點後退的餘地都沒有。不偏袒任何一個類別就意味著誰都不信,每個的可能性一樣,這個時候熵最大,這是公知的。另外,在每個類別可能性一樣的前提下得到的模型,對給定例項x進行判斷,這時某類的概率還能較大,不更能說明x應該屬於這類。最後,我們在訓練資料集中學習一個模型,怎麼可能一點前提條件都不知道!多多少少有一些特徵是我們先知道的,或者說是作為已知條件的。我們要學習的模型,就是在已知的這些條件下,找到最合適的分類模型(應用熵最大原理)。

  直觀的,最大熵原理認為要選擇的概率模型首先必須滿足已有的事實,即約束條件。在沒有更多資訊的情況下,那些不確定的部分都是“等可能的”,最大熵原理通過熵的最大化來表示可能性。書中提到,“等可能”不容易操作,而熵則是一個可以優化的數值指標,這裡有待思考(好像事實就是這樣)。看一下例子:

  書中又用了一個幾何例子解釋,正是這個幾何例子,放大了對初學者的不友好。看一下書中的解釋:

  一個點代表一個模型,請問,點在哪裡?整個單純形代表模型集合,請問,是用面積還是邊長?直線的交集對應於滿足所有約束條件的模型集合,請問,直線與直線相交,難道不是個點嗎?最後一句,學習的目的是在可能的模型集合中選擇最優模型,最大熵模型則給出最優模型選擇的一個準則,拜託,這句話說了多少遍了,和這個幾何解釋有什麼關係?不友好就是不友好,雲裡霧裡的(也可能是我沒文化,看不懂數學語言)。可是,如果換一種說法,如下圖:

  不妨讓區域p表示概率模型空間,也就是所有的模型圈在這個三角形區域中(左側);有一個約束條件,我們就畫一條線(右側藍綠色直線);約束條件會把模型限制在不同區域(A、B、C、D),約束條件越多,符合條件的模型越少;假設A區域符合約束條件,之前需要從大範圍的p區域求最優模型,現在需要在小範圍的A區域求解。

最大熵模型的定義

  最大熵原理是統計學習的一般原理,應用到分類問題,得到最大熵模型。給出定義前,我們先來思考一下,按照前邊描述的思想該模型應該有什麼?(1)該模型解決分類問題,要應用在概率模型上,那麼我們的目標就應該類似樸素貝葉斯演算法,用條件概率分佈P(Y|X)表示分類模型。(2)原理部分一直提約束條件,細想一下約束條件可以幫助我們縮小求解範圍,的確符合現實意義,可是要怎麼找到約束條件呢?留疑。(3)要在所有模型中找到熵最大的模型,用什麼熵?衡量模型?(4)如何計算?

  帶著問題,我們系統性的看一下最大熵模型的定義。首先是分類模型的定義:

  分類模型就是我們最後對新資料進行測試的模型,應該是P(Y|X)這個樣子。對於一個二分類的新測試例項x,若第一類的條件概率P(y1|x)=0.7,第二類的條件概率P(y2|x)=0.2,有0.7>0.2,我們認為例項x屬於第一類。接下來我們尋找約束條件,下述內容(除課本內容外)為個人見解,正確性不能保證。

  大膽假設,小心求證,這裡我們借鑑一下樸素貝葉斯的東西,來提出約束條件。我們要做的事情,是找到熵最大的分類模型,分類模型是P(Y|X)條件概率分佈;樸素貝葉斯是種生成模型,它應用X、Y的聯合概率找到生成資料的方式,求解P(Y|X)來計算類別的後驗概率;資料集上存在X、Y的聯合分佈(經驗分佈);資料集上存在X的分佈(經驗分佈);這裡隱約存在一種關係:P(A,B)=P(Y|X)P(X);在資料集固定的情況下,我們已知P(X,Y)、P(X)經驗分佈,要求的熵最大的條件概率P(Y|X)是不是要滿足聯合分佈規律呢?

  答案是一定的,P(A,B)=P(Y|X)P(X)規定了一定存在一個條件概率P(Y|X)分佈,使該式成立。現在我們不知道它具體是什麼,需要我們求解出來,在求解的過程中,我們猜測的所有條件概率分佈,都要滿足這個約束才對。

  約束條件好像是找到了,現在還差個東西。記得我們在素樸貝葉斯演算法中,求過隨機變數X和隨機變數Y同時出現的聯合分佈,那時通過極大似然估計對引數求解,事件X和事件Y同時出現這件事,直接計算聯合分佈了。我們現在的最大熵模型,比較理論化,需要抽象出一個描述聯合分佈的工具,這個工具不幹別的,就是描述資料集中的x、y是否同時存在,是否滿足某一事實,是否具有該特徵。看一下書中內容:

  便於數學形式表達,設計特徵函式來表達隨機變數X與隨機變數Y的取值,同時發生的事實。(這裡插一句,在CRF條件隨機場中,有個定義在最大團上的勢函式,完全可以用來理解這裡的特徵函式;另外,CRF中的勢函式更可以用這裡的特徵函式來理解;LR和CRF的區別值得好好研究,LR中的W是對特徵向量的各個分量進行線性變換,CRF中的W是對定義在最大團上的關聯進行線性變換...嘚啵嘚...嘚啵嘚...)

  在剛才P(A,B)=P(Y|X)P(X)的描述中,是拿聯合分佈當做引子,來理解從哪裡來的約束條件。在實際的模型,並不是硬性從分佈函式相同入手,而是落到具體的數值上(具體的特徵上),讓期望相等作為模型的約束條件(分佈相同,期望相同)。

  這裡是資料集上聯合分佈的期望值。

  這是資料集上的隨機變數X的邊緣分佈與分類模型P(Y|X)乘積的期望值。

  如果分類模型P(Y|X)能夠應用到該資料集上,就可以假設P(A,B)=P(Y|X)P(X)公式兩邊的分佈,對特徵函式f(x,y)的期望值相等。這樣,就可以將公式6.10或公式6.11作為模型學習的約束條件,假設有n個特徵函式,相應的就有n個約束條件。

  帶有約束條件的模型集合我們能夠確定了,接下來就是對模型P(Y|X)用什麼來度量不確定性,很明顯的,用條件熵就可以了。最大熵模型具體定義如下:

  該部分還差一點,書中開始部分聯合分佈P(X,Y)的經驗分佈和邊緣分佈P(X)的經驗分佈如何求?瞭解樸素貝葉斯演算法的同學應該知道,根據大數定律,當訓練集包含足夠多的樣本時,P(X)及P(X,Y)可以通過各事件出現的頻率來估計,其中:

最大熵模型的學習

  最大熵模型的學習過程就是求解最大熵模型的過程,由公式6.12和公式6.13,求解過程可以形式化為約束最優化問題,即:

  按照最優化問題的求解習慣,將求最大值問題改寫為等價的求最小值問題:

  這裡參照書上內容,將約束最優化的原始問題轉換為無約束的對偶問題,通過求解對偶問題求解原始問題。

  必要的求解過程好像手寫一下,標註出關鍵步驟好像更容易理解,這方面工作開學後會做細緻。暫時直接貼上過來了,仔細看的話,除了對偶問題的轉化,其它的計算細節就是微積分了,相信是可以看懂的。

  計算過程沒什麼好解釋的,抄一遍實在沒什麼意思,開學後手寫推導一遍,詳細寫寫計算過程。下面看下例子:

極大似然估計

  通過原始問題、對偶問題的轉換,我們得到了最優的分類模型:由公式6.22、公式6.23表示的條件概率分佈。下面內容證明一個等價命題:對偶函式的極大化等價於最大熵模型的極大似然估計。證明過程如下:

  一般似然函式是資料集中各個樣本的聯合概率,本公式給出了似然函式的另一種形式,這個形式需要經過幾個步驟的推導,資料已找到,開學整理上手寫版本,現在只需要知道該對數似然函式是合理的,將求解的最優分類模型帶入似然函式得到:

  再看一下對偶函式f(w)化簡的結果:

  可以發現對偶函式等價於對數似然函式,於是證明了最大熵模型學習中的對偶函式極大化等價於最大熵模型的極大似然估計這一事實。

  到這裡,我們可以得到最大熵模型的一般形式。

  查資料的時候,經常看到“最大熵模型與邏輯迴歸的區別”這個問題,第一遍學完本章內容,腦子裡反覆思考這兩個模型的推導過程,深的淺的有了一些想法,目前尚未形成條理的思路,以後有了,再補上吧。書中說最大熵模型與邏輯迴歸模型有類似的形式,它們又被稱為對數線性模型,這句話是真的沒看明白,說邏輯迴歸是對數線性模型還能理解;可最大熵模型的一般形式,只看到了指數啊,難道是因為求解過程的log,這裡存有疑