資料前處理-特徵工程

Yasmine Cheng
數據領航員
Published in
10 min readJun 10, 2022

文/鄭雅綿吳啓榮 共同編寫;主編/鄭雅綿

目錄

前言
為什麼要找出特徵
特徵建構
特徵轉換
特徵提取
特徵選取
總結
參考資料

前言

~~~本篇著重於特徵工程概念上的理解,欲了解詳細個別技術的讀者可以自行深入探索,在此不會過多著墨技術細節~~~

機器學習建模的流程大致再幫讀者複習一下,如下圖所示。

機器學習建模流程

而本篇文章主要是鎖定在資料前處理中的特徵工程階段。特徵工程階段若再細分的話,可以分成

  • 特徵構建(Feature Creation)
  • 特徵轉換(Transformations)
  • 特徵提取(Feature Extraction)
  • 特徵選擇(Feature Selection)

為什麼要找出特徵?

特徵為什麼如此重要呢?還特別需要有個步驟將它萃取出來?

首先,若在進行建模時,input的資料量大小是會影響到運算效能及時間的,雖說資料量越多,建出的模型及預測效果也會大大提升,但是資料的筆數及向量是兩碼子事,因此可以縮減的話,是不會影響到預測效果又可以縮短時間的。同時也可解決 underfitting 的問題。

二來,若將冗贅的特徵刪除,在後續解釋性上也可幫助研究人員理解,避免為不重要的特徵想出合理性。

☞underfitting(欠擬和):缺少學習訓練資料,模型沒辦法很準確地解釋資料之間的關係,有可能是選擇的特徵過少,也可能是迭代的次數不夠。如果比喻成唸書的狀況,可以說是考生在應付平時的小考時,就已經準備不足了,所以就不要說是對付期中期末考,或是更大的升學考試。

摘錄自[Day 24] 機器學習 — 不能忽視的過擬合與欠擬合

特徵建構(Feature Creation)

特徵建構的處理是主觀的,利用對模型的理解與 Domain Knowledge (領域知識),將特徵之間做「加、減、乘、除」等等的操作,去建構適合模型的特徵。

範例:

我們以 covid-19 全球疫情地圖 的資料為例,在各縣市每日新增確診人數圖表中,我們可以發現,由於每個縣市的人口總數都不相同,導致有些人口數小的縣市會被擠在下方,不易觀察。

Source

因此我們將資料下載後,依兩條件篩選

  1. 個案公佈日: 2022–05 月資料
  2. 區域:全區(各縣市全區)

再搭配內政部的縣市人口數資料,合併「區域人口數」欄位,將資料整理成以下格式。

為了查看「各縣市確診累計比例」,將「累計確診人數欄位」除以「區域人口數」,建構新的欄位「covid_ratio」。

透過視覺化可以更清楚看出「新北市與基隆市的確診比例是最高的兩縣市」

完整程式碼:

特徵轉換(Transformations)

特徵轉換是將特徵範圍、特徵分佈進行轉變,以符合易於模型理解的樣貌。最常見的是將特徵欄位進行標準化或正規化,讓數值型特徵縮放到同樣的範圍;而有些統計或機器學習會要求目標欄位需符合常態分佈,那就需要對資料偏態進行矯正。詳細的內容會在後續的文章中提到。

對於類別型欄位,則很常會用到 one-hot encoding 的特徵轉換,讓特徵能夠以數值形式傳入模型。

Source

特徵提取(Feature Extraction)

特徵提取會從原始欄位提取出新的特徵,與特徵建構不同的地方是,特徵提取主要是「降低」資料的欄位數,將最符合最代表資料的內涵萃取出來,比如說透過分群的手法減少特徵,或著是很常使用到的非監督式降維 PCA 、監督式 LDA 降維,前者會找到最大變異量的特徵空間;而後者則是最大化目標欄位與資料點的區分。後續一樣會有文章專門介紹。

Source

特徵選取(Feature Selection)

接著,為大家介紹特徵選取的方式~

特徵選取的方式共分為三種,分別為過濾法(filter)、嵌入法(embedded)和包裝法(wrapper),會依照特徵是否有發散、特徵和目標結果是否有相關性來決定保留與否。

☞特徵發散:若某特徵並無發散,則表示變異程度為零,因此有無此特徵都不會有影響,則可踢除掉。

☞特徵和目標有相關性:若欲分析的目標和其中的屬性有相當大的關聯,則該特徵就更應該保留下來,代表可能有很強烈直接或間接的影響關係。

  • 過濾法(filter)
    依發散性或相關性來對特徵進行評分,並設定閾值(threshold)或者待選擇閾值的個數來選擇特徵。會需要使用到許多的統計指標進行評分,例如:方差選擇法(Variance Threshold)會選擇方差低的特徵進行刪除(如果幾乎全部的資料都具有某個特徵或是某個特徵都是相同的值,則有與沒有並無差別)、相關性過濾法中的皮爾森相關係數(Pearson correlation coefficient)可檢驗出兩特徵是否存在相當高的關聯性,計算的值會介於-1~1之間,1表正相關、0表兩者獨立、-1表負相關。若存在高度相關,則可不需保留許多相似的特徵。

☞方差選擇法(Variance Threshold)
特別注意在使用此方法前,需要先進行 transformation 底下的標準化動作,因需先將數值調整到相同的值範圍內,否則,方差估計可能會在數值較大的特徵和較小的特徵之間產生誤差。可使用 scikit-learn 中的 MinMaxScaler、RobustScaler或 StandardScaler等來完成。

Github Link

☞相關性過濾法
可用來探討兩特徵之間的相關程度,兩特徵越相關則越偏向1,越不相關則越偏向-1,而除了上述舉例的皮爾森相關係數,還有F-Score等其他數學運算指標可作使用。若想觀察整份資料集中所有特徵之間的相關程度,通常會使用相關矩陣(Correlation Matrix)表示,亦或是以heatmap圖表的形式表達。

皮爾森相關係數算式
相關矩陣範例圖(顏色越偏藍表示越相關)
  • 嵌入法(embedded)
    會同時進行模型訓練和特徵選擇,在訓練模型時得到各個特徵的權值係數,根據權值係數從大到小排序選擇特徵。而權值係數就表示每個特徵對於模型的重要性。和過濾法其實很像,只不過是換成以訓練模型的方式來進行選擇。
  • 包裝法(wrapper)
    用各種特徵的組合來進行模型學習並進行特徵的選擇。會先將資料集拆分成很多種特徵的組合(又稱子集合),在使用驗證資料集為每一種拆分都給出評分。不同於過濾法的是閥值並非人工設定出來的,是仰賴模型、目標函示自己訓練出來的,有點像是嵌入法的進化。不僅挑選出哪個特徵重要,也可得知以多少個特徵表示是效果最好的。不過這樣的方法也會花上相對較大的效能。(畢竟要跑出很多種的組合^^)

☞遞迴特徵消除 (Recursive Feature Elimination)
為包裝法的其中一種,是使用一個基本的模型架構來進行多輪訓練(迭代的概念),每輪訓練後會移除若干權值係數的特徵,再基於新的特徵集進行下一輪的訓練,直到達到了指定的特徵數量(並非人工設定出的),而排序的基準為模型的coef_feature_importances_屬性。

Github Link

☞閾值(threshold):類似限制數量的意思,假設閾值設定為5,則最多只選五個特徵~

總結

以上就是特徵選擇的介紹拉~介紹到了為什麼要做這個步驟以及可以怎麼做,大家又完成了一個建模的流程了,下個主題會為大家帶來的是資料前處理中標準化等的介紹,也是第二大段中提到的underfitting和overfitting相關內容,大家可以期待一下^^

參考資料

教育部補助大專院校STEM領域及女性研發人才培育計畫目標為建構一個「以智慧物聯技術與實務應用為基礎的教育環境和實作場域」,並規劃出符合此STEM教育領域的創新特色課程,以畢業前進入企業實習的方式,讓學生了解相關產業界所面對的問題,再輔以業界實作場域的教育訓練活動,共同帶領學生發展出動手做、判斷與解決問題的相關技能;本計畫也規劃讓學生以專題實作的組隊方式,跟業界協力領導學生對外參與智慧物聯技術的應用競賽,不僅可以累積學生實務開發的能力,更能激發其潛能來幫助企業解決所面臨的難題。

Data Science Meetup 台灣資料科學社群的使命是「為資料科學人士與企業創建經濟機會」。我們相信大數據蘊藏著巨量的信息和價值,如何處理好大數據並發掘其潛藏的商業價值,就要靠資料科學有效的應用。21世紀是資料科學決勝時代,我們社群將為大家提供與資料科學相關的最新技術和資訊實戰攻略,並透過全球業界人士和學者幫助相關職業規劃與挑戰,社群活動包含

  • 台北實體版聚
  • 線上版聚
  • Mentorship Program

歡迎加入我們社團瞭解更多資訊: https://www.facebook.com/groups/datasciencemeetup/

--

--

Yasmine Cheng
數據領航員

NLP Lab @ SCU | Data Science | to be a nlper 💻 Linkedin:Ya Mian(Yasmine) Cheng Github:Yasmine-Cheng