7

我正在使用逻辑回归(在 scikit 中)来解决二元分类问题,并且对能够解释每个单独的预测感兴趣。更准确地说,我感兴趣的是预测正类的概率,并衡量每个特征对该预测的重要性。

使用系数(Betas)作为重要性的衡量标准通常是一个坏主意,正如这里回答的那样,但我还没有找到一个好的选择。

到目前为止,我发现最好的是以下 3 个选项:

  1. 蒙特卡洛选项:修复所有其他特征,重新运行预测,用训练集中的随机样本替换我们想要评估的特征。这样做很多次。这将为正类建立一个基线概率。然后与原始运行的正类概率进行比较。差异是特征重要性的度量。
  2. “Leave-one-out”分类器:为了评估一个特征的重要性,首先创建一个使用所有特征的模型,然后创建另一个使用除被测试的特征之外的所有特征的模型。使用这两个模型预测新的观察结果。两者之间的区别在于该功能的重要性。
  3. 调整后的贝塔:根据这个答案,通过“其系数的大小乘以数据中相应参数的标准差”来排列特征的重要性。

所有选项(使用测试版、蒙特卡洛和“留一法”)对我来说似乎都是糟糕的解决方案。

  1. 蒙特卡洛依赖于训练集的分布,我找不到任何文献来支持它。
  2. “遗漏一个”很容易被两个相关特征所欺骗(当一个不存在时,另一个会介入以进行补偿,并且两者都将被赋予 0 重要性)。
  3. 调整后的 beta 听起来很合理,但我找不到任何文献支持它。

实际问题:在决策时刻,用线性分类器解释每个特征的重要性的最佳方法是什么?

快速说明 #1:对于随机森林,这很简单,我们可以简单地使用prediction + bias分解,正如这篇博文中所解释的那样。这里的问题是如何用逻辑回归等线性分类器做类似的事情。

快速说明 #2:stackoverflow 上有许多相关问题(1 2 3 4 5)。我一直无法找到这个特定问题的答案。

4

2 回答 2

2

如果你想知道特征对特定决策的重要性,为什么不decision_function逐步模拟(这是由 scikit-learn 提供的,所以你可以测试你是否得到相同的值)?线性分类器的决策函数很简单:

intercept_ + coef_[0]*feature[0] + coef_[1]*feature[1] + ...

那么特征i的重要性就是coef_[i]*feature[i]。当然,这类似于查看系数的大小,但由于它与实际特征相乘,而且它也是幕后发生的事情,它可能是你最好的选择。

于 2016-01-11T14:05:32.153 回答
0

我建议使用已经实现了类似功能的eli5 。

对于您的问题:实际问题:在决策时刻,使用线性分类器解释每个特征的重要性的最佳方法是什么?

我会说答案show_weights()来自eli5的功能。

此外,这可以用许多其他分类器来实现。

有关更多信息,您可以在相关问题中查看此问题

于 2018-04-20T08:54:36.963 回答