我参考了这个漂亮的文档来研究联合特征贡献。但这仅适用于 RandomForest 算法,因为treeinterpreter(不适用于xgboost)。XGBoost 是否也有类似的出路?
基本上我想要实现的是找出所有特征组合对预测的共同贡献。例如,如果我有a和b作为我的特征,c我想知道对预测结果的影响是什么。它与和非常相似,但用于特征组合。abbccashaplime
我参考了这个漂亮的文档来研究联合特征贡献。但这仅适用于 RandomForest 算法,因为treeinterpreter(不适用于xgboost)。XGBoost 是否也有类似的出路?
基本上我想要实现的是找出所有特征组合对预测的共同贡献。例如,如果我有a和b作为我的特征,c我想知道对预测结果的影响是什么。它与和非常相似,但用于特征组合。abbccashaplime
我做了一些研究并了解了 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的更多信息