1. 程式人生 > >總結 特徵選擇(feature selection)演算法筆記

總結 特徵選擇(feature selection)演算法筆記

  • 什麼是特徵選擇
    • 特徵選擇也稱特徵子集選擇,或者屬性選擇,是指從全部特診中選取一個特徵子集,使構造出來的模型更好。

  • 為什麼要做特徵選擇
  • 在機器學習的實際應用中,特徵數量往往較多,其中可能存在不相關的特徵,特徵之間也可能存在相互依賴,容易導致:
    • 特徵個數越多,分析特徵、訓練模型所需的時間也就越長
    • 特徵個數越多,容易引起“維度災難”,模型也會越複雜,其推廣能力會下降。
  • 特徵選擇能剔除不相關(irrelevant)或亢餘(redundant)的特徵,從而達到減少特徵個數,提高模型精確度,減少執行時間的目的。另一方面,選取出真正相關的特徵簡化了模型,是研究人員易於理解資料產生的過程



工程上常用的特徵選擇的方法

計算每一個特徵與相應變數的相關性
  • 皮爾森(Pearson):只能衡量線性相關性
  • 互資訊係數:能夠很好地度量各種相關性,計算複雜,不過很多toolkit都包含此工具(例如sklearn的MINE),得到相關性就可以排序選擇特徵了。

構建單個特徵的模型,通過模型的準確性為特徵排序,藉此選擇特徵。
  • 當選擇到了目標特徵之後,再用來訓練最終的模型。

通過L1正則項來選擇特徵
  • L1正則方法具有稀疏解的特性,因此天然具備特徵選擇的特性,
  • 但是要注意,L1沒有選到的特徵不代表不重要,原因是連個具有高相關性的特徵可能只保留了一個,如果要確定哪個特徵重要應再通過L2正則方法交叉檢驗。
  • 具體來說,應該分別使用L1和L2擬合,如果兩個特徵在L2中係數相接近,在L1中一個係數為0一個係數不為0,那麼其實這兩個特徵都應該保留,原因是L1對於強相關特徵只會保留一個。

訓練能夠對特徵打分的預選模型:RandomForest和Logistic Regression等都能對模型的特徵打分,通過打分獲得相關性後再訓練最終模型

通過特徵組合後再來選擇特徵:如對使用者id和使用者特徵最組合來獲得較大的特徵集再來選擇特徵,這種做法在推薦系統和廣告系統中比較常見,這也是所謂億級甚至十億級特徵的主要來源,原因是使用者資料比較稀疏,組合特徵能夠同時兼顧全域性模型和個性化模型。

通過深度學習來進行特徵選擇:目前這種首都正在隨著深度學習的流行而成為一種手段,尤其是在計算機視覺領域,原因是深度學習(unsupervised feature learning)具有自動學習特徵的能力。從深度學習模型中選擇某一神經層的特徵後就可以用來進行最終目標模型的訓練。



特徵選擇常用演算法綜述

   特徵選擇的一般過程:
        1.  生成子集:搜尋特徵子集,為評價函式提供特徵子集
        2  .評價函式:評價特徵子集的好壞
        3.  停止準則:與評價函式相關,一般是閾值,評價函式達到一定標準後就可停止搜尋
        4.  驗證過程:在驗證資料集上驗證選出來的特徵子集的有效性 

        


生成子集    :  搜尋演算法有 完全搜尋、啟發式搜尋、隨機搜尋 三大類。

  • 完全搜尋
    • 廣度優先搜尋(Breadth First Search): 廣度優先遍歷特徵子空間。屬於窮舉(Exhaustive)搜尋,枚舉了所有特徵組合,時間複雜度O(n*n),實用度不高。又名寬搜。
    • 分支限界搜尋(Branch and Bound):在窮舉搜尋的基礎上加入分支限界。 例如:若斷定默寫分支不可能搜尋出比當前找到的最優解更優的解,則可以剪掉這些分支。
    • 定向搜尋(Beam Search):首先選擇N個得分最高的特徵作為特徵子集,將其加入一個限制最大長度的優先佇列,每次從佇列中取出得分最高的子集,然後窮舉向該子集加入1個特徵後產生的所有特徵集,將這些特徵集加入佇列。其實算是啟發式的一種,對寬搜加上每次展開結點數的限制以節省時間空間,對於展開哪幾個節點由啟發式函式確定
    • 最優優化搜尋(Best First Search):與定向搜尋相似,唯一不同電視不限制優先佇列的長度。

  • 啟發式搜尋
    • 序列前向選擇(SFS,Sequential Forward Seelction):特徵子集X從空集開始,每次選擇一個特徵x加入特徵子集X,使得特徵函式J(X)最優。簡單說就是,每次都選擇一個使得評價函式的取值達到最優的特徵加入,其實就是一種簡單的貪心演算法。缺點就是隻能加入特徵而不能去除特徵。例如:特徵A完全依賴於特徵B與C,可以認為如果加入了特徵B與C則A就是多餘的。假設序列前向選擇演算法首先將A加入特徵集,然後又將B與C加入,那麼特徵子集中就包含了多餘的特徵A。
    • 序列後向選擇(SBS,Sequential Backward Selection):從特徵全集O開始,每次從特徵集O中剔除一個特徵x,使得剔除特徵x後評價函式值達到最優。和SFS相反,從特徵全集開始,每次選擇使評價函式J(X)最優的特徵x剔除,也是貪心演算法,缺點是隻減不增。
    • 雙向搜尋(BDS,Bidirectional Search):使用SFS從空集開始,同時使用SBS從全集開始搜尋,當兩者搜尋到一個相同的特徵子集C時停止搜尋。雙向搜尋的出發點是。如下圖所示,O點代表搜尋七點,A點代表搜尋目標。灰色的圓代表單向搜尋可能的搜尋範圍,綠色的2個圓表示某次雙向搜尋的搜尋範圍,容易證明綠色的面積必定比灰色的要小。
    • 增L去R選擇演算法(LRS,Plus-L Minus-R Selection):該演算法有兩種形式,此演算法結合了SBS和SFS思想,L和R的選擇是關鍵。
      • 演算法從空集開始,每輪先加入L個特徵,然後從中去除R個特徵,使得評價函式值最優。(L>R)
      • 演算法從全集開始,每輪先去除R個特徵,然後加入L個特徵,使得評價函式最優。(L<R)

    • 浮動序列選擇(Sequential Floating Selection):序列浮動選擇由LRS發展而來,該演算法與LRS演算法不同之處在:序列浮動選擇的L與R不是固定的,而是“浮動”的,也就是會變化的。此演算法結合了SBS, SFS, LRS的特點,並彌補了它們的缺點。根據搜尋方向的不同,有以下兩種變種:
      • 序列浮動前向選擇(SFFS, Sequential Floating Forward Selection):從空集開始,每輪在未選擇的特徵中選擇一個子集x,使加入子集x後評價函式達到最優,然後在已選擇的特徵中選擇子集z,使剔除子集z後評價函式達到最優。
      • 序列浮動後向選擇(SBBS, Sequential Floating Backward Selection):從全集開始,每輪在已選擇的特徵中剔除一個子集z,使剔除子集z後評價函式達到最優,然後在未選擇的特徵中選擇子集x,使加入子集x後評價函式達到最優。

    • 決策樹(Decision Tree Mtehod,DTM):在訓練樣本集上執行C4.5或其他決策樹生成演算法,待決策樹充分生長後,再在樹上執行剪枝演算法。則最終決策樹各分支處的特徵(葉子)就是選出來的特徵子集了。決策樹方法一般使用Information Gain作為評價函式。


  • 隨機演算法
          隨機演算法的共同缺點:依賴於隨機因素,有實驗結果難以重現。
    • 隨機產生序列選擇演算法(RGSS, Random Generation plus Sequential Selection):隨機產生一個特徵子集,然後在該子集上執行SBS和SFS演算法。可作為SBS與SFS的補充,用於跳出區域性演算法。
    • 模擬退火演算法(SA,Simulated Annealing):一定程度上客服了序列搜尋演算法容易陷入區域性最優質的缺點,但是若最優解的區域太小(如“高爾夫球洞”地形),則模擬退火難以求解。
    • 遺傳演算法(GA,Genetic Algorithms):首先隨機產生一批特徵子集,並用評價函式給這些特徵子集評分,然後通過交叉、突變等操作繁殖出下一代的特徵子集,並且通過評分越高的特徵子集被選中參加繁殖的概率越高。這樣經過N帶的繁殖和優勝劣汰之後,種群中就可能產生了評價函式值最高的特徵子集。
部分內容來源於:http://www.cnblogs.com/IvanSSSS/p/4951758.html https://www.zhihu.com/question/28641663/answer/41653367