我正在使用逻辑回归(在 scikit 中)来解决二元分类问题,并且有兴趣能够解释每个单独的预测。更准确地说,我感兴趣的是预测正类的概率,并衡量每个特征对于该预测的重要性。
使用系数(Beta)作为重要性衡量标准通常是一个坏主意正如这里所回答的 https://stats.stackexchange.com/questions/47058/importance-of-variables-in-logistic-regression,但我还没有找到一个好的替代方案。
到目前为止,我发现最好的是以下 3 个选项:
-
蒙特卡罗选项:修复所有其他特征,重新运行预测,用训练集中的随机样本替换我们想要评估的特征。多次执行此操作。这将建立一个正类的基线概率。然后与正类的概率原始运行的。差异是功能重要性的衡量标准。
-
“留一”分类器:要评估某个特征的重要性,首先创建一个使用所有特征的模型,然后创建另一个使用除正在测试的特征之外的所有特征的模型。使用这两个模型预测新的观察结果。两者之间的区别在于该功能的重要性。
-
调整后的贝塔值:基于这个答案 https://stackoverflow.com/questions/34052115/how-to-find-the-importance-of-the-features-for-a-logistic-regression-model,对特征的重要性进行排序“其系数的大小乘以数据中相应参数的标准差。”
所有选项(使用测试版、蒙特卡罗和“留一法”)对我来说似乎都是糟糕的解决方案。
- 蒙特卡洛依赖于训练集的分布,我找不到任何文献支持它。
- “留一”很容易被两个相关特征所欺骗(当一个特征缺失时,另一个特征会介入进行补偿,并且两者的重要性都将被赋予 0)。
- 调整后的贝塔值听起来似乎合理,但我找不到任何文献来支持它。
实际问题:在做出决策时,使用线性分类器解释每个特征的重要性的最佳方法是什么?
快速说明#1:对于随机森林来说,这是微不足道的,我们可以简单地使用prediction + bias
分解,正如在这篇博文 http://blog.datadive.net/interpreting-random-forests/。这里的问题是如何使用线性分类器(例如逻辑回归)做类似的事情。
快速说明#2:stackoverflow 上有许多相关问题(1 https://stackoverflow.com/questions/34052115/how-to-find-the-importance-of-the-features-for-a-logistic-regression-model 2 https://stackoverflow.com/questions/15796247/find-important-features-for-classification?rq=1 3 https://stats.stackexchange.com/questions/47058/importance-of-variables-in-logistic-regression 4 https://stats.stackexchange.com/questions/158434/can-i-interpret-the-impact-of-variables-like-positive-or-negative-on-the-model-b/158452#158452 5 https://stats.stackexchange.com/questions/976279/logistic-regression-and-how-to-judge-model-fit-and-parameter-influence)。我无法找到这个具体问题的答案。
如果您想了解功能对于特定决策的重要性,为什么不模拟decision_function
(这是scikit-learn提供的,所以你可以测试是否得到相同的值)一步一步?线性分类器的决策函数很简单:
intercept_ + coef_[0]*feature[0] + coef_[1]*feature[1] + ...
功能的重要性i那么就只是coef_[i]*feature[i]
。当然,这类似于查看系数的大小,但由于它与实际特征相乘,而且它也是在幕后发生的事情,因此它可能是您最好的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)