1. 程式人生 > >從零開始-Machine Learning學習筆記(28)-特徵選擇與稀疏學習

從零開始-Machine Learning學習筆記(28)-特徵選擇與稀疏學習

  特徵選擇的目的主要有兩個:首先,我們在現實任務中經常會遇到維數災難問題,這是由於屬性過多而造成的,若能從中選擇出重要的特徵,使得後續學習過程僅需在-部分特徵上構建模型,則維數災難問題會大為減輕。這與降維的目的類似。第一個原因是,去除不相關特徵往往會降低學習任務的難度,這就像偵探破案一樣,若將紛繁複雜的因素抽絲剝繭,只留下關鍵因素,則真相往往更易看清。

1. 子集搜素與評價

  在眾多的特徵中如何找到一個包含了所有重要資訊的特徵子集。如果採用列舉的方式,一旦特徵過多,顯然是不可行的。所以一般是先產生一個候選特徵子集,然後根據評價產生下一個子集。
  基於上面的思路,“子集搜尋”一共有三中方案:前向搜尋、後向搜尋和雙向搜尋


前向搜尋:
1.選擇一個最優的特徵作為初始子集;
2.給候選子集新增一個特徵,加入的特徵組合是最優的組合且比原來候選子集最優。則將該特徵加入到候選特徵子集中。
3.直到下一輪新增特徵後不如上一輪最優,則停止迭代。
後向搜尋:
1.將所有特徵作為初始子集;
2.給候選子集去掉一個特徵,去掉後的特徵組合是最優的組合且比原來候選子集最優。則將該特徵從候選特徵子去除。
3.直到下一輪去除特徵後不如上一輪最優,則停止迭代。
雙向搜尋:
結合前向和後向搜尋,每次迭代都增加相關特徵,減少無關特徵。

  子集評價可以使用資訊增益來進行計算。對於不同的屬性A,根據其取值將資料集D分成v類,於是就可以計算A的資訊增益:
G

ain(A)=Ent(D)v=1VDvDEnt(Dv) Gain(A) = Ent(D) -\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v)

  常見的特徵選擇方法大致可分為三類:過濾式(且lter) 、包裹式(wrapper)和嵌入式(embedding)。

2. 過濾式選擇

  Relief(Relevant Features)是一種著名的過濾式特徵選擇方法,該方法設計了一個"相關統計量"來度量特徵的重要性。該統計量是一個向量,其每個分量分別對應於一個初始特徵,而特徵子集的重要性則是由子集中每個特徵所對應的相關統計量分量之和來決定。於是,最終只需指定一個闊值T沒,然後選擇比T 大的相關統計量分量所對應的特徵即可;也可指定欲選取的特徵個數k,然後選擇相關統計量分量最大的k個特徵。
  對於訓練集中的每一個樣本x

ix_i先在其同類樣本中尋找最近鄰xi,nhx_{i,nh},稱為“猜中近鄰”(near hit);在其異類樣本中尋找最近鄰xi,nmx_{i,nm},稱為“猜錯近鄰”(near miss)。相關統計量對應與屬性j的分量為:
δj=idiff(xij,xi,nhj)2+diff(xij,xi,nmj)2 \delta^j = \sum_{i}-diff(x_i^j,x_{i,nh}^j)^2+diff(x_i^j,x_{i,nm}^j)^2

若樣本為離散型:diff(xaj,xbj)diff(x_a^j,x_b^j)為0和1

若樣本為連續型:diff(xaj,xbj)=xajxbjdiff(x_a^j,x_b^j) = |x_a^j-x_b^j|

  從上式可看出,若xix_i與其猜中近鄰在屬性j上的距離小於其與其猜錯近鄰的距離,則說明屬性j對區分同類與異類樣本是有益的,於是增大屬性j 所對應的統計量分量;反之,若xix_i與其猜中近鄰在屬性j上的距離大於其與其猜錯近鄰的距離,則說明屬性j 起負面作用,於是減小屬性j 所對應的統計量分量.最後,對基於不同樣本得到的估計結果進行平均,就得到各屬性的相關統計量分量,分量值越大,則對應屬性的分類能力就越強。

這裡的更新的思想很像在聚類一章中所提到的學習向量化演算法中的迭代思想:若最近的原型向量p與樣本的類別標記相同,則令p向樣本的方向靠攏;若最近的原型向量p與樣本的類別標記不相同,則令p向樣本的方向遠離。

  Relief的效率很高,因為它是在樣本上進行取樣,而不是在整個樣本上估計統計相關量。且針對於二分類問題,對多分類問題,主要可以使用其變體Relief-F,其不同在於需要從每種不同標記的樣本中尋找猜錯近鄰,並且將各個類別樣本中得到的猜錯近鄰估計進行加權平均,其權值就是其類別所對應的樣本數在資料集中所佔的比例:
δj=idiff(xij,xi,nhj)2+lk(pl×diff(xij,xi,l,nmj)2) \delta^j = \sum_{i}-diff(x_i^j,x_{i,nh}^j)^2+\sum_{l \neq k}(p_l \times diff(x_i^j, x_{i,l,nm}^j)^2)
其中plp_l是l類樣本在資料集D中所佔的比例。

3. 包裹式選擇 - LVW(Las Vegas Wrapper)

  與過濾式特徵選擇不考慮後續學習器不同,包裹式特徵選擇直接把最終將要使用的學習器的效能作為特徵於集的評價準則。換言之,包裹式特徵選擇的目的就是為給定學習器選擇最有利於其效能、"量身走做"的特徵子集。
  LVM,拉斯維加斯方法是一個典型的包裹式的特徵選擇方法,其主要思路是:
1.隨機產生一組特徵子集;
2.如果該特徵子集的誤差比上一輪迭代的特徵子集的誤差更小,或誤差相當;並且包含的特徵數更少,則此次的特徵子集保留下來;
3.重複1,2步,直到滿足迭代次數。
其演算法描述如下:

這個演算法隨機性太高,而且不像遺傳演算法或者梯度下降,每次都會往更好的方向前進,純隨機的方法導致該演算法可能很長時間都達不到停止條件,如果有時間限制的話,很可能給不出解。

4. 嵌入式選擇與L1正則化

  嵌入式特徵選擇是將特徵選擇過程與學習器訓練過程融為一體,兩者在同一個優化過程中完成,即在學習器訓練過程中自動地進行了特徵選擇。
  在很多模型中,我們都會用到最小化均方誤差作為我們的優化目標:
minwi=1m(yiwTxi)2 \min_{w}\ \sum_{i=1}^{m}(y_i-w^Tx_i)^2
樣本數過少的時候,為了避免過擬合,我們引入了正則化項,比如我們常使用L2範數正則化:
minwi=1m(yiwTxi)2+λw2 \min_{w}\ \sum_{i=1}^{m}(y_i-w^Tx_i)^2+\lambda ||w||^2
當然,除了L2範數,我們依然可以引入LP範數,如果我們引入L1範數,就得到了LASSO(Least Absolute Shrinkage and Selection Operator)最小絕對收縮選擇運算元。
  L1範數和L2範數正則化都有助於降低過擬合風險,但前者還會帶來一個額外的好處:它比後者更易於獲得"稀疏" (sparse)解,即它求得的ω會有更少的非零分量。

從圖中可以看出:
L1範數等值線與平方誤差項等值線往往相交於某個座標軸上,這樣對應與w1,w2就表示有一個為0;
L2範數等值線與平方誤差項等值線往往相交於某個象限中,這就表示w1與w2的值均不為0;
通過這個例子很好解釋了L1為什麼比L2更容易獲得稀疏解。
  那麼在最終的模型中,我們取非零w所對應的特徵,就是我們演算法所選擇的特徵,所以,基於L1範數正則化的方法就是一種嵌入式的特徵選擇方法,在模型訓練過程中進行特徵選擇。

5. 稀疏表示與字典學習

  為普通稠密表達的樣本找到合適的字典,將樣本轉化為合適的稀疏表示形式,從而使學習任務得以簡化,模型複雜度得以降低,通常稱為"字典學習" (dictionary learning) ,亦稱"稀疏編碼" (sparse coding)。這兩個稱謂稍有差別,"字典學習"更側重於學得字典的過程,而"稀疏編碼"則更側重於對樣本進行稀疏表達的過程由於兩者通常是在同一個優化求解過程中完成的,因此籠統地稱為字典學習。
  給定資料集D,字典學習最簡單的形式為:
minB,αi=i=1mxiBαi22+λi=1mαi1 \min_{B,\alpha_i} = \sum_{i=1}^{m}||x_i-B\alpha_i||_2^2+\lambda\sum_{i=1}^{m}||\alpha_i||_1
其中:BRd×kB ∈ R^{d \times k}為字典矩陣,k稱為字典的詞彙量,通常由使用者指定,αiRk\alpha_i ∈ R^k,是樣本xiRdx_i∈ R^d的稀疏表示。上式的第一項是希望由αi\alpha_i能很好地重構xix_i,第二項則是希望αi\alpha_i儘量稀疏。
對於求解主要分為兩步進行迭代更細:
第一步:固定字典B,為每個樣本找到相應的αi\alpha_i:
minαixiBαi22+λαi1 \min_{\alpha_i} \ ||x_i-B\alpha_i||_2^2+\lambda||\alpha_i||_1

第二步:固定αi\alpha_i來更新字典B:
minBXBAF2 \min_{B}||X-BA||_F^2