我們將屬性稱為「特徵」(feature),對當前學習任務有用的屬性稱為「相關特徵」(relevant feature)、沒什麼用的屬性稱為「無關特徵」(irrelevant feature)。
從給定的特徵集合中選擇出相關特徵子集的過程,稱為「特徵選擇」(feature select)。
為什麼要進行特徵選擇?
第一,為了處理維數災難(減輕維數災難的另一種方法是降維);
第二,去除不相關特徵以及冗餘特徵,降低學習任務的難度。
特徵選擇的一般過程:
首先從特徵全集中產生出乙個特徵子集,然後用評價函式對該特徵子集進行評價,評價的結果與停止準則進行比較,若評價結果比停止準則好就停止,否則就繼續產生下一組特徵子集,繼續進行特徵選擇。選出來的特徵子集一般還要驗證其有效性。
綜上所述,特徵選擇過程一般包括產生過程,評價函式,停止準則,驗證過程,這4個部分。
2.1 產生過程:搜尋特徵子集。
子集搜尋(subset search):給定特徵集合。
前向搜尋:將每個特徵看做乙個候選子集,對這d個候選單特徵自己進行評價。
從單特徵子集開始逐漸增加特徵,每次增加乙個特徵,使得每次增加特徵後的子集優於之前的子集,直到最優的候 選子集不如前一輪的子集時,停止增加子集。
後向搜尋:從完整的特徵集開始,每次嘗試去掉乙個無關特徵。
搜尋演算法分類:搜尋的演算法分為完全搜尋(complete),啟發式搜尋(heuristic),隨機搜尋(random) 3大類。1)完全搜尋:窮舉搜尋(exhaustive)與非窮舉搜尋(non-exhaustive)兩類。
(1) 廣度優先搜尋( breadth first search )
演算法描述:廣度優先遍歷特徵子空間。
演算法評價:列舉了所有的特徵組合,屬於窮舉搜尋,時間複雜度是o(2n),實用性不高。
(2)分支限界搜尋( branch and bound )
演算法描述:在窮舉搜尋的基礎上加入分支限界。例如:若斷定某些分支不可能搜尋出比當前找到的最優解更優的解,則可以剪掉這些分支。
(3) 定向搜尋 (beam search )
演算法描述:首先選擇n個得分最高的特徵作為特徵子集,將其加入乙個限制最大長度的優先佇列,每次從佇列中取出得分最高的子集,然後窮舉向該子集加入1個特徵後產生的所有特徵集,將這些特徵集加入佇列。
(4) 最優優先搜尋 ( best first search )
演算法描述:與定向搜尋類似,唯一的不同點是不限制優先佇列的長度。
2)啟發式搜尋
(1)序列前向選擇( sfs , sequential forward selection )
演算法描述:特徵子集x從空集開始,每次選擇乙個特徵x加入特徵子集x,使得特徵函式j( x)最優。簡單說就是,每次都選擇乙個使得評價函式的取值達到最優的特徵加入,其實就是一種簡單的貪心演算法。
演算法評價:缺點是只能加入特徵而不能去除特徵。例如:特徵a完全依賴於特徵b與c,可以認為如果加入了特徵b與c則a就是多餘的。假設序列前向選擇演算法首先將a加入特徵集,然後又將b與c加入,那麼特徵子集中就包含了多餘的特徵a。
(2)序列後向選擇( sbs , sequential backward selection )
演算法描述:從特徵全集o開始,每次從特徵集o中剔除乙個特徵x,使得剔除特徵x後評價函式值達到最優。
演算法評價:序列後向選擇與序列前向選擇正好相反,它的缺點是特徵只能去除不能加入。
另外,sfs與sbs都屬於貪心演算法,容易陷入區域性最優值。
(3) 雙向搜尋( bds , bidirectional search )
演算法描述:使用序列前向選擇(sfs)從空集開始,同時使用序列後向選擇(sbs)從全集開始搜尋,當兩者搜尋到乙個相同的特徵子集c時停止搜尋。
(4) 增l去r選擇演算法 ( lrs , plus-l minus-r selection )
該演算法有兩種形式:
<1> 演算法從空集開始,每輪先加入l個特徵,然後從中去除r個特徵,使得評價函式值最優。( l> r )
<2> 演算法從全集開始,每輪先去除r個特徵,然後加入l個特徵,使得評價函式值最優。( l< r )
演算法評價:增l去r選擇演算法結合了序列前向選擇與序列後向選擇思想, l與r的選擇是演算法的關鍵。
(5) 序列浮動選擇( sequential floating selection )
演算法描述:序列浮動選擇由增l去r選擇演算法發展而來,該演算法與增l去r選擇演算法的不同之處在於:序列浮動選擇的l與r不是固定的,而是「浮動」的,也就是會變化的。
序列浮動選擇根據搜尋方向的不同,有以下兩種變種。
<1>序列浮動前向選擇( sffs , sequential floating forward selection )
演算法描述:從空集開始,每輪在未選擇的特徵中選擇乙個子集x,使加入子集x後評價函式達到最優,然後在已選擇的特徵中選擇子集z,使剔除子集z後評價函式達到最優。
<2>序列浮動後向選擇( sfbs , sequential floating backward selection )
演算法描述:與sffs類似,不同之處在於sfbs是從全集開始,每輪先剔除特徵,然後加入特徵。
演算法評價:序列浮動選擇結合了序列前向選擇、序列後向選擇、增l去r選擇的特點,並彌補了它們的缺點。
(6) 決策樹( decision tree method , dtm)
演算法描述:在訓練樣本集上執行c4.5或其他決策樹生成演算法,待決策樹充分生長後,再在樹上執行剪枝演算法。則最終決策樹各分支處的特徵就是選出來的特徵子集了。決策樹方法一般使用資訊增益作為評價函式。資訊增益越大,意味著特徵子集包含的有助於分類的資訊越多。
3)隨機演算法
(1) 隨機產生序列選擇演算法(rgss, random generation plus sequential selection)
演算法描述:隨機產生乙個特徵子集,然後在該子集上執行sfs與sbs演算法。
演算法評價:可作為sfs與sbs的補充,用於跳出區域性最優值。
(2) 模擬退火演算法( sa, simulated annealing )
模擬退火演算法可參考 大白話解析模擬退火演算法 。
演算法評價:模擬退火一定程度克服了序列搜尋演算法容易陷入區域性最優值的缺點,但是若最優解的區域太小(如所謂的「高爾夫球洞」地形),則模擬退火難以求解。
(3) 遺傳演算法( ga, genetic algorithms )
遺傳演算法可參考 遺傳演算法入門 。
演算法描述:首先隨機產生一批特徵子集,並用評價函式給這些特徵子集評分,然後通過交叉、突變等操作繁殖出下一代的特徵子集,並且評分越高的特徵子集被選中參加繁殖的概率越高。這樣經過n代的繁殖和優勝劣汰後,種群中就可能產生了評價函式值最高的特徵子集。
隨機演算法的共同缺點:依賴於隨機因素,有實驗結果難以重現。
2.2 評價函式
評價函式的作用是評價產生過程所提供的特徵子集的好壞。
過濾式特徵選擇:「過濾式」方法首先對資料集進行特徵選擇,然後在訓練學習器,因此特徵選擇過程與後續學習器的訓練無關。
其主要思想是:對每一維的特徵「打分」,即給每一維的特徵賦予權重,這樣的權重就代表著該維特徵的重要性,然後依據權重排序。
主要的方法有:
比較著名的方法是relief(relevant features)方法
包裹式特徵選擇:與過濾式特徵選擇不考慮後續學習器不同,包裹式特徵選擇直接把最終將要使用的學習器的效能作為特徵子集的評價準則。
其主要思想是將子集的選擇看作是乙個搜尋尋優問題,生成不同的組合,對組合進行評價,再與其他的組合進行比較。
這樣就將子集的選擇看作乙個優化問題,這裡有很多的優化演算法可以解決,尤其是一些啟發式的優化演算法,如ga,pso,de,abc等,詳見「優化演算法——人工蜂群演算法(abc)」,「優化演算法——粒子群演算法(pso)」。
過濾式由於與具體的分類演算法無關,因此其在不同的分類演算法之間的推廣能力較強,而且計算量也較小。
而包裹式由於在評價的過程中應用了具體的分類演算法進行分類,因此其推廣到其他分類演算法的效果可能較差,而且計算量也較大。
嵌入式特徵選擇:
嵌入式特徵選擇是將特徵選擇過程與學習器訓練過程融為一體,兩者在同乙個優化過程中完成,即在學習器訓練過程中自動地進行了特徵選擇。
其主要思想是:在模型既定的情況下學習出對提高模型準確性最好的屬性。即在確定模型的過程中,挑選出那些對模型的訓練有重要意義的屬性。
主要方法有:嶺回歸(ridge regression),嶺回歸就是在基本線性回歸的過程中加入了l2正則項。
具體特徵選擇演算法細節參見:
常用的特徵選擇演算法介紹
資料探勘筆記-特徵選擇-演算法實現-1
特徵選擇方法總結
1 方差篩選法 移除低方差的特徵。低方差說明特徵比較均勻,區分度低。如,一列數值全為1,則這列數值的方差為0。這一列特徵對於訓練模型是沒有意義的。使用方差篩選法的 from sklearn.feature selection import variancethreshold 6個樣本,3維的特徵向量...
特徵選擇方法總結
摘要 1.特徵選擇的功能 3.過濾特徵選擇 filter feature select 4.嵌入特徵選擇 embeding feature select 內容 1.特徵選擇的功能 減少特徵數量 降維,使模型泛化能力更強,減少過擬合 增強對特徵和特徵值之間的理解 特徵選擇的目標是尋找最優特徵子集。特徵...
STL相關容器特徵總結
1.vector vector對於資料的操作,與array比較相似,都是乙個連續線性空間。差別在於array申請完空間後就不能進行改變,而vector可以進行動態的控制。2.stack 堆 stack是乙個先進後出的資料結構。它只有乙個出口,所以它是沒有遍歷這個行為的。3.queue 佇列 queu...