Как рассчитать общий вклад функции для классификатора XGBoost в python? - PullRequest
1 голос
/ 03 февраля 2020

Я сослался на http://savvastjortjoglou.com/intrepretable-machine-learning-nfl-combine.html#Joint -Feature-Contributions этот прекрасный документ, чтобы исследовать совместные функции. Но это работает только для алгоритмов RandomForest из-за treeinterpreter (не работает с xgboost). Есть ли аналогичный выход и для XGBoost?

По сути, я хочу добиться совместного вклада всех комбинаций функций в прогноз. Например, если у меня есть функции a, b и c, я хочу знать, как влияет ab, b c и ca на результат прогнозирования. Это очень похоже на Shap и Lime, но по сочетанию функций.

1 Ответ

1 голос
/ 04 февраля 2020

Я провел небольшое исследование и узнал о пакете 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 основных функций взаимодействия с точки зрения усиления.

Спасибо Филиппу Чо, который познакомил меня с xgbfir.

Перейдите по ссылке для получения дополнительной информации о xgbfir

...