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 能指出最重要的特征。這些特征,某些場景下還能總結成硬規則。