1. 前向搜索
每次增量地從剩余未選中的特征選出一個加入特征集中,待達到閾值或者 時,從所有的
中選出錯誤率最小的。過程如下:
- 初始化特征集
為空。
- 掃描
從
到
- 如果第
個特征不在
中,那么特征
和
放在一起作為
(即
)。
- 在只使用
中特征的情況下,利用交叉驗證來得到
的錯誤率。
- 從上步中得到的
個
中選出錯誤率最小的
,更新
為
。
- 如果
中的特征數達到了
或者預定的閾值(如果有的話),
- 那么輸出整個搜索過程中最好的 ;若沒達到,則轉到 2,繼續掃描。
2. 后向搜索
既然有增量加,那么也會有增量減,后者稱為后向搜索。先將 設置為
,然后每次刪除一個特征,並評價,直到達到閾值或者為空,然后選擇最佳的
。
這兩種算法都可以工作,但是計算復雜度比較大。時間復雜度為
3. 遞歸特征消除法
遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練后,消除若干權值系數的特征,再基於新的特征集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特征的代碼如下:
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression #遞歸特征消除法,返回特征選擇后的數據 #參數estimator為基模型 #參數n_features_to_select為選擇的特征個數 RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
舉例:使用一個基模型來進行多輪訓練,經過多輪訓練后,保留指定的特征數。
#首先導入數據到data變量中 import pandas data=pandas.read_csv('路徑.csv') #接着,我們使用RFE類,在estimator中, #把我們的基模型設置為線性回歸模型LinearRegression, #然后在把我們要選擇的特征數設置為2, #接着就可以使用這個rfe對象,把自變量和因變量傳入fit_transform方法, #即可得到我們需要的特征值 from sklearn.feature_selection import RFE from sklearn.linear_model import LinearRegression feature =data[['月份','季度','廣告推廣費','注冊並投資人數']] rfe =RFE( estimator=LinearRegression(), n_features_to_select=2 ) sFeature = rfe.fit_transform( feature, data['銷售金額'] ) #同理,我們要想知道這兩個自變量的名字, #使用get_support方法,即可得到對應的列名 rfe.get_support()