如何从 xgboost 获得类似 glm 的优势比?
How to get glm-like odds ratios from xgboost?
我已经在 Python 3.8.5 上成功地 运行 了一个使用 xgboost 的机器学习算法,但是我很难解释结果。
output/target是二元的,死了或者没死。
我自己和我的听众都理解 R 的 glm
之类的比值比,而且我确信 xgboost 可以以某种方式显示此信息,但我不知道如何显示。
我的第一直觉是查看 xgboost
的 predict_proba
的输出
但是当我这样做时,我得到
>>> deceased.pp.view()
array([[0.5828363 , 0.4171637 ],
[0.89795643, 0.10204358],
[0.5828363 , 0.4171637 ],
[0.89795643, 0.10204358]], dtype=float32)
我假设这些是将进入公式 1/(1-p) 的 p,以计算每个输入项的优势比,例如 sex
和 age
.
我在这个网站上发现了一个类似的问题,但答案对我没有帮助:
所以根据那里的答案,我使用 .classes_
得到这个
>>> deceased.xg_clf.classes_
array([False, True])
事实上,我什至不确定 xgboost 能否 给出类似 glm 的优势比,最接近的似乎是 feature_importances.
但是,特征重要性提供的信息与优势比不同。
但是 .classes_
没有告诉我如何找出哪些输入类别,例如age
或 sex
有什么概率。
如何 link classes_
输入类别?
或者,如果这不正确或不可能,我还能如何计算 xgboost 中每个输入变量 的比值比 ?
同意 XGBoost 并不适合提供比值比之类的东西。您是否看过 XGBoost 等更复杂模型的其他形式的模型可解释性?例如,shap
是一个可以提供类似分析的库,但更适合这些类型的模型。
how else can I calculate odds ratios for each input variable in xgboost?
关于这个问题:我有二进制解释变量的解决方案。
我是这个论坛的新手,如果我的回答有误,请随时纠正。如果您想在 XGBoost 模型中显示系数,DoubleML is a package available for both R and Python. The package is built on the results from Chernozhukov et al. (2018) 用于分析 ML 模型中解释变量的影响。
您可以使用包中的 DoubleMLIRM 模型来解释论文描述的平均治疗效果(论文第 5 章):
θ0 = [g0(1,X) - g(0,X)]
其中 θ,正如他们所说,是平均治疗效果。换句话说:二元解释变量对因变量的影响。
g0(1,X)描述因变量依赖于控制变量X,以及感兴趣的二进制解释变量 D={1,0}。但是 g0 不采用函数形式。因此,您可以应用 XGBoost。
这个模型的好处是,你可以得到置信区间,这样你就可以对系数值进行推断。
我已经在 Python 3.8.5 上成功地 运行 了一个使用 xgboost 的机器学习算法,但是我很难解释结果。
output/target是二元的,死了或者没死。
我自己和我的听众都理解 R 的 glm
之类的比值比,而且我确信 xgboost 可以以某种方式显示此信息,但我不知道如何显示。
我的第一直觉是查看 xgboost
的 predict_proba
但是当我这样做时,我得到
>>> deceased.pp.view()
array([[0.5828363 , 0.4171637 ],
[0.89795643, 0.10204358],
[0.5828363 , 0.4171637 ],
[0.89795643, 0.10204358]], dtype=float32)
我假设这些是将进入公式 1/(1-p) 的 p,以计算每个输入项的优势比,例如 sex
和 age
.
我在这个网站上发现了一个类似的问题,但答案对我没有帮助:
所以根据那里的答案,我使用 .classes_
得到这个
>>> deceased.xg_clf.classes_
array([False, True])
事实上,我什至不确定 xgboost 能否 给出类似 glm 的优势比,最接近的似乎是 feature_importances.
但是,特征重要性提供的信息与优势比不同。
但是 .classes_
没有告诉我如何找出哪些输入类别,例如age
或 sex
有什么概率。
如何 link classes_
输入类别?
或者,如果这不正确或不可能,我还能如何计算 xgboost 中每个输入变量 的比值比 ?
同意 XGBoost 并不适合提供比值比之类的东西。您是否看过 XGBoost 等更复杂模型的其他形式的模型可解释性?例如,shap
是一个可以提供类似分析的库,但更适合这些类型的模型。
how else can I calculate odds ratios for each input variable in xgboost?
关于这个问题:我有二进制解释变量的解决方案。
我是这个论坛的新手,如果我的回答有误,请随时纠正。如果您想在 XGBoost 模型中显示系数,DoubleML is a package available for both R and Python. The package is built on the results from Chernozhukov et al. (2018) 用于分析 ML 模型中解释变量的影响。
您可以使用包中的 DoubleMLIRM 模型来解释论文描述的平均治疗效果(论文第 5 章):
θ0 = [g0(1,X) - g(0,X)]
其中 θ,正如他们所说,是平均治疗效果。换句话说:二元解释变量对因变量的影响。
g0(1,X)描述因变量依赖于控制变量X,以及感兴趣的二进制解释变量 D={1,0}。但是 g0 不采用函数形式。因此,您可以应用 XGBoost。
这个模型的好处是,你可以得到置信区间,这样你就可以对系数值进行推断。