1 問題
模型選擇問題:對於一個學習問題,可以有多種模型選擇。比如要擬合一組樣本點,可以使用線性迴歸,也可以用多項式迴歸。那麼使用哪種模型好呢(能夠在偏差和方差之間達到平衡最優)?
還有一類參數選擇問題:如果我們想使用帶權值的迴歸模型,那麼怎麼選擇權重w公式裡的參數?
形式化定義:假設可選的模型集合是,比如我們想分類,那麼SVM、logistic迴歸、神經網路等模型都包含在M中。
2 交叉驗證(Cross validation)
我們的第一個任務就是要從M中選擇最好的模型。
假設訓練集使用S來表示
如果我們想使用經驗風險最小化來度量模型的好壞,那麼我們可以這樣來選擇模型:
1、 使用S來訓練每一個,訓練出參數後,也就可以得到假設函數。(比如,線性模型中得到後,也就得到了假設函數) 2、 選擇錯誤率最小的假設函數。 |
遺憾的是這個演算法不可行,比如我們需要擬合一些樣本點,使用高階的多項式迴歸肯定比線性迴歸錯誤率要小,偏差小,但是方差卻很大,會過度學習。因此,我們改進演算法如下:
1、 從全部的訓練資料S中隨機播放70%的範例作為訓練集,剩餘的30%作為測試集。 2、 在上訓練每一個,得到假設函數。 3、 在上測試每一個,得到相應的經驗錯誤。 4、 選擇具有最小經驗錯誤的作為最佳模型。 |
這種方法稱為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個子集訓練後,得到假設函數。最後使用剩下的一份作測試,得到經驗錯誤。 3、 由於我們每次留下一個(j從1到k),因此會得到k個經驗錯誤,那麼對於一個,它的經驗錯誤是這k個經驗錯誤的平均。 4、 選出平均經驗錯誤率最小的,然後使用全部的S再做一次訓練,得到最後的。 |
這個方法稱為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, 如果第i個特徵不在F中,那麼將特徵i和F放在一起作為(即) 在只使用中特徵的情況下,利用交叉驗證來得到的錯誤率。 3、 從上步中得到的n個中選出錯誤率最小的,更新F為。 如果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迴歸中使用的):
注意這裡的最大似然估計與維基百科中的表述
http://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E5%90%8E%E9%AA%8C%E6%A6%82%E7%8E%87
有些出入,是因為維基百科只是將樣本(觀察資料)記為X,然後求P(X)的最大機率。然而,對於我們這裡的樣本而言,分為特徵x和類標籤y。我們需要具體計算P(X)。在判別模型(如logistic迴歸)中,我們看待P(X)=P(x,y)=P(y|x)P(x),而P(x)與獨立無關,因此最後的argmax P(X)由argmaxP(y|x)決定,也就是上式。嚴格來講並不等於樣本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迴歸中,
其中,p的表現形式也就是伯努利分布了。
在是隨機變數的情況下,如果新來一個範例特徵為x,那麼為了預測y。我們可以使用下面的公式:
由前面的公式得到。假若我們要求期望值的話,那麼套用求期望的公式即可:
大多數時候我們只需求得中最大的y即可(在y是離散值的情況下)。
這次求解與之前的方式不同,以前是先求,然後直接預測,這次是對所有可能的作積分。
再總結一下兩者的區別,最大似然估計沒有將視作y的估計參數,認為是一個常數,只是未知其值而已,比如我們經常使用常數c作為y=2x+c的尾碼一樣。但是的計算公式中含有未知數。所以再對極大似然估計求導後,可以求出。
而貝葉斯估計將視為隨機變數,的值滿足一定的分布,不是固定值,我們無法通過計算獲得其值,只能在預測時計算積分。
然而在上述貝葉斯估計方法中,雖然公式合理優美,但後驗機率很難計算,看其公式知道計算分母時需要在所有