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()
