特徵工程

圖片來自jasonfreak的博客

數據預處理

數據預處理在機器學習或深度學習演算法中都起著重要作用,可能存在的操作有:

  • 數據歸一化
  • 缺失值補充
  • 定性特徵定量化

其中針對缺失值,一般都採用均值填充。針對數據歸一化,有以下幾種辦法(來自斯坦福大學深度學習Ufldl):

  1. 簡單縮放:在簡單縮放中,我們的目的是通過對數據的每一個維度的值進行重新調節(這些維度可能是相互獨立的),使得最終的數據向量落在 [0,1]或[ ? 1,1] 的區間內。
  2. 逐樣本均值消減:如果你的數據是平穩的(即數據每一個維度的統計都服從相同分佈),那麼你可以考慮在每個樣本上減去數據的統計平均值(逐樣本計算)。
  3. 特徵標準化:特徵標準化指的是(獨立地)使得數據的每一個維度具有零均值和單位方差。這是歸一化中最常見的方法並被廣泛地使用(例如,在使用支持向量機(SVM)時,特徵標準化常被建議用作預處理的一部分)。在實際應用中,特徵標準化的具體做法是:首先計算每一個維度上數據的均值(使用全體數據計算),之後在每一個維度上都減去該均值。下一步便是在數據的每一維度上除以該維度上數據的標準差。

數據的預處理對後續的處理十分重要,因為很多默認參數(如 PCA-白化中的 epsilon)都假定數據已被縮放到合理區間。

特徵選擇

根據jasonfreak的博客,首先我們從兩個方面考慮選擇特徵:

  • 特徵是否發散:如果一個特徵不發散,例如方差接近於0,也就是說樣本在這個特徵上基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用。
  • 特徵與目標的相關性:這點比較顯見,與目標相關性高的特徵,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。

具體可以從以下幾個角度來進行選擇特徵:

  • 根據特徵的發散性和相關性來選取特徵(方差、相關係數、卡方檢驗、互信息法)。
  • 通過機器學習演算法預測效果來決定選取特徵。
  • 通過每個特徵在機器學習演算法中權重大小來選取特徵(正則項、GBDT)。

互信息過濾特徵

互信息法針對每一種特徵 x_{j} 計算其與標籤 y 的信息量 MI(i) ,然後根據信息量排序,選取其中前 k 個特徵,關鍵在於如何計算 MI(i) ,這裡我們採用KL距離(Kullback-Leibler):

所以 MI(i) 如下:

MI 衡量的是特徵 x_{i} 與標籤 y 的相關性,如果相互獨立,那麼 p(x_{i},y)=p(x_{i})p(y) ,所有 KL 距離為0,如果相二者密切相關,那麼KL距離會很大。

特徵降維

當特徵選擇完成後,可以直接訓練模型了,但是可能由於特徵矩陣過大,導致計算量大,訓練時間長的問題,因此降低特徵矩陣維度也是必不可少的。

常見的降維方法有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要將原始的樣本映射到維度更低的樣本空間中,但是PCA和LDA的映射目標不一樣:PCA是為了讓映射後的樣本具有最大的發散性,LDA為了讓映射後的樣本具有最好的分類性能。所以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。

除了這兩個之外,還有一些其他方法或者輔助的方法,比如白化(ZCA)、奇異值分解(SVD)、獨立成分分析(ICA)等。

主成分分析(PCA)

PCA的主要思想是將 n 維特徵映射到 k 維上,並且這 k 維是正交的特徵。PCA的步驟如下:

  1. 分別求每列的平均值,然後對於所有的樣例,都減去對應的均值。
  2. 求特徵協方差矩陣。
  3. 求協方差矩陣的特徵值和特徵向量。
  4. 將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣。
  5. 將樣本點投影到選取的特徵向量上。假設樣例數為m,特徵數為n,減去均值後的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣為EigenVectors(n*k)。那麼投影后的數據FinalData為:

詳細解釋可見:主成分分析PCA演算法:為什麼去均值以後的高維矩陣乘以其協方差矩陣的特徵向量矩陣就是「投影」?

關於PCA演算法為什麼如上述步驟這麼做,有幾種解釋:最大方差解釋、平方誤差解釋和坐標軸相關度解釋。

最大方差解釋:

在信號處理中認為信號具有較大的方差,雜訊有較小的方差,信噪比就是信號與雜訊的方差比,越大越好。所以我們應讓降維後的結果擁有最大的方差。因此我們認為,最好的k維特徵是將n維樣本點轉換為k維後,每一維上的樣本方差都很大。

假設 u 是特徵向量, m 是樣本數, x^{(i)} 是第 i 維值大小,那麼投影后的方差如下圖:

由於PCA在最開始就保證了每一維的均值都是零,所以可以如上圖表示。如果我們令 lambda=frac{1}{m}sum_{i=1}^{m}{(x^{(i)^{T}}u)^{2}}Sigma=frac{1}{m}sum_{i=1}^{m}{x^{(i)}x^{(i)^{T}}} ,可以得到:

lambda=u^{T}Sigma u

Sigma u=lambda u ,其中 Sigmax 的協方差矩陣, lambda 就是協方差矩陣的特徵值, u 就是協方差矩陣的特徵向量,我們需要讓投影后的方差最大,由於協方差矩陣的特徵值就是投影后的方差,所以找特徵值最大的方向投影,就可以得到最大方差。

其他兩種解釋可以詳見主成分分析(Principal components analysis)-最小平方誤差解釋。

有時數據的分佈並不是滿足高斯分佈的,在非高斯分佈的情況下,PCA方法得出的主元可能並不是最優的。在尋找主元時不能將方差作為衡量重要性的標準。要根據數據的分佈情況選擇合適的描述完全分佈的變數。這時我們就需要利用獨立成分分析(ICA),當數據滿足高斯分佈時,PCA與ICA等價。PCA也通常看做ICA的預處理步驟。

獨立成分分析(ICA)

ICA的主要思想是認為我們得到的特徵是有多個相互獨立的特徵疊加得到的,我們要做的就是通過現有的特徵還原為相互獨立的特徵。如果把現有的特徵表示為 x ,把本來相互獨立的特徵表示為 s ,那麼我們可以得到:

s=Wx

由於我們假定的 s 為相互獨立的特徵,所以 s 的聯合分佈為:

p(s)=prod_{i=1}^{n}p_{s}(s_{i})

帶入 s=Wx ,可以得到 x 的聯合分佈(詳細可見獨立成分分析):

p(x)=p_{s}(Wx)left| W 
ight|=left| W 
ight|prod_{i=1}^{n}p_{s}(w_{i}^{T}x)

此時只要我們知道了 p_{s} 的分佈,就可以通過極大似然估計來求 W 了。由於概率函數是單調遞增的,並且在 [0,1 ] 內。所以我們通產選擇sigmoid函數作為概率函數,即: g(s)=frac{1}{1+e^{-s}}

那麼概率密度函數 p_{s}=g^{}(s)=frac{e^{s}}{(1+e^{s})^{2}} ,然後就可以得到:

l(W)=sum_{i=1}^{m}{sum_{j=1}^{n}{log(g^{}(w_{j}^{T}x^{(i)}))+logleft| W 
ight|}} ,然後可以利用梯度上升的方法求 W

求出 W 後就可以利用 s=Wx 求出相互獨立的特徵 s

ICA在盲信號分析領域的一個強有力方法,也是求非高斯分佈數據隱含因子的方法。使用ICA的前提條件是,認為樣本數據由獨立非高斯分佈的隱含因子產生,隱含因子個數等於特徵數,我們要求的是隱含因子。

線性判別分析(LDA)

LDA的主要目的與PCA相同,就是將數據降維,將高維數據投影到低維。但是LDA的思想和PCA有很大區別,首先PCA是無監督的,也就是數據降維時不會參考到數據的標籤,但是LDA的會根據數據的標籤來進行數據降維。主要思想的不同體現在投影的方向上,PCA是將高維數據投影到方差最大的方向,而LDA是將高維數據投影到類間距離最大、類內方差最小的方向。

參考

  • jerrylead的博客
  • jasonfreak的博客
  • 斯坦福大學DeepLearning教程
  • 獨立成分分析 ( ICA ) 與主成分分析 ( PCA ) 的區別在哪裡?

推薦閱讀:

相關文章