機器學習之特徵工程

Lois發表於2020-06-14

目錄大綱

  • 特徵工程是什麼?
  • 特徵工程的重要性
  • 特徵工程子問題:
    1.特徵處理
    2.Feature Selection(特徵選擇)
    3.Feature Extraction(特徵提取)
    4.Feature construction(特徵構造)

特徵工程的思維導圖:

7260028-8f5907422b301244.jpg
如果瀏覽,建議下載到本地檢視

特徵工程是什麼?

想要預測模型效能達到最佳時,你要做的不僅是要選取最好的演算法,還要儘可能的從原始資料中獲取更多的資訊。應該如何為預測模型得到更好的資料呢?
簡而言之,特徵工程就是一個把原始資料轉變成特徵的過程,這些特徵可以很好的描述這些資料,並且利用它們建立的模型在未知資料上的表現效能可以達到最優(或者接近最佳效能)。

特徵工程的重要性

坊間常說:“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已”。由此可見,特徵工程在機器學習中佔有相當重要的地位。在實際應用當中,可以說特徵工程是機器學習成功的關鍵。

首先,我們大家都知道,資料特徵會直接影響我們模型的預測效能。你可以這麼說:“選擇的特徵越好,最終得到的效能也就越好”。這句話說得沒錯,但也會給我們造成誤解。事實上,你得到的實驗結果取決於你選擇的模型、獲取的資料以及使用的特徵,甚至你問題的形式和你用來評估精度的客觀方法也扮演了一部分。此外,你的實驗結果還受到許多相互依賴的屬性的影響,你需要的是能夠很好地描述你資料內部結構的好特徵。

(1)特徵越好,靈活性越強:
只要特徵選得好,即使是一般的模型(或演算法)也能獲得很好的效能,因為大多數模型(或演算法)在好的資料特徵下表現的效能都還不錯。好特徵的靈活性在於它允許你選擇不復雜的模型,同時執行速度也更快,也更容易理解和維護。

(2)特徵越好,構建的模型越簡單:
有了好的特徵,即便你的引數不是最優的,你的模型效能也能仍然會表現的很nice,所以你就不需要花太多的時間去尋找最有引數,這大大的降低了模型的複雜度,使模型趨於簡單。

(3)特徵越好,模型的效能越出色
顯然,這一點是毫無爭議的,我們進行特徵工程的最終目的就是提升模型的效能。

特徵工程子問題

特徵工程主要包括:

  • 特徵處理
  • Feature Selection(特徵選擇)
  • Feature Extraction(特徵提取)
  • Feature construction(特徵構造)

1. 特徵處理

特徵處理分類

特徵處理分為:數值型,類別型,時間型,文字型,統計型和組合特徵

1)數值型
  • 幅度調整,歸一化:幅度常控制在[0,1]
  • 離散化:連續值分段變成類別型,1個值對映為一個向量,離散化後引入非線性,如年齡為變數,可讓老人和小孩同時獲得高權重
2)類別型
  • one-hot編碼/啞變數:如小孩,青年,老人->[1,0,0],[0,1,0],[0,0,1]

  • hash分桶(類別很多,較稀疏):

    • 例1:使用聚類將userId根據某些特徵分為幾類
    • 例2:如下圖是將一個詞典分成三個桶,每個桶可能代表某個領域內的詞,兩句話如果在同一個同中出現的單詞數相同,可能說明他們在某一領域內指代性相同,為每句話構造了一個新向量


      7260028-e0badd84d02ebd92.jpg
      hash分桶
  • Histogram對映:把某個特徵與target做後驗關聯度的統計,以統計量表示該特徵

    • 例子:如特徵-男/女,target-愛好,統計P(愛好|性別),得到 男:[1/3,2/3,0],可表示男生1/3喜歡散步,2/3喜歡足球,沒有喜歡看電視劇;用愛好比例對性別進行編碼,得到的統計特徵之間map到特徵向量中,可以與原性別特徵[1,0]同時存在

3)時間型

  • 時間型特徵可分為數值型和類別型,時間型資料可以表示不同時間人們心態和行為存在差別,可用於區分人群,商品推薦等
  • 數值型:網頁停留時間,上次瀏覽離現在間隔時間
  • 類別型:月、周、日、時等

4)文字型

  • 詞袋(去停用詞)、word2vec

  • TF-IDF權重

    :表示一個詞對一個樣本或樣本集的重要程度

    • TF(w)=(詞w在當前文中出現的次數)/(w在全部文件中出現的次數)
    • IDF(w)=ln(總文件數/含w的文件數)
    • TF-IDF權重: TF*IDF

5) 統計型

  • 統計特徵與業務的契合度高
  • 加減平均:商品價格超平均價格,連續登陸天數超平均,商品出售超平均編碼
  • 分位線:商品價格分位線體現使用者的購買能量
  • 次序型、比例型

6)組合型

  • 拼接型:如userId&&category拼接可以為某個使用者建立個性化特徵
  • 模型特徵組合:如GBDT產出的特徵組合路徑,路徑命中為1,否則為0
  • 組合特徵和原始特徵一起放進LR中訓練

2. 特徵選擇 Feature Selection

為什麼做特徵選擇:

在機器學習的實際應用中,特徵數量往往較多,其中可能存在不相關的特徵,特徵之間也可能存在相互依賴,容易導致如下的後果:

  • 特徵個數越多,分析特徵、訓練模型所需的時間就越長。
  • 特徵個數越多,容易引起“維度災難”,模型也會越複雜,其推廣能力會下降。

特徵選擇能剔除不相關(irrelevant)或亢餘(redundant )的特徵,從而達到減少特徵個數,提高模型精確度,減少執行時間的目的。另一方面,選取出真正相關的特徵簡化了模型,使研究人員易於理解資料產生的過程。
資料預處理完成之後,我們需要選擇有意義的特徵,輸入機器學習的演算法和模型進行訓練,通常來說,從兩個方面考慮來選擇特徵:

  • 是否發散
  • 是否相關

特徵選擇的三種方法:

1. Filter方法

其主要思想是:對每一維的特徵“打分”,即給每一維的特徵賦予權重,這樣的權重就代表著該維特徵的重要性,然後依據權重排序。它主要側重於單個特徵跟目標變數的相關性。
優點:計算時間上較高效,對於過擬合問題也具有較高的魯棒性。
缺點:傾向於選擇冗餘的特徵,因為他們不考慮特徵之間的相關性,有可能某一個特徵的分類能力很差,但是它和某些其它特徵組合起來會得到不錯的效果。

主要的方法有:

  • Variance selection (方差選擇法)

使用方差選擇法,先要計算各個特徵的方差,然後根據閾值,選擇方差大於閾值的特徵。

  • Chi-squared test (卡方檢驗)

經典的卡方檢驗是檢驗定性自變數對定性因變數的相關性。假設自變數有N種取值,因變數有M種取值,考慮自變數等於i且因變數等於j的樣本頻數的觀察值與期望的差距,構建統計量:

7260028-2efe24d5c16ef424.jpg
卡方檢驗

 不難發現,這個統計量的含義簡而言之就是自變數對因變數的相關性

  • information gain (資訊增益)

經典的互資訊(資訊增益)也是評價定性自變數對定性因變數的相關性的,互資訊計算公式如下:


7260028-5f863e862376e33a.jpg
資訊增益公式

2. Wrapper方法

其主要思想是:將子集的選擇看作是一個搜尋尋優問題,生成不同的組合,對組合進行評價,再與其他的組合進行比較。這樣就將子集的選擇看作是一個優化問題,這裡有很多的優化演算法可以解決,尤其是一些啟發式的優化演算法,如GA,PSO,DE,ABC等;詳見“優化演算法——人工蜂群演算法(ABC)”,“ 優化演算法——粒子群演算法(PSO) ”。

wrapper方法實質上是一個分類器,封裝器用選取的特徵子集對樣本集進行分類,分類的精度作為衡量特徵子集好壞的標準,經過比較選出最好的特徵子集。常用的有逐步迴歸(Stepwise regression)、向前選擇(Forward selection)和向後選擇(Backward selection)。
優點:考慮了特徵與特徵之間的關聯性
缺點:當觀測資料較少時容易過擬合,而當特徵數量較多時,計算時間又會增長。

主要方法有:

recursive feature elimination algorithm(遞迴特徵消除演算法)

遞迴消除特徵法使用一個基模型來進行多輪訓練,每輪訓練後,消除若干權值係數的特徵,再基於新的特徵集進行下一輪訓練。

3. Embedded方法

其主要思想是:在模型既定的情況下學習出對提高模型準確性最好的屬性。這句話並不是很好理解,其實是講,在確定模型的過程中,挑選出那些對模型的訓練有重要意義的屬性。

主要方法:

  • 基於懲罰項的特徵選擇法
  • 基於樹模型的特徵選擇法
  • 降維

當特徵選擇完成後,可以直接訓練模型了,但是可能由於特徵矩陣過大,導致計算量大,訓練時間長的問題,因此降低特徵矩陣維度也是必不可少的。常見的降維方法除了以上提到的基於L1懲罰項的模型以外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要將原始的樣本對映到維度更低的樣本空間中,但是PCA和LDA的對映目標不一樣:PCA是為了讓對映後的樣本具有最大的發散性;而LDA是為了讓對映後的樣本有最好的分類效能。所以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。

3. 特徵提取 Feature Extraction

原則上來講,特徵提取應該在特徵選擇之前。特徵提取的物件是原始資料(raw data),它的目的是自動地構建新的特徵,將原始特徵轉換為一組具有明顯物理意義(Gabor、幾何特徵[角點、不變數]、紋理[LBP HOG])或者統計意義或核的特徵。比如通過變換特徵取值來減少原始資料中某個特徵的取值個數等。對於表格資料,你可以在你設計的特徵矩陣上使用主要成分分析(Principal Component Analysis,PCA)來進行特徵提取從而建立新的特徵。對於影象資料,可能還包括了線或邊緣檢測。

常用的方法有:

  • PCA (Principal component analysis,主成分分析)
  • ICA (Independent component analysis,獨立成分分析)
  • LDA (Linear Discriminant Analysis,線性判別分析)
  • 對於影象識別中,還有SIFT方法。

4. 特徵構造 Feature construction

特徵構建指的是從原始資料中人工的構建新的特徵。我們需要人工的建立它們。這需要我們花大量的時間去研究真實的資料樣本,思考問題的潛在形式和資料結構,同時能夠更好地應用到預測模型中。

特徵構建需要很強的洞察力和分析能力,要求我們能夠從原始資料中找出一些具有物理意義的特徵。假設原始資料是表格資料,一般你可以使用混合屬性或者組合屬性來建立新的特徵,或是分解或切分原有的特徵來建立新的特徵。

總結

參考資料

[1]From 參考美團的"機器學習中的資料清洗與特徵處理綜述"
[2]From特徵工程與模型調優

相關文章