特徵篩選(上) — 混合式特徵篩選(Hybrid Feature Selection, HFS)
特徵篩選是機器學習中一強大的數據縮減技術,而混合式特徵篩選則是特徵篩選的進階版方法,研究顯示其不只可以降低模型的運算時間,還可以提高準確度,並協助使用者對模型結果的理解。
本篇的重點為混合式特徵篩選(Hybrid Feature Selection, HFS),是筆者碩士論文中所探討的重點,其概念是基本特徵篩選(Feature Selection)的進階版方法。特徵篩選的方法有非常多種,但在本文中只會針對筆者用過的方法進行介紹,並說明概念,不會有程式實戰的部分。
關於特徵篩選的基本介紹,可參考以下筆者曾寫過的一篇文章,該文章有針對基本特徵篩選的概念進行說明,並且實戰某篇paper所提及的方法。
本文中會引用基因演算法,但不會詳細說明步驟,因此有興趣的讀者可以自行查閱,以下是筆者之前寫過GA的文章。
本文接下來提到的所有文獻以及使用的方法均是以兩篇混合式特徵篩選的paper為主,其連結放在附錄[4]、[5],有興趣的讀者不妨可以自行查閱。
以下正文開始~
本文分成三部分介紹,依序為,使用特徵篩選的原因、演算法架構介紹以及步驟詳解。
一、使用特徵篩選的原因
筆者的研究背景是在不改變既有模型架構(使用深度學習網路)以及參數設定的前提下,使用特徵工程(Feature Engineering)的方法來提升模型判斷的準確度,而我最後則是鎖定了feature selection作為我研究的重點。
我在文獻研究中參考了[5]作者的做法,提出一使用雙向長短期記憶神經網路的混合式基因演算法(Hybrid Genetic Algorithm-Bidirectional Long Short-Term Memory, HGA-Bi-LSTM),結合了feature selection中過濾法(Filter method)和包裝法(Wrapper method)的特點來保留重要特徵。
重點來了,透過上述可知道我在研究中使用的模型是深度學習中的LSTM,然而深度學習網路是不需要進行feature engineering的,那我為何還要使用feature selection呢?因此在闡述研究重點之於,本研究還是需要專家論述、文獻探討部分的支持來進行研究,以下將簡略的將相關概念、專家看法、書籍等進行導入。
數據本質的重要性
現為Landing.AI主理人的吳恩達提到若將重點從單純開發模型、演算法轉移到數據本身,則機器學習的開發就會更進步。他也提到傳統軟體和AI的差異,前者是由代碼組成,後者則是代碼(包括模型與演算法)和數據組成,因此當系統表現不理想時,工程師會想透過改進代碼的方式來提升系統的表現,但以實際應用來說,更有效的方式應該是專注於數據的改進。其原話為:
“When a system isn’t performing well, many teams instinctually try to improve the code. But for many practical applications, it’s more effective instead to focus on improving the data,”
可解釋人工智慧的崛起
近年來可解釋人工智慧(Explainable AI, XAI)所受到的關注度越來越高,透過特定方法將機器學習的黑盒子打開,讓使用者能夠更理解AI執行過程的方法與技術。
以可解釋AI在維基百科[1]所提到的例子來說明,假如設計者要求模型「在資料集裡面精準分析電影如何被正面評價」,此時,AI可能會找到一些通則,像是「評價中包含『爛』這個字眼表示是負面評價」,或是可能找到一些不正確的規則,比如「評價中包含『李小龍』這個字眼表示是正面評價」;這些規則可能難以解釋,甚至很可能在其他資料集得到錯誤的判斷,例如你很可能無法在《教父》的電影評價裡看到「李小龍」的字眼,但這不表示它是部爛片。針對這類問題,人類就能透過可解釋AI的技術來監督AI系統所找到的規則,並且判斷這些規則在真實的世界裡是否適用。
文獻[3]的作者提到,可藉由提供模型特徵相關性的解釋以及其他相關技術來解決可解釋AI的問題,其中重要特徵的選取以及冗餘特徵的消除是該概念的主要基礎。
特徵篩選的重要性
除了剛剛提及數據本質的重要性以及可解釋AI的崛起外,最後一個重點還是要回歸到使用feature selection的意義。
Keras大神François Chollet在他出版的書[2]提到機器學習(Machine Learning)和深度學習(Deep Learning)最大的差異在於DL將機器學習中feature engineering的步驟完全自動化,因此DL能更容易地解決問題。
即使DL技術減少了對feature engineering的需求,但作者也提到並不是只要使用深度神經網路,就可以完全不用feature engineering,這答案是否定的,主要原因有二:
- 良好的特徵允許在使用更少資源的同時更有效地解決問題。
- 良好的特徵可以用更少的資料解決問題。DL模型自己學習特徵的能力是依賴於大量的訓練資料,如果只有少量樣本,則其特徵中的資訊變得至關重要。
本篇文章所要探討的主題是離不開上述提及的全部重點,包括探討數據的本質,給予人工智慧可解釋性,以及應證深度學習對於特徵工程仍無法全面的進行自動化。而下一節將針對HFS的架構與方法進行介紹。
二、演算法架構介紹
在眾多混合式特徵篩選方法中,最常見的就是過濾法(Filter method)和包裝法(Wrapper method)的混合版本,首先簡單複習一下過濾法和包裝法各自的方法及特點:
- 過濾法:主要是依據特徵與目標變量的相關性對各個特徵進行統計指標的評分,並設定門檻值或是預選取特徵之個數來決定最佳特徵集合。優點為速度快、能一次處理全部特徵,然而其篩選過程和演算法模型評估是分開進行的關係,因此選出的特徵集合也有可能不是最合適的。
- 包裝法:為特徵選擇和模型評估同時進行的方法,通常以一目標函式作為標準來選取特徵,而不是直接設定一評估指標。藉由輸入各種組合的特徵子集合至演算法訓練、並找出最合適的結果。但由於嘗試組合過多,故缺點為運行時間過長、計算成本過高,且容易使模型過度擬合(Overfitting)。
簡單整理可知,過濾法的優點為速度快,但缺點是容易忽略重要特徵,包裝法優點則是能到合適的特徵,但缺點為運行時間過長,且具有潛在過擬合的可能性。
而本節開頭所提到常見混合式方法就是利用這兩種方法各別的優勢進行互補,經驗證可大幅提高整體特徵篩選的效率以及模型準確率。
HFS流程架構
將預篩選的原始特徵集合(Original Feature Subset)輸入至第一階段的過濾法中,並產出一縮減的特徵集合(Reduced Feature Subset)後,再將其輸入至第二階段的包裝法中,最後得到保留優秀特徵的特徵集合(Final Feature Subset)。
可大致理解為使用過濾法預先選擇出關聯性排名較高的特徵,藉以提高包裝法中模型準確度的計算以及縮短整體演算法的計算速度。
以下則是第一部分提到HGA-Bi-LSTM的完整架構,在過濾法中使用了早期經驗(Earlier experience)和相關性衡量(Correlation-based)的方法,包裝法則是使用基因演算法(Genetic Algorithm)。
Wrapper method中的GA則是透過將feature subset輸入至Bi-LSTM模型來計算fitness,在下一節終會特別說明。
三、步驟詳解
本節將會針對演算法流程的各個步驟進行詳解、說明,包括資料型態的分類、第一階段 — 過濾法以及第二階段 — 包裝法。
資料型態的分類
之所以將這部分特別挑出來講,是因為這部分將決定第一階段過濾法將使用的方法,其對後續步驟來說可謂是非常地重要。
特徵形態的不同,將決定使用何種方法去評量其與目標特徵間的相關性。如我上一篇提到,特徵均為離散變量(Discrete Variables)時,使用對稱不確定性(Symmetrical Uncertainty) 作為相關性的衡量標準,特徵均為連續變量(Continuous Variables)時,則使用 Pearson’s correlation coefficient 作為相關性的衡量標準。
當然本篇也不會特別探討如何辨別資料型態,重點只在於將資料正確的歸類,將有助於之後方法判斷的準確性。對這部分有興趣的讀者可以參照下面這張圖,或是參照這張圖的來源,會非常有幫助的:
第一階段 — 過濾法
本階段任務是從原始特徵中透過使用各種統計指標給予相關性、評分的方式找出價值較高的特徵。
在上一節已經知道並沒有任何方法是適應各種資料型態的。那究竟該使用何種方法?哪種方法效率最高呢?過去有人提到一個策略為,拿到資料後先測試幾種固有的演算法,並查看結果,並把表現理想的結果進行保留。然而這個方法對混合式的特徵篩選版本來說也只是做到一半而已。
- 常見的評量指標有:Pearson correlation coefficient、Spearman correlation coefficient、Kendall correlation coefficient、Information Gain、Gain Ratio、F-score、Fisher Score等等…。
筆者的研究除了針對不同資料型態的特徵套入指定的評量指標外,還使用了第二部分提到的方法 — 早期經驗(Earlier experience),該方法透過文獻的引用或是專家建議來保留重要特徵,除了可以節省搜索時間外,對於後續包裝法也有非常大的幫助。
當然不論是透過何種方式選擇的特徵,均都有其獨到的考量因素,因此為了更全面地保留各個評估指標的結果,研究文獻提到使用聯集(Union)將結果一齊放入特徵池(Feature Pool)中。
而該feature pool中所有的特徵就是下一階段包裝法要進行篩選的特徵集合。
第二階段 — 包裝法
相較前一階段會稍顯複雜些,主要是從feature pool中所有有價值的特徵中挑選出表現最好的特徵組合(Optimal feature subset),feature pool 的出現縮小了可行解的搜索空間。
使用經過濾法預先挑選的特徵,能大幅度地減低演算法運行時間,例如真實資料所提供的原始資料特徵可能達高達上千、上萬種,將其套入至包裝法可說是徒勞的,在各種子集合都要嘗試的情況下,所花費的時間無法估量,而在配合過濾法設定閥值、門檻的情況下挑選出優秀特徵集合,可大幅減少包裝法所需的運行時間。
包裝法中做法有分以下幾種,分別為窮舉搜索(Exhaustive search)、順序搜索(Sequential Search)和啟發式搜索(Heuristic Search)。
- 若原始特徵較少可使用Exhaustive search和Sequential Search,其中常見的方法包括Forward Selection、Backward Selection、Best First Search、Recursive feature elimination等;如果特徵太多則可使用Heuristic Search,方法包括Genetic Algorithm、Tabu Search等等的應用。
接下來會針對基因演算法(Genetic Algorithm, GA)作為包裝法的一種進行介紹。GA作為啟發式搜索演算法已經是各領域的常客了,除了參數設計的彈性之外,也會對有希望的區域進行搜索,並保存多個最佳解。特徵篩選領域已有非常多研究將GA成功應用並取得不錯的成果,除了附錄[4,5]的論文外,還有非常多應用的案例。
文獻[5]中提到一HFS方法 — 混合基因演算法與神經網路(Hybrid genetic algorithm with neural networks, HGA-NN),即在GA演算的流程中使用一般神經網路進行fitness的計算。我的論文中則是選取雙向長短期記憶神經網路(Bidirectional Long Short-Term Memory, Bi-LSTM)來作為求取fitness必要參數的Learning Algorithm。
和文獻[5]不同,該作者使用增強型GA於包裝法中,但由於原始特徵數不多的緣故,因此使用的是基本的GA來進行optimal feature subset的搜索,架構如下:
首先是從feature set(也就是feature pool)中隨機挑選特徵來生成指定數量的子集合以形成population,並輸入至Bi-LSTM中訓練求取指定的檢驗指標來計算fitness,再按照GA的基本流程也就是selection、crossover & mutation來生成子代,重複這些步驟直到達到終止條件為止,即可輸出optimal feature subset。
當然除了上述介紹的架構,還有Initial population的限制、Learning Algorithm選擇、fitness函數設定、終止條件等等都是研究、實驗的重點,由於本文只以說明概念為主,因此這部分的介紹就會留到下篇進行分享,寫完後筆者也會將連結放上來~
結語
碩士畢業後耍廢了好久才又開始寫文章哈哈,想說趁還沒入伍的時候,趕快把論文研究的東西寫上來分享,也希望看到這裡對你有很大的幫助。
最後,feature selection在機器學習中其實是一門很有趣的學問,看似簡單、容易實現,實則還是有許多不合理之處,還等著我們去探討,雖然這概念在上世紀90年代就有人提出,但至今都仍還是在研究階段,也希望有興趣的讀者可以接棒下去研究囉~
References
- 維基百科 — 可解釋人工智慧
- Deep learning 深度學習必讀:Keras 大神帶你用 Python 實作
- An automated feature selection and classification pipeline to improve explainability of clinical prediction models (Moreno-Sanchez, P. A., 2021)
- A genetic algorithm-based method for feature subset selection
- Genetic algorithm-based heuristic for feature selection in credit risk assessment
- Big Data To Good Data: Andrew Ng Urges ML Community To Be More Data-Centric And Less Model-Centric