特徵工程 | LDA降維
- 2020 年 2 月 25 日
- 筆記
喜歡就點擊上面↑藍色字體關注我們!
判別分析是一種分類演算法,並且也可作為降維技術使用。判別方法有距離判別、貝葉斯判別、Fisher判別等。而Fisher判別是最常用的方法,其基本思想是將p維數據投影到某一方向,使得組之間的投影儘可能的分開。
Fisher判別演算法
假設有k個總體

,數據維度為p,k個總體的樣本大小分別為

,總樣本大小為

,樣本如下:

令a為任一p維非零向量,其作為投影的方向,則將x向a方向投影后的結果為

。那麼上述樣本按照方向a投影后可得:

投影后的數據變為一維數據,借用方差分析的思想,使組間偏差/組內偏差最大化的a方向即為投影方向。
組間偏差平方和:

組內偏差平方和:

即求下列優化問題:

求解證明過程:




判別規則:

LDA降維
從上面判別函數的求解過程可以看出,最終得到的判別函數是將最大特徵值對應的特徵向量作為判別函數的係數,此判別函數的判別效力最優,亦稱為第一判別函數,根據特徵值的大小,依次可以得到第二判別函數,…,第p判別函數,且判別效力依次降低。和PCA同理,保留前幾個判別函數作為投影方向,可以實現降維的效果,所不同的是PCA是無監督方法,而LDA是有監督方法。
以iris數據集為例,簡單看看python如何使用判別分析構建新特徵,更詳細用法可以參考官方文檔。
from sklearn.datasets import load_iris import numpy as np # 載入數據集 iris = load_iris() iris_X, iris_y = iris.data, iris.target # 線性判別 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis lda = LinearDiscriminantAnalysis(n_components=2) lda.fit(iris_X, iris_y) # 擬合 lda.scalings_ # 列是特徵向量,即變換係數 # Out[1]: # array([[-0.81926852, 0.03285975], # [-1.5478732 , 2.15471106], # [ 2.18494056, -0.93024679], # [ 2.85385002, 2.8060046 ]]) # 數據轉換,生成新特徵 iris_trans = np.dot(iris_X, lda.scalings_) # 查看變換後的新特徵的相關性:新特徵之間相關係數為0 np.corrcoef(iris_trans.T) # Out[2]: # array([[1.00000000e+00, 2.32995697e-17], # [2.32995697e-17, 1.00000000e+00]]) # 新特徵解釋原數據資訊的比例:第一個新特徵解釋了原數據99.15%的資訊 lda.explained_variance_ratio_ # Out[2]: array([0.99147248, 0.00852752])