如何在python中为XGBoost分类器计算联合特征贡献?

问题描述 投票:0回答:1

[我参考http://savvastjortjoglou.com/intrepretable-machine-learning-nfl-combine.html#Joint-Feature-Contributions这个漂亮的文件来研究关节特征对接。但这由于树解释器而仅适用于RandomForest算法(不适用于xgboost)。 XGBoost也有类似的出路吗?

基本上,我要实现的是找出所有特征组合对预测的共同贡献。例如,如果我将a,b和c作为特征,我想知道ab,bc和ca对预测结果的影响。它与sha石和石灰非常相似,但具有多种功能。

python machine-learning random-forest xgboost shap
1个回答
0
投票

我进行了一些研究,并了解了xgbfir软件包。它将共同贡献吐入一个excel文件。您可以与此设置交互级别。我围绕它编写了一些代码,以生成解决该问题的图。

如果未安装软件包

pip install xgbfir

安装后:

import xgbfir
from matplotlib import pyplot as plt

xgbfir.saveXgbFI(model, feature_names=X.columns, OutputXlsxFile='FI.xlsx')

joint_contrib = pd.read_excel('FI.xlsx')

xls = pd.ExcelFile('FI.xlsx')
df1 = pd.read_excel(xls, 'Interaction Depth 0')
df2 = pd.read_excel(xls, 'Interaction Depth 1')
df3 = pd.read_excel(xls, 'Interaction Depth 2')

frames = [df1, df2, df3]
joint_contrib = pd.concat(frames)

joint_contrib=joint_contrib.sort_values(by='Gain', ascending=True)
joint_contrib=joint_contrib.head(20)

height = joint_contrib['Gain']
bars = joint_contrib['Interaction']
y_pos = np.arange(len(bars))

plt.barh(y_pos, height)
plt.yticks(y_pos, bars)
plt.show()

这将在增益方面给出排名前20位的功能交互。

感谢Philip Cho将我介绍给xgbfir。

点击链接获取有关xgbfir的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.