《Python机器学习经典实例》试读:1.10 计算特征的相对重要性
所有特征都同等重要吗?在这个案例中,我们用了13个特征,它们对模型都有贡献。但是,有一个重要的问题出现了:如何判断哪个特征更加重要?显然,所有的特征对结果的贡献是不一样的。如果需要忽略一些特征,就需要知道哪些特征不太重要。scikit-learn里面有这样的功能。
详细步骤
(1) 画出特征的相对重要性,在housing.py文件中加入下面几行代码:
plot_feature_importances(dt_regressor.feature_importances_,
'Decision Tree regressor', housing_data.feature_names)
plot_feature_importances(ab_regressor.feature_importances_,
'AdaBoost regressor', housing_data.feature_names)
回归器对象有一个feature_importances_方法会告诉我们每个特征的相对重要性。
(2) 接下来需要定义plot_feature_importances来画出条形图:
def plot_feature_importances(feature_importances, title, feature_names):
# 将重要性值标准化
feature_importances = 100.0 * (feature_importances / max(feature_importances))
# 将得分从高到低排序
index_sorted = np.flipud(np.argsort(feature_importances))
# 让X坐标轴上的标签居中显示
pos = np.arange(index_sorted.shape[0]) + 0.5
# 画条形图
plt.figure()
plt.bar(pos, feature_importances[index_sorted], align='center')
plt.xticks(pos, feature_names[index_sorted])
plt.ylabel('Relative Importance')
plt.title(title)
plt.show()
(3) 我们从feature_importances_方法里取值,然后把数值放大到0~100的范围内。运行前面的代码,可以看到两张图(不带AdaBoost算法与带AdaBoost算法两种模型)。仔细观察图1-8和图1-9,看看能从决策树回归器中获得什么。
图 1-8
(4) 从图1-8可以发现,不带AdaBoost算法的决策树回归器显示的最重要特征是RM。再看看带AdaBoost算法的决策树回归器的特征重要性排序条形图,如图1-9所示。
图 1-9
加入AdaBoost算法之后,房屋估价模型的最重要特征是LSTAT。在现实生活中,如果对这个数据集建立不同的回归器,就会发现最重要的特征是LSTAT,这足以体现AdaBoost算法对决策树回归器训练效果的改善。