特徵降維
阿新 • • 發佈:2022-04-21
特徵降維的意義:
減小矩陣的維度,提高演算法效率
降維的方式:
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:嵌入法會計算每個特徵的權重,去除權重小於閾值的特徵。