【问题标题】:How to find the importance of the features for a logistic regression model?如何找到逻辑回归模型的特征的重要性?
【发布时间】:2016-03-07 05:56:34
【问题描述】:

我有一个由逻辑回归算法训练的二元预测模型。我想知道哪些特征(预测变量)对于正类或负类的决定更重要。我知道有 coef_ 参数来自 scikit-learn 包,但我不知道它是否足够重要。另一件事是我如何根据负类和正类的重要性来评估 coef_ 值。我还阅读了有关标准化回归系数的信息,但我不知道它是什么。

假设有肿瘤大小、肿瘤重量等特征来决定是否为恶性或非恶性的测试用例。我想知道哪些特征对于恶性而不是恶性预测更重要。有道理吗?

【问题讨论】:

  • 您能否举个例子让事情变得更具体?
  • 可以说有肿瘤大小、肿瘤重量等特征来决定恶性或非恶性的测试用例。我想知道哪些特征对于恶性而不是恶性预测更重要。有道理吗?

标签: python machine-learning scikit-learn logistic-regression


【解决方案1】:

在线性分类模型(逻辑是其中之一)中了解给定参数的“影响”的最简单选项之一是考虑其系数的大小乘以相应参数的标准偏差在数据中。

考虑这个例子:

import numpy as np    
from sklearn.linear_model import LogisticRegression

x1 = np.random.randn(100)
x2 = 4*np.random.randn(100)
x3 = 0.5*np.random.randn(100)
y = (3 + x1 + x2 + x3 + 0.2*np.random.randn()) > 0
X = np.column_stack([x1, x2, x3])

m = LogisticRegression()
m.fit(X, y)

# The estimated coefficients will all be around 1:
print(m.coef_)

# Those values, however, will show that the second parameter
# is more influential
print(np.std(X, 0)*m.coef_)

获得类似结果的另一种方法是检查模型在标准化参数上的拟合系数:

m.fit(X / np.std(X, 0), y)
print(m.coef_)

请注意,这是最基本的方法,并且存在许多其他用于查找特征重要性或参数影响的技术(使用 p 值、引导分数、各种“判别指数”等)。

我很确定您会在https://stats.stackexchange.com/ 获得更多有趣的答案。

【讨论】:

  • 感谢您的解释。还有一件事,m.coef_ 的负值是什么意思?这是否意味着它对否定类的决定更具歧视性?对于正值也是同样的问题。
  • 负系数表示对应特征的值越高,分类越向负类推。
  • @PeterFranek 让我们看看你的反例如何在实践中发挥作用:pastebin.com/NXPxtPwc 请注意,生成的模型如何“聪明”到足以估计相关特征的较小系数,从而正确地得出结论,它是第三个值是更重要的值。尝试提出一个有效的反例;)
  • 而且,更一般地,请注意“如何理解 X 型(已经拟合的)模型中特征的重要性”和“如何理解数据中最有影响力的特征”的问题。一般”不同。根据您的拟合过程,您最终可能会为相同的数据使用不同的模型——一些特征可能被一个模型认为更重要,而另一些特征可能被另一个模型认为更重要。只有当您的模型首先以某种“有效”的方式进行估计时,“模型内”的重要特征才会在“一般数据中”很重要。
  • 特别是,如果您的数据中最重要的特征对输出具有非线性依赖性,那么大多数线性模型可能不会发现这一点,无论您如何取笑它们。因此,很高兴记住建模和模型解释之间的差异。
猜你喜欢
  • 2018-09-23
  • 2014-08-06
  • 2021-08-31
  • 2020-04-14
  • 2023-01-14
  • 2017-09-20
  • 2018-12-29
  • 2016-04-04
  • 2015-10-10
相关资源
最近更新 更多