特征选择库
Feature selection using the Boruta-SHAP package
Boruta-SHAP is a package combining Boruta (https://github.com/scikit-learn-contrib/boruta_py), a feature selection method based on repeated tests of the importance of a feature in a model, with the interpretability method SHAP (https://christophm.github.io/interpretable-ml-book/shap.html).
Boruta-SHAP, developed by Eoghan Keany (https://github.com/Ekeany/Boruta-Shap), is extremely simple to use: get your best model, let it run some time on Boruta-SHAP and evaluate the results!
You can read more about Boruta-SHAP on this Medium article by the author: https://medium.com/analytics-vidhya/is-this-the-best-feature-selection-algorithm-borutashap-8bc238aa1677
Is this the Best Feature Selection Algorithm “BorutaShap”?
Boruta SHAP for Temporal Feature Selection
SHAP的名称来源于SHapley Additive exPlanation。Shapley value起源于合作博弈论。比如说甲乙丙丁四个工人一起打工,甲和乙完成了价值100元的工件,甲、乙、丙完成了价值120元的工件,乙、丙、丁完成了价值150元的工件,甲、丁完成了价值90元的工件,那么该如何公平、合理地分配这四个人的工钱呢?Shapley提出了一个合理的计算方法,我们称每个参与者分配到的数额为Shapley value。
SHAP是由Shapley value启发的可加性解释模型。对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。 假设第i个样本为xi,第i个样本的第j个特征为xi,j,模型对第i个样本的预测值为yi,整个模型的基线(通常是所有样本的目标变量的均值)为ybase,那么SHAP value服从以下等式。

其中$f(x_{i,j})$为$x_{i,j}$的SHAP值。直观上看,$f(x_{i,1})$就是第$i$个样本中第1个特征对最终预测值$y_i$的贡献值,当$f(x_{i,1})$>0,说明该特征提升了预测值,也正向作用;反之,说明该特征使得预测值降低,有反作用。SHAP value最大的优势是SHAP能对于反映出每一个样本中的特征的影响力,而且还表现出影响的正负性
Boruta算法是一个基于随机森林分类算法的包装器。随机森林分类算法是一种比较快速的分类算法,通常不需要调整参数就可以实现,并给出了特征重要性的数值估计。它是一种通过多个无偏的弱分类器-决策树的投票来进行分类的集成方法。这些树是在训练集的不同样本上独立构建的。Z-Score用平均损失除以标准差的计算方法可以作为重要度的度量。不幸的是,Z分数与随机森林算法所返回的特征重要性的统计意义并不直接相关,因为它的分布不是N(0,1)。然而,在Boruta中我们使用Z-Score作为重要性的度量,因为它考虑了森林中树木之间平均准确度损失的波动。
z-score能够真实的反应一个分数距离平均数的相对标准距离。如果我们把每一个分数都转换成z分数,那么每一个z分数会以标准差为单位表示一个具体分数到平均数的距离或离差。将成正态分布的数据中的原始分数转换为z分数,我们就可以通过查阅z分数在正态曲线下面积的表格来得知平均数与z分数之间的面积,进而得知原始分数在数据集合中的百分等级。一个数列的各z分数的平方和等于该数列数据的个数,并且z分数的标准差和方差都为1.平均数为0.
由于我们不能直接使用Z-Score来衡量重要性,所以我们需要一些外部参考来判断任何给定属性的重要性是否显著,也就是说,它是否可以从随机波动产生的重要性中辨别出来。因此,我们设计了具有随机属性的算法。对于每个属性,我们都创建一个相应的“影子”属性,其值通过在对象之间随机打乱属性的值来获得。然后,我们使用这个扩展后的所有属性执行分类,并计算所有属性的重要性。
影子属性的重要性不为零只能是因为随机波动。因此,阴影属性的重要性被用作决定哪些属性是真正重要的参考。
重要性度量会由于随机森林分类器的随机性而波动。此外,它对系统中不重要的属性(也包括影子属性)的存在很敏感。此外,它还依赖于阴影属性的特定实现。因此,我们需要重复重新洗牌以获得统计有效的结果。
简而言之,Boruta基于随机森林分类器的相同思想,即在系统中加入随机性,从随机样本集合中收集结果,可以减少随机波动和相关性的误导影响。在这里,这个额外的随机性将为我们提供一个更清楚的视图,哪些属性是真正重要的。