避免过拟合的方法中,有一种称为特征选择(Feature Selection),即选择最重要的特征、同时舍弃不重要的特征。
本文以 Wine 数据集为例,使用随机森林演示了特征重要性评估和选择方法。
Wine 数据集
Wine 数据集 是对意大利同一地区种植的葡萄酒进行化学分析的结果,但起源于三种不同的品种。
第一列为其分类标签(即起源),其余 13 列为特征。
1 | import pandas as pd |
按分类标签分割数据集为 70% 的训练数据集和 30% 的测试数据集:
1 | from sklearn.model_selection import train_test_split |
特征重要性的 Scikit-learn 实现
scikit-learn 中的 sklearn.ensemble.RandomForestClassifier 已经集成了特征的重要性排序,实现如下:
1 | from sklearn.ensemble import RandomForestClassifier |
特征的重要性排序如下:
1 | 1) Proline 0.179927 |
对特征重要性进行绘图:
1 | import matplotlib.pyplot as plt |
需要提到的是,scikit-learn 还实现了一个 SelectFromModel
对象,它在模型拟合之后根据用户指定的阈值选择特征,并且可以将不同估计器(Estimator)与其连接。
以随机森林为例,以使用以下代码将特征阈值设置为 0.1 ,可以筛选出最重要的五个特征:
1 | from sklearn.feature_selection import SelectFromModel |
输出如下:
1 | Number of samples that meet this criterion: 124 |