自動特征選擇常用方法包括使用單一變量法進(jìn)行特征選擇、基于模型的特征選擇、迭代式特征選擇。

使用單一變量法進(jìn)行特征選擇
SelectPercentile:自動選擇原始特征的百分比
SelectKBest:自動選擇K個最重要的特征
from sklearn.feature_selection import SelectPercentile
select = SelectPercentile(percentile=50)
select.fit(X_train_scaled, y_train)
X_train_selected = select.transform(X_train_scaled)
print('經(jīng)過縮放的特征形態(tài):{}'.format(X_train_scaled.shape))
print('特征選擇后的特征形態(tài):{}'.format(X_train_selected.shape))
經(jīng)過縮放的特征形態(tài):(2145, 23)
特征選擇后的特征形態(tài):(2145, 11)
對于噪聲特別多的數(shù)據(jù)集來說,進(jìn)行特征選擇之后模型評分會提高,而不是降低。

基于模型的特征選擇
工作原理:先使用一個有監(jiān)督學(xué)習(xí)的模型對數(shù)據(jù)特征的重要性進(jìn)行判斷,然后把最重要的特征進(jìn)行保留,這一步用到的模型和最終用來預(yù)測分析的模型不一定是同一個。
可以用隨機(jī)森林回歸模型、L1正則化的線性模型進(jìn)行特征選擇
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestRegressor
sfm = SelectFromModel(RandomForestRegressor(n_estimators=100,
random_state=38),
threshold='median')
sfm.fit(X_train_scaled, y_train)
X_train_sfm = sfm.transform(X_train_scaled)
print('基于隨機(jī)森林模型進(jìn)行特征后的數(shù)據(jù)形態(tài):{}'.format(X_train_sfm.shape))
基于隨機(jī)森林模型進(jìn)行特征后的數(shù)據(jù)形態(tài):(2145, 12)
迭代式特征選擇
遞歸特征剔除法(RFE)的功能就是基于若干個模型進(jìn)行特征選擇。在最開始RFE會用某個模型對特征進(jìn)行選擇,之后再建立兩個模型,其中一個對已經(jīng)選擇的特征進(jìn)行篩選,另外一個對剔除的模型進(jìn)行篩選,然后一直重復(fù)這個步驟,直到達(dá)到我們指定的特征數(shù)量。迭代式特征選擇對計算能力要求高。
from sklearn.feature_selection import RFE
rfe = RFE(RandomForestRegressor(n_estimators=100,
random_state=38),
n_features_to_select=12)
rfe.fit(X_train_scaled, y_train)
mask = rfe.get_support()
print(mask)
[ True True False False True False False True True False True True
False True True True True False False True False False False]
特征選擇后的數(shù)據(jù)集訓(xùn)練神經(jīng)網(wǎng)絡(luò)
X_train_rfe = rfe.transform(X_train_scaled)
X_test_rfe = rfe.transform(X_test_scaled)
mlpr_rfe = MLPRegressor(random_state=62, hidden_layer_sizes=(100,100),
alpha=0.001)
mlpr_rfe.fit(X_train_rfe, y_train)
RFE選擇特征后的模型得分:0.95
結(jié)果:模型得分比原始特征得分略高