1. 程式人生 > >系統學習機器學習之模型選擇

系統學習機器學習之模型選擇

1 問題

     模型選擇問題:對於一個學習問題,可以有多種模型選擇。比如要擬合一組樣本點,可以使用線性迴歸clip_image002,也可以用多項式迴歸clip_image004。那麼使用哪種模型好呢(能夠在偏差和方差之間達到平衡最優)?

     還有一類引數選擇問題:如果我們想使用帶權值的迴歸模型,那麼怎麼選擇權重w公式裡的引數clip_image006

形式化定義:假設可選的模型集合是clip_image008,比如我們想分類,那麼SVM、logistic迴歸、神經網路等模型都包含在M中。

2 交叉驗證(Cross validation)

     我們的第一個任務就是要從M中選擇最好的模型。

     假設訓練集使用S來表示

     如果我們想使用經驗風險最小化來度量模型的好壞,那麼我們可以這樣來選擇模型:

1、 使用S來訓練每一個clip_image010,訓練出引數後,也就可以得到假設函式clip_image012。(比如,線性模型中得到clip_image014後,也就得到了假設函式clip_image016

2、 選擇錯誤率最小的假設函式。

     遺憾的是這個演算法不可行,比如我們需要擬合一些樣本點,使用高階的多項式迴歸肯定比線性迴歸錯誤率要小,偏差小,但是方差卻很大,會過度擬合。因此,我們改進演算法如下:

1、 從全部的訓練資料S中隨機選擇70%的樣例作為訓練集clip_image018,剩餘的30%作為測試集clip_image020

2、 在clip_image018[1]上訓練每一個clip_image010[1],得到假設函式clip_image012[1]

3、 在clip_image020[1]上測試每一個clip_image012[2],得到相應的經驗錯誤clip_image022

4、 選擇具有最小經驗錯誤clip_image022[1]clip_image012[3]作為最佳模型。

     這種方法稱為hold-out cross validation或者稱為簡單交叉驗證。

     由於測試集是和訓練集中是兩個世界的,因此我們可以認為這裡的經驗錯誤clip_image022[2]接近於泛化錯誤(generalization error)。這裡測試集的比例一般佔全部資料的1/4-1/3。30%是典型值。

     還可以對模型作改進,當選出最佳的模型clip_image010[2]後,再在全部資料S上做一次訓練,顯然訓練資料越多,模型引數越準確。

     簡單交叉驗證方法的弱點在於得到的最佳模型是在70%的訓練資料上選出來的,不代表在全部訓練資料上是最佳的。還有當訓練資料本來就很少時,再分出測試集後,訓練資料就太少了。

     我們對簡單交叉驗證方法再做一次改進,如下:

1、 將全部訓練集S分成k個不相交的子集,假設S中的訓練樣例個數為m,那麼每一個子集有m/k個訓練樣例,相應的子集稱作{

clip_image024}。

2、 每次從模型集合M中拿出來一個clip_image010[3],然後在訓練子集中選擇出k-1個

{clip_image026}(也就是每次只留下一個clip_image028),使用這k-1個子集訓練clip_image010[4]後,得到假設函式clip_image030。最後使用剩下的一份clip_image028[1]作測試,得到經驗錯誤clip_image032

3、 由於我們每次留下一個clip_image028[2](j從1到k),因此會得到k個經驗錯誤,那麼對於一個clip_image010[5],它的經驗錯誤是這k個經驗錯誤的平均。

4、 選出平均經驗錯誤率最小的clip_image010[6],然後使用全部的S再做一次訓練,得到最後的clip_image012[4]

     這個方法稱為k-fold cross validation(k-摺疊交叉驗證)。說白了,這個方法就是將簡單交叉驗證的測試集改為1/k,每個模型訓練k次,測試k次,錯誤率為k次的平均。一般講k取值為10。這樣資料稀疏時基本上也能進行。顯然,缺點就是訓練和測試次數過多。

     極端情況下,k可以取值為m,意味著每次留一個樣例做測試,這個稱為leave-one-out cross validation。

如果我們發明了一種新的學習模型或者演算法,那麼可以使用交叉驗證來對模型進行評價。比如在NLP中,我們將訓練集中分出一部分訓練,一部分做測試。

3 特徵選擇(Feature selection)

     特徵選擇嚴格來說也是模型選擇中的一種。這裡不去辨析他們的關係,重點說明問題。假設我們想對維度為n的樣本點進行迴歸,然而,n可能大多以至於遠遠大於訓練樣例數m。但是我們感覺很多特徵對於結果是無用的,想剔除n中的無用特徵。n個特徵就有clip_image034種去除情況(每個特徵去或者保留),如果我們列舉這些情況,然後利用交叉驗證逐一考察在該情況下模型的錯誤率,太不現實。因此需要一些啟發式搜尋方法。

第一種,前向搜尋:

1、 初始化特徵集F為空。

2、 掃描i從1到n,

如果第i個特徵不在F中,那麼將特徵i和F放在一起作為clip_image036(即clip_image038

在只使用clip_image036[1]中特徵的情況下,利用交叉驗證來得到clip_image036[2]的錯誤率。

3、 從上步中得到的n個clip_image036[3]中選出錯誤率最小的clip_image036[4],更新F為clip_image036[5]

如果F中的特徵數達到了n或者預設定的閾值(如果有的話),那麼輸出整個搜尋過程中最好的F,沒達到轉到2

     前向搜尋屬於wrapper model feature selection。Wrapper這裡指不斷地使用不同的特徵集來測試學習演算法。前向搜尋說白了就是每次增量地從剩餘未選中的特徵選出一個加入特徵集中,待達到閾值或者n時,從所有的F中選出錯誤率最小的。

     既然有增量加,那麼也會有增量減,後者稱為後向搜尋。先將F設定為{1,2,..,n},然後每次刪除一個特徵,並評價,直到達到閾值或者為空,然後選擇最佳的F。

     這兩種演算法都可以工作,但是計算複雜度比較大。時間複雜度為clip_image040

第二種,過濾特徵選擇(Filter feature selection):

     過濾特徵選擇方法的想法是針對每一個特徵clip_image042,i從1到n,計算clip_image042[1]相對於類別標籤clip_image044的資訊量clip_image046,得到n個結果,然後將n個clip_image046[1]按照從大到小排名,輸出前k個特徵。顯然,這樣複雜度大大降低,為O(n)。

     那麼關鍵問題就是使用什麼樣的方法來度量clip_image046[2],我們的目標是選取與y關聯最密切的一些clip_image042[2]。而y和clip_image042[3]都是有概率分佈的。因此我們想到使用互資訊來度量clip_image046[3],對於clip_image042[4]是離散值的情況更適用,不是離散值,將其轉變為離散值,方法在第一篇《迴歸認識》中已經提到。

     互資訊(Mutual information)公式:

clip_image047

     當clip_image042[5]是0/1離散值的時候,這個公式如上。很容易推廣到clip_image042[6]是多個離散值的情況。

     這裡的clip_image049clip_image051clip_image053都是從訓練集上得到的。

     若問這個MI公式如何得來,請看它的KL距離(Kullback-Leibler)表述:

clip_image054

     也就是說,MI衡量的是clip_image042[7]和y的獨立性。如果它倆獨立(clip_image056),那麼KL距離值為0,也就是說clip_image042[8]和y不相關了,可以去除clip_image042[9]。相反,如果兩者密切相關,那麼MI值會很大。在對MI進行排名後,最後剩餘的問題就是如何選擇k值(前k個clip_image042[10])。我們繼續使用交叉驗證的方法,將k從1掃描到n,取最大的F。不過這次複雜度是線性的了。比如,在使用樸素貝葉斯分類文字的時候,詞表長度n很大。使用filter特徵選擇方法,能夠增加分類器的精度。

4 貝葉斯統計和規則化(Bayesian statistics and regularization)

     題目有點繞,說白了就是要找更好的估計方法來減少過度擬合情況的發生。

     回顧一下,線性迴歸中使用的估計方法是最小二乘法,logistic迴歸是條件概率的最大似然估計,樸素貝葉斯是聯合概率的最大似然估計,SVM是二次規劃。

     以前我們使用的估計方法是最大似然估計(比如在logistic迴歸中使用的):

     clip_image057

嚴格來講clip_image061[1]並不等於樣本X的概率,只是P(X)決定於clip_image061[2]clip_image061[3]最大化時P(X)也最大化。在生成模型,如樸素貝葉斯中,我們看待P(X)=P(y)P(x|y),也就是在某個類標籤y下出現特徵x的概率與先驗概率之積。而P(x|y)在x各個分量是條件獨立情況下可以以概率相乘方式計算出,這裡根本沒有引數clip_image059[1]。因此最大似然估計直接估計P(x,y)即可,變成了聯合分佈概率。

     在該上式中,我們視引數clip_image059[2]為未知的常數向量。我們的任務就是估計出未知的clip_image059[3]

     從大範圍上說,最大似然估計看待clip_image059[4]的視角稱為頻率學派(frequentist statistics),認為clip_image059[5]不是隨機變數,只是一個未知的常量,因此我們沒有把clip_image063寫成clip_image065

     另一種視角稱為貝葉斯學派(Bayesian),他們看待clip_image059[6]為隨機變數,值未知。既然clip_image059[7]為隨機變數,那麼clip_image059[8]不同的值就有了不同的概率clip_image067(稱為先驗概率),代表我們對特定的clip_image059[9]的相信度。我們將訓練集表示成clip_image069,i從1到m。我們首先需要求出clip_image059[10]的後驗概率:

clip_image070

     這個公式的推導其實比較蹊蹺。第一步無可厚非,第二步中先看分子,分子中clip_image072最完整的表達方式是clip_image074。由於在分母中也會出現clip_image076,所以clip_image076[1]會被約掉。當然作者壓根就沒有考慮clip_image076[2],因為他看待P(S)的觀點就是x->y,而不是(x,y)。再來看分母,分母寫成這種形式後,意思是對所有的clip_image078可能值做積分。括號裡面的意思是clip_image080,然後將其展開成分母的模樣,從巨集觀上理解,就是在求每個樣例的概率時,先以一定的概率確定clip_image078[1],然後在clip_image082clip_image078[2]的作用下再確定clip_image084的概率.

     clip_image065[1]在不同的模型下計算方式不同。比如在貝葉斯logistic迴歸中,

     clip_image089

     其中clip_image090,p的表現形式也就是伯努利分佈了。

     在clip_image059[11]是隨機變數的情況下,如果新來一個樣例特徵為x,那麼為了預測y。我們可以使用下面的公式:

     clip_image091

     clip_image002[4]由前面的公式得到。假若我們要求期望值的話,那麼套用求期望的公式即可:

     clip_image094

     大多數時候我們只需求得clip_image002[6]中最大的y即可(在y是離散值的情況下)。

     這次求解clip_image098與之前的方式不同,以前是先求clip_image059[12],然後直接預測,這次是對所有可能的clip_image059[13]作積分。

     再總結一下兩者的區別,最大似然估計沒有將clip_image059[14]視作y的估計引數,認為clip_image059[15]是一個常數,只是未知其值而已,比如我們經常使用常數c作為y=2x+c的字尾一樣。但是clip_image063[1]的計算公式中含有未知數clip_image059[16]。所以再對極大似然估計求導後,可以求出clip_image059[17]

     而貝葉斯估計將clip_image059[18]視為隨機變數,clip_image059[19]的值滿足一定的分佈,不是固定值,我們無法通過計算獲得其值,只能在預測時計算積分。

     然而在上述貝葉斯估計方法中,雖然公式合理優美,但後驗概率clip_image100很難計算,看其公式知道計算分母時需要在所有的clip_image059[20]上作積分,然而對於一個高維的clip_image059[21]來說,列舉其所有的可能性太難了。

為了解決這個問題,我們需要改變思路。看clip_image100[1]公式中的分母,分母其實就是P(S),而我們就是要讓P(S)在各種引數的影響下能夠最大(這裡只有引數clip_image059[22])。因此我們只需求出隨機變數clip_image059[23]中最可能的取值,這樣求出clip_image059[24]後,可將clip_image059[25]視為固定值,那麼預測時就不用積分了,而是直接像最大似然估計中求出clip_image059[26]後一樣進行預測,這樣就變成了點估計。這種方法稱為最大後驗概率估計(Maximum a posteriori)方法

     clip_image102估計公式為

     clip_image103

     clip_image105clip_image107一樣表示的是P(S),意義是在從隨機變數分佈中以一定概率clip_image067[1]選定好clip_image059[27]後,在給定樣本特徵clip_image082[1]clip_image084[1]出現的概率積。

     與最大似然估計對比發現,MAP只是將clip_image059[32]移進了條件概率中,並且多了一項clip_image067[2]。一般情況下我們認為clip_image111,實際上,貝葉斯最大後驗概率估計相對於最大似然估計來說更容易克服過度擬合問題。我想原因是這樣的,過度擬合一般是極大化clip_image063[2]造成的。而在此公式中多了一個引數clip_image059[33],整個公式由兩項組成,極大化clip_image065[2]時,不代表此時clip_image067[3]也能最大化。相反,clip_image059[34]是多值高斯分佈,極大化clip_image065[3]時,clip_image067[4]概率反而可能比較小。因此,要達到最大化clip_image105[2]需要在兩者之間達到平衡,也就靠近了偏差和方差線的交叉點。這個跟機器翻譯裡的噪聲通道模型比較類似,由兩個概率決定比有一個概率決定更靠譜。作者聲稱利用貝葉斯logistic迴歸(使用clip_image105[3]的logistic迴歸)應用於文字分類時,即使特徵個數n遠遠大於樣例個數m,也很有效。