自动特征选择常用方法包括使用单一变量法进行特征选择、基于模型的特征选择、迭代式特征选择。
自动特征选择方法
使用单一变量法进行特征选择
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('经过缩放的特征形态:{}'.format(X_train_scaled.shape))
print('特征选择后的特征形态:{}'.format(X_train_selected.shape))
经过缩放的特征形态:(2145, 23)
特征选择后的特征形态:(2145, 11)
对于噪声特别多的数据集来说,进行特征选择之后模型评分会提高,而不是降低。
用图像展示特征选择的结果
基于模型的特征选择
工作原理:先使用一个有监督学习的模型对数据特征的重要性进行判断,然后把最重要的特征进行保留,这一步用到的模型和最终用来预测分析的模型不一定是同一个。
可以用随机森林回归模型、L1正则化的线性模型进行特征选择
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('基于随机森林模型进行特征后的数据形态:{}'.format(X_train_sfm.shape))
基于随机森林模型进行特征后的数据形态:(2145, 12)
迭代式特征选择
递归特征剔除法(RFE)的功能就是基于若干个模型进行特征选择。在最开始RFE会用某个模型对特征进行选择,之后再建立两个模型,其中一个对已经选择的特征进行筛选,另外一个对剔除的模型进行筛选,然后一直重复这个步骤,直到达到我们指定的特征数量。迭代式特征选择对计算能力要求高。
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]
特征选择后的数据集训练神经网络
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
结果:模型得分比原始特征得分略高
网友评论