实训补充 关于boruta算法

为什么单独写Boruta算法? 因为Boruta算法从一个新的角度去考量特征选择,这和我们通常意义上进行的特征选择有很大区别。

特征选择方法已经很多,为什么还需要Boruta?
先说结论: Boruta与已有方法在进行特征选择时的目标导向是有区别的。

a. Boruta进行特征选择的目标是: 筛选出所有与因变量具有相关性的特征集合。

b. 通常意义上在机器学习实践过程中进行特征选择的目标是: 筛选出可以使得当前模型cost function最小的特征集合。

通常我们进行特征选择的时候基于如下2个规则:

如果删掉某维特征,导致模型性能下降,则认为该特征很重要;
如果删掉某维特征,模型性能没有变化,则认为该特征不重要;
注意: 第1条规则显然是正确的,但是第2条规则并不一定正确。因为,如果删掉某维特征后模型性能没有发生变化,这并不能充分说明该特征与因变量不相关,只能说明该特征对于该模型减小cost function没有帮助。

Boruta的目标就是选择出所有与因变量相关的特征集合,而不是针对特定模型选择出可以使得模型cost function最小的特征集合。Boruta算法的意义在于可以帮助我们更全面的理解因变量的影响因素,从而更好、更高效地进行特征选择。

Boruta算法思想:
将原特征real features进行shuffle构造出shadow features,将real features与shadow features拼接作为特征矩阵进行训练,最后以shadow features的feature importance得分最为参考base, 从real features中选出与因变量真正相关的特征集合。

Boruta算法流程:
对特征矩阵X的各个特征取值进行shuffle, 将shuffle后的特征(shadow features)与原特征(real features)拼接构成新的特征矩阵。
使用新特征矩阵作为输入, 训练可以输出feature_importance的模型。
计算real feature和shadow feature的Z_score。
在shadow features中找出最大的Z_score记为 Z_{max} ,
将Z_socre大于 Z_{max} 的real feature标记为”重要”,将Z_score显著小于 Z_{max}的real feature标记为”不重要”,并且从特征集合中永久剔除。
删除所有shadow features.
重复1~6,直到所有特征都被标记为”重要”或者”不重要”
注:

单个特征 Z_{score} 的计算方式:

Z_{score} = average_feature_importance / feature_importance的标准差

其中单个特征在单棵树上的feature_importance = oob_acc - oob_acc_after_perputation

其中: oob_acc_after_perputation是指将该维特征进行shuffle之后再用out_of_bag的样本在单棵数上的accuracy。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值