系統學習機器學習之模型選擇
1 問題
模型選擇問題:對於一個學習問題,可以有多種模型選擇。比如要擬合一組樣本點,可以使用線性迴歸,也可以用多項式迴歸。那麼使用哪種模型好呢(能夠在偏差和方差之間達到平衡最優)?
還有一類引數選擇問題:如果我們想使用帶權值的迴歸模型,那麼怎麼選擇權重w公式裡的引數?
形式化定義:假設可選的模型集合是,比如我們想分類,那麼SVM、logistic迴歸、神經網路等模型都包含在M中。
2 交叉驗證(Cross validation)
我們的第一個任務就是要從M中選擇最好的模型。
假設訓練集使用S來表示
如果我們想使用經驗風險最小化來度量模型的好壞,那麼我們可以這樣來選擇模型:
1、 使用S來訓練每一個,訓練出引數後,也就可以得到假設函式。(比如,線性模型中得到後,也就得到了假設函式) 2、 選擇錯誤率最小的假設函式。 |
遺憾的是這個演算法不可行,比如我們需要擬合一些樣本點,使用高階的多項式迴歸肯定比線性迴歸錯誤率要小,偏差小,但是方差卻很大,會過度擬合。因此,我們改進演算法如下:
這種方法稱為hold-out cross validation或者稱為簡單交叉驗證。
由於測試集是和訓練集中是兩個世界的,因此我們可以認為這裡的經驗錯誤接近於泛化錯誤(generalization error)。這裡測試集的比例一般佔全部資料的1/4-1/3。30%是典型值。
還可以對模型作改進,當選出最佳的模型後,再在全部資料S上做一次訓練,顯然訓練資料越多,模型引數越準確。
簡單交叉驗證方法的弱點在於得到的最佳模型是在70%的訓練資料上選出來的,不代表在全部訓練資料上是最佳的。還有當訓練資料本來就很少時,再分出測試集後,訓練資料就太少了。
我們對簡單交叉驗證方法再做一次改進,如下:
1、 將全部訓練集S分成k個不相交的子集,假設S中的訓練樣例個數為m,那麼每一個子集有m/k個訓練樣例,相應的子集稱作{ 2、 每次從模型集合M中拿出來一個,然後在訓練子集中選擇出k-1個 {}(也就是每次只留下一個),使用這k-1個子集訓練後,得到假設函式。最後使用剩下的一份作測試,得到經驗錯誤。 |
這個方法稱為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個特徵就有種去除情況(每個特徵去或者保留),如果我們列舉這些情況,然後利用交叉驗證逐一考察在該情況下模型的錯誤率,太不現實。因此需要一些啟發式搜尋方法。
第一種,前向搜尋:
1、 初始化特徵集F為空。 2、 掃描i從1到n, 如果F中的特徵數達到了n或者預設定的閾值(如果有的話),那麼輸出整個搜尋過程中最好的F,沒達到轉到2 |
前向搜尋屬於wrapper model feature selection。Wrapper這裡指不斷地使用不同的特徵集來測試學習演算法。前向搜尋說白了就是每次增量地從剩餘未選中的特徵選出一個加入特徵集中,待達到閾值或者n時,從所有的F中選出錯誤率最小的。
既然有增量加,那麼也會有增量減,後者稱為後向搜尋。先將F設定為{1,2,..,n},然後每次刪除一個特徵,並評價,直到達到閾值或者為空,然後選擇最佳的F。
這兩種演算法都可以工作,但是計算複雜度比較大。時間複雜度為。
第二種,過濾特徵選擇(Filter feature selection):
過濾特徵選擇方法的想法是針對每一個特徵,i從1到n,計算相對於類別標籤的資訊量,得到n個結果,然後將n個按照從大到小排名,輸出前k個特徵。顯然,這樣複雜度大大降低,為O(n)。
那麼關鍵問題就是使用什麼樣的方法來度量,我們的目標是選取與y關聯最密切的一些。而y和都是有概率分佈的。因此我們想到使用互資訊來度量,對於是離散值的情況更適用,不是離散值,將其轉變為離散值,方法在第一篇《迴歸認識》中已經提到。
互資訊(Mutual information)公式:
當是0/1離散值的時候,這個公式如上。很容易推廣到是多個離散值的情況。
若問這個MI公式如何得來,請看它的KL距離(Kullback-Leibler)表述:
也就是說,MI衡量的是和y的獨立性。如果它倆獨立(),那麼KL距離值為0,也就是說和y不相關了,可以去除。相反,如果兩者密切相關,那麼MI值會很大。在對MI進行排名後,最後剩餘的問題就是如何選擇k值(前k個)。我們繼續使用交叉驗證的方法,將k從1掃描到n,取最大的F。不過這次複雜度是線性的了。比如,在使用樸素貝葉斯分類文字的時候,詞表長度n很大。使用filter特徵選擇方法,能夠增加分類器的精度。
4 貝葉斯統計和規則化(Bayesian statistics and regularization)
題目有點繞,說白了就是要找更好的估計方法來減少過度擬合情況的發生。
回顧一下,線性迴歸中使用的估計方法是最小二乘法,logistic迴歸是條件概率的最大似然估計,樸素貝葉斯是聯合概率的最大似然估計,SVM是二次規劃。
以前我們使用的估計方法是最大似然估計(比如在logistic迴歸中使用的):
嚴格來講並不等於樣本X的概率,只是P(X)決定於,最大化時P(X)也最大化。在生成模型,如樸素貝葉斯中,我們看待P(X)=P(y)P(x|y),也就是在某個類標籤y下出現特徵x的概率與先驗概率之積。而P(x|y)在x各個分量是條件獨立情況下可以以概率相乘方式計算出,這裡根本沒有引數。因此最大似然估計直接估計P(x,y)即可,變成了聯合分佈概率。
在該上式中,我們視引數為未知的常數向量。我們的任務就是估計出未知的。
從大範圍上說,最大似然估計看待的視角稱為頻率學派(frequentist statistics),認為不是隨機變數,只是一個未知的常量,因此我們沒有把寫成。
另一種視角稱為貝葉斯學派(Bayesian),他們看待為隨機變數,值未知。既然為隨機變數,那麼不同的值就有了不同的概率(稱為先驗概率),代表我們對特定的的相信度。我們將訓練集表示成,i從1到m。我們首先需要求出的後驗概率:
這個公式的推導其實比較蹊蹺。第一步無可厚非,第二步中先看分子,分子中最完整的表達方式是。由於在分母中也會出現,所以會被約掉。當然作者壓根就沒有考慮,因為他看待P(S)的觀點就是x->y,而不是(x,y)。再來看分母,分母寫成這種形式後,意思是對所有的可能值做積分。括號裡面的意思是,然後將其展開成分母的模樣,從巨集觀上理解,就是在求每個樣例的概率時,先以一定的概率確定,然後在和的作用下再確定的概率.
在不同的模型下計算方式不同。比如在貝葉斯logistic迴歸中,
在是隨機變數的情況下,如果新來一個樣例特徵為x,那麼為了預測y。我們可以使用下面的公式:
由前面的公式得到。假若我們要求期望值的話,那麼套用求期望的公式即可:
大多數時候我們只需求得中最大的y即可(在y是離散值的情況下)。
這次求解與之前的方式不同,以前是先求,然後直接預測,這次是對所有可能的作積分。
再總結一下兩者的區別,最大似然估計沒有將視作y的估計引數,認為是一個常數,只是未知其值而已,比如我們經常使用常數c作為y=2x+c的字尾一樣。但是的計算公式中含有未知數。所以再對極大似然估計求導後,可以求出。
而貝葉斯估計將視為隨機變數,的值滿足一定的分佈,不是固定值,我們無法通過計算獲得其值,只能在預測時計算積分。
然而在上述貝葉斯估計方法中,雖然公式合理優美,但後驗概率很難計算,看其公式知道計算分母時需要在所有的上作積分,然而對於一個高維的來說,列舉其所有的可能性太難了。
為了解決這個問題,我們需要改變思路。看公式中的分母,分母其實就是P(S),而我們就是要讓P(S)在各種引數的影響下能夠最大(這裡只有引數)。因此我們只需求出隨機變數中最可能的取值,這樣求出後,可將視為固定值,那麼預測時就不用積分了,而是直接像最大似然估計中求出後一樣進行預測,這樣就變成了點估計。這種方法稱為最大後驗概率估計(Maximum a posteriori)方法
與一樣表示的是P(S),意義是在從隨機變數分佈中以一定概率選定好後,在給定樣本特徵上出現的概率積。
與最大似然估計對比發現,MAP只是將移進了條件概率中,並且多了一項。一般情況下我們認為,實際上,貝葉斯最大後驗概率估計相對於最大似然估計來說更容易克服過度擬合問題。我想原因是這樣的,過度擬合一般是極大化造成的。而在此公式中多了一個引數,整個公式由兩項組成,極大化時,不代表此時也能最大化。相反,是多值高斯分佈,極大化時,概率反而可能比較小。因此,要達到最大化需要在兩者之間達到平衡,也就靠近了偏差和方差線的交叉點。這個跟機器翻譯裡的噪聲通道模型比較類似,由兩個概率決定比有一個概率決定更靠譜。作者聲稱利用貝葉斯logistic迴歸(使用的logistic迴歸)應用於文字分類時,即使特徵個數n遠遠大於樣例個數m,也很有效。