包装法也是一种特征选择和算法训练同时进行的方法,和嵌入法十分类似,他也是依赖算法自身的选择,比如coef_或者feature_importances_属性来完成特征选择,但不同的是,包装法会使用一个目标函数来进行特征选择,而不需要我们输入某个指标或者阈值

包装法是使用递归的方法,修剪不重要的特征,直到达到所需数量的特征,因为要使用特征子集多次训练,所以计算成本会更高。

包装法基本用法

import pandas as pd
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score

data = pd.read_csv('./datas/digit_recognizor_simple.csv')

x = data.iloc[:, 1:]
y = data.iloc[:, 0]

RFC_ = RFC(random_state=42)
x_wrapper = RFE(RFC_, n_features_to_select=300, step=50).fit_transform(x,y)

score = cross_val_score(RFC_, x_wrapper, y, cv=10).mean()
print(score)  # 0.872

学习曲线调参

import matplotlib.pyplot as plt

scores = []
for i in range(1, x.shape[1], 50):
    x_wrapper = RFE(RFC_, n_features_to_select=i, step=50).fit_transform(x, y)
    score = cross_val_score(RFC_, x, y, cv=10).mean()
    scores.append(score)

plt.plot(range(1, x.shape[1], 50), scores)
plt.xticks(range(1, x.shape[1], 50))
plt.show()

经验来说,过滤法更快速,但更粗糙。包装法和嵌入法更精确,比较适合具体到算法去调整,但计算量比较大,运行时间长。当数据量很大的时候,优先使用方差过滤和互信息法调整,再上其他特征选择方法。使用逻辑回归时,优先使用嵌入法。使用支持向量机时,优先使用包装法。迷茫的时候,从过滤法走起,看具体数据具体分析。

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/273