python - 根据单个特征分解预测
问题描述
我们应用了多种机器学习模型,如轻GBM、随机森林、弹性网络、XGBoost等进行预测。要求是根据输入特征分解预测值(每个预测)。样本数据
有连续的和分类的输入变量。分类变量在数据中的数量更多。
例如对于要求:假设我有一个预测y = 1000$
并且有三个输入特征x1
,x2
并且x3
。有没有办法将预测值(1000 美元)表示为 400 美元x1
、300 美元x2
和 300 美元x3
。
尝试的方法:随机森林的特征重要性到每个输入变量的属性百分比贡献。这没有给出有意义的结果。
LIME 和 Shapley:LIME 提供了一个在所考虑的场景中没有意义的局部截距值。Shapley 提供了对单个特征与预期值的偏差的量化,这也没有帮助。
解决方案
您正在寻找特征和目标之间的线性关系。最好的解决方案当然是拟合线性模型!
您说您尝试了elastic net,这实际上是一个正则化线性回归。如果模型性能令人满意,您可以使用线性回归的系数来计算贡献。实际上,该模型将是:
所以由(或只是,取决于你所说的“贡献”的意思)贡献给. 请注意,在“贡献”的概念中,您应该尝试理解截距值。
如果“基本”线性模型的性能不够好,您可以进行一些特征工程(以变量平方或其他变换为例),查看广义线性模型或广义加法模型,但这将非常具体给你的问题。
现在,如果拟合线性模型不起作用,则意味着您无法找到目标特征和相关特征之间的全局线性关系。您需要近似局部线性关系,但它可能并不总是有效或给出预期的结果。具有线性解释模型的 LIME 似乎是一个不错的选择,也许您可以进一步调查一下它为什么不适合您。
推荐阅读
- c# - Selenium-Nunit 如何等待几个图像
- sparql - 元素转换 Apache Jena
- javascript - 如何导入自定义 ES6 模块?
- wordpress - 当我输入 URL 时,Wordpress 删除的页面仍然显示
- graphql - GraphQL 不考虑字符串的动态数组有效字符串
- javascript - fabric.js:4.2 控件在选择对象时不显示
- powerbi - 如何筛选在 Power BI 中使用 DAX 创建的现有度量?
- testing - 不能在一个文件中运行多个测试
- python-3.x - 使用 Blob 服务客户端查找 azure 帐户密钥失败(azure python sdk)
- python - If Else 语句不返回 Else 语句