包装法也是一种特征选择和算法训练同时进行的方法,和嵌入法十分类似,他也是依赖算法自身的选择,比如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://ichenhua.cn/read/273
- 上一篇:
- 数据结构之数组