1. 程式人生 > 其它 >特徵降維

特徵降維

特徵降維的意義:

  減小矩陣的維度,提高演算法效率

降維的方式:

  Filter:過濾法是按照發散性或相關性對特徵進行評分,如方差法(刪除方差小於閾值的特徵)、皮爾森相關係數法、卡方檢驗、互資訊法

    

1 from sklearn.feature_selection import *
2 from sklearn.datasets import load_boston
3 boston = load_boston()
4 data = boston.data #使用sklearn內建資料
5 target = boston.target #使用sklearn內建資料
6 variance = VarianceThreshold(threshold=0.1) #
方差低於0.1的特徵將被捨棄 7 variance.fit(data) 8 print(variance.transform(data))
方差法
1 from sklearn.feature_selection import *
2 from sklearn.datasets import load_boston
3 boston = load_boston()
4 data = boston.data #使用sklearn內建資料
5 target = boston.target #使用sklearn內建資料
6 sk = SelectKBest(k=8) #保留相關性最高的前k個特徵
7 sk.fit(data,y=target) 8 print(sk.transform(data).shape) 9 print(sk.scores_)
相關係數法

SelectBest可傳入用於評分的函式,傳入chi2表示使用卡方分佈,f_regression用於迴歸任務

   卡方檢驗法需要用到卡方公式  ,observed為目標實際出現的次數,expected為目標的期望出現次數,查詢卡方分佈臨界表,刪除卡方小於閾值的特徵

 1 from sklearn.feature_selection import *
 2 from sklearn.datasets import load_boston
3 from sklearn.linear_model import LogisticRegression #匯入邏輯迴歸模型 4 bos = load_boston() # 讀取sklearn內建資料 5 data = np.array(bos.data) # 讀取sklearn內建資料 特徵值 6 target = np.array(bos.target) # 讀取sklearn內建資料 標籤 7 estimator = LogisticRegression() #呼叫邏輯迴歸 8 selector = RFE(estimator, step=5) #呼叫遞迴法,step為遞迴的次數 9 selector = selector.fit(data, target.astype('int')) #分類問題要將標籤轉為int型別 10 print(selector.support_) # 滿足條件的特徵返回True,其他返回False 11 print(selector.n_features_) #保留的特徵數 12 print(selector.ranking_) 13 print(selector.transform(data))
遞迴消除特徵法
 1 import numpy as np
 2 from sklearn.feature_selection import *
 3 from sklearn.datasets import load_boston
 4 from sklearn.linear_model import LogisticRegression #匯入邏輯迴歸模型
 5 bos = load_boston() # 讀取sklearn內建資料
 6 data = np.array(bos.data) # 讀取sklearn內建資料 特徵值
 7 target = np.array(bos.target) # 讀取sklearn內建資料 標籤
 8 estimator = LogisticRegression(penalty='l2',C=0.1) #呼叫邏輯迴歸
 9 selector = SelectFromModel(estimator, threshold=0.04) #刪除係數小於0.04的特徵
10 selector.fit(data, target.astype('int')) #分類問題要將標籤轉為int型別
11 print(selector.transform(data))
12 print(selector.estimator_.coef_)
嵌入法示例

  Wrapper:包裝法是選用部分特徵嘗試訓練結果,每次選取不同的特徵組合,尋找最優組合

  Embedded:嵌入法會計算每個特徵的權重,去除權重小於閾值的特徵。