RF,GBDT,XGboost 都可以做特征选择,属于特征选择中的嵌入式方法,比如在sklearn 中,可以用属性feature_importances_ 去查特征的重要度。如何计算的
1 随机森林
用袋外数据OOB 做预测,随机森林在每次重抽样建立决策树时,都会有一些样本没有被选中,那么就可以用这些样本做交叉验证,这也是随机森林的优点之一,它可以不用做交叉验证,直接用oob_score_ 去对模型性能进行评估。
具体的方法就是:
1) 对于每一颗决策树,用OOB 计算袋外数据误差,记为errOOB2.
2) 然后随机对OOB 所有样本的特征i 加入噪声干扰,再次计算袋外数据误差,记为errOOB2
3) 假设有N 颗树,特征i的重要性为sum(errOOB2-errOOB1)/N
如果加入随机噪声后,袋外数据准确率大幅度下降,说明这个特征对预测结果有很大的影响,进而说明它的重要程度比较高。
2 GBDT
主要通过计算特征i 在单颗树中重要度的平均值,计算公式如下:
其中,M 是树的数量,特征i 在单颗树的重要度主要是通过计算按这个特征i 分裂之后损失的减少值
其中L 是叶子节点的数量,L-1就是非叶子结点的数量。
3 XGBoost
Xgboost 是通过该特征每棵树中分裂次数的和去计算的,比如这个特征在第一棵树分裂一次,第二棵树2次.......,那么这个特征的得分就是(1+2+3.....)。