XGBoost作为比赛大杀器,内置了几种重要性函数,今天我们就在这篇文章中梳理三种常见的特征重要性计算方法,并思考他们的使用场景。
xgboost.plot_importance(booster, ax=None, height=0.2, xlim=None, ylim=None,
title='Feature importance', xlabel='F score', ylabel='Features', fmap='',
importance_type='weight', max_num_features=None, grid=True,
show_values=True, **kwargs)
在上边函数中,我们可以通过修改importance_type参数改变如何计算特征之间的importance。可选的取值为:“weight”, “gain”, “cover”
weight
”weight” is the number of times a feature appears in a tree
- 指在子树模型进行分类时,用到的特征次数,根据特征被用到的次数进行排序。
- 该指标会将数值特征给予更高的权重,因为数值特征往往是连续的,变数也比分类特征多,分裂的空间就越大,所以这个指标会偏向数值特征,忽略分类特征。
gain
”gain” is the average gain of splits which use the feature
- 这是信息增益的泛化概念。是指在节点分裂是,该特征带来的信息增益。
- gain用到了熵,他可以方便的找出最直接的特征,即如果某个特征下label比较单一,那么这个特征就会比较重要。
cover
”cover” is the average coverage of splits which use the feature where coverage is defined as the number of samples affected by the split
- 形象来说,就是树模型在分裂时,特征下的叶子结点涵盖的样本数除以特征用来分裂的次数。分裂越靠近根部,cover 值越大。
- cover对于分类特征更友好。
总结
如果有下游业务方,更建议用 cover 的特征重要性计算方法。当然,如果是单纯的模型调优,gain 能指出最重要的特征。这些特征,某些场景下还能总结成硬规则。