确定哪些特征对给定输入向量的预测贡献最大的正确方法是什么?

机器算法验证 回归 物流 回归系数
2022-03-04 03:12:09

我正在使用逻辑回归进行二元分类。我有一个大数据集(恰好高度不平衡:19:1)。因此,我使用 scikit-learnLogisticRegression()对 80% 的标记数据进行训练,然后用另外 20% 进行验证(我查看了 ROC 下的区域以及精确召回,因为数据非常不平衡;我还使用了该模型class_weight='auto')。

我的主要问题如下:一旦我开始生成未标记输入向量的预测(使用predict_proba()),我如何判断哪些特征对特定输入的预测贡献最大?我想这可能与基于标记的训练数据(例如系数大小)的模型通常确定的“最重要特征”不同。

我有一个非常基本的想法:

  1. 将我的输入特征值与我的特征系数的绝对值相乘。贡献最大的特征就是对应于具有最大值的条目的特征。

  2. 做 (1) 但对所有内容(训练和输入特征)使用 z 分数。我认为这很重要,因为我担心某些功能范围可能与其他功能范围非常不同,而仅采用产品可能无法捕捉到这一点;但我想这些系数应该反映范围,所以也许这并不重要。

任何想法将不胜感激,因为我是新手。逻辑回归特有的东西(即 sigmoid 而不仅仅是线性函数)以及任何关于如何在 scikit-learn 中实现特定动作(例如变换)的参考将不胜感激,因为我实际上正在使用真实数据进行项目。

2个回答

有一种方法只使用回归系数,您可以了解哪些特征对给定输入向量的预测贡献最大。

但是,您必须首先对每个变量进行标准化和缩放(即减去平均值并除以标准差)。然后用标准化和缩放的数据重新拟合你的模型,具有最大回归系数的特征将是对未来预测贡献最大的特征。

增加一个单位对应于未缩放特征的跳跃 1 个标准差。X1

我喜欢用来查看哪个特征对特定预测有贡献的一种方法是将所有特征一一重置为其平均值,然后查看预测如何变化。我从这个页面上学到了这个方法。但我也会用我自己的例子来解释。

例如,我们有一个模型,可以根据一些天气信息(比如温度、风和雨)来预测一天是否适合穿短裤。假设我们正在使用一种为我们提供类概率的方法。

现在我们有一天模型预测给定日期的 50/50,但我们不知道是什么原因造成的。因此,我们将遍历每个特征,将它们重置为均值(或 0),然后查看模型现在预测的内容。

  • 假设温度为 20 °C,但平均温度为 10 °C。如果我们重新预测模型,将当天的温度设置为 10 °C,但保持雨和风的值相同,则预测最终为 80%,因为没有短裤。显然温度有很大的影响!现在我们可以对其他变量做同样的事情。

  • 风速略高于平均水平,通过将风速重置为平均值并保持其他风速相同,对于短裤的预测仅会发生少许变化,达到 55%。似乎温度是一个更大的问题。

  • 现在下雨有点奇怪,因为下雨已经是平均值了。所以重置为平均值显然没有效果。但是我们仍然想知道下雨是否会影响预测,所以我们可以做的是将下雨设置为 0。你瞧,一旦我们将下雨设置为 0,模型会预测 75% 的短裤。又是一个相当大的影响。

通过遍历每个特征并将它们设置为均值或 0,我们能够在预测级别识别哪些特征是重要的。风和温度在任一方向上都有很大的影响,而风的影响要小得多。

现在为什么我们将雨重置为 0?为温度或风这样做会很奇怪,因为对于这些 0 是一个几乎不会发生并且意义不大的值,但是对于雨 0 是相对频繁的并且它意味着特定的东西,干燥的一天。这意味着重置为 0 是明智的。所以你真的必须逐个地查看一个特征,什么是有意义的。