实训补充 关于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。

猜你喜欢

转载自blog.csdn.net/qq_32811489/article/details/80989686