1. 程式人生 > >特徵工程--特徵選擇wrapper(遞迴特徵消除)

特徵工程--特徵選擇wrapper(遞迴特徵消除)

遞迴特徵消除 (Recursive Feature Elimination)

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

sklearn官方解釋:對特徵含有權重的預測模型(例如,線性模型對應引數coefficients),RFE通過遞迴減少考察的特徵集規模來選擇特徵。首先,預測模型在原始特徵上訓練,每個特徵指定一個權重。之後,那些擁有最小絕對值權重的特徵被踢出特徵集。如此往復遞迴,直至剩餘的特徵數量達到所需的特徵數量。

RFECV 通過交叉驗證的方式執行RFE,以此來選擇最佳數量的特徵:對於一個數量為d的feature的集合,他的所有的子集的個數是2的d次方減1(包含空集)。指定一個外部的學習演算法,比如SVM之類的。通過該演算法計算所有子集的validation error。選擇error最小的那個子集作為所挑選的特徵。

from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris iris = load_iris() #遞迴特徵消除法,返回特徵選擇後的資料 #遞迴特徵消除法 #遞迴消除特徵法使用一個基模型來進行多輪訓練,每輪訓練後,消除若干權值係數的特徵,再基於新的特徵集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特徵的程式碼如下: #引數estimator為基模型 #引數n_features_to_select為選擇的特徵個數7 #print(iris.data[0:5]) print(iris.data[0:5]) print(iris.target[0:5]) print("-----------------------------------") selector = RFE(estimator=LogisticRegression(), n_features_to_select=2).fit(iris.data, iris.target) data = selector.transform(iris.data) print(data[0:5]) print("-----------------------------------") print(selector.ranking_)

在這裡插入圖片描述

[3 1 2 1] 第1,3列的驗證錯誤最小,特徵選擇第1,3列。