使用scikit-learn Logistic回归获得特征权重

Nau*_*lid 1 machine-learning scikit-learn logistic-regression coefficients

我对此有点新意.我在python scikit-learn中使用了一个简单的Logistic回归分类器.我有4个功能.我的代码是

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 42) 
classifier = LogisticRegression(random_state = 0, C=100)
classifier.fit(X_train, y_train)
coef = classifier.coef_[0]
print (coef)

[-1.07091645 -0.07848958  0.66913624  0.43500273]
Run Code Online (Sandbox Code Playgroud)
  • 我想知道coef数组表示什么?
  • 我们可以使用这些coef*功能排名吗?
  • 这是否意味着最后两个特征在分类结果中最重要?

小智 8

我已在下面回答了您的问题,但根据您的问题和评论,您似乎还在了解逻辑回归.我可以推荐高级数据分析(http://www.stat.cmu.edu/~cshalizi/ADAfaEPoV/),它有一个关于逻辑回归的伟大章节,以及统计学习要素或统计学习简介教科书.话题.

我想知道coef数组表示什么?

系数数组是系数值列表.值按X_train数据集中的列顺序排序.即-1.07091645是X_train中第一列的系数值,-0.07848958是第二列的系数值,依此类推.

因此,评论中的等式将变为:

-1.07091645*f1 + -0.07848958*f2 + 0.66913624*f3 + 0.43500273*f4

我们可以使用这些coef*功能排名吗?

我猜你正试图对功能的重要性进行排名,如果我误解了你的问题就纠正我,我会相应地编辑帖子.

首先,确保您使用的变量具有可比性非常重要.例如,假设数据集中的前两个变量是年龄(以年为单位)和收入(以美元为单位).

这意味着年龄增加一年将使结果变量减少-1.07091645,收入增加一美元将使结果减少-0.07848958.现在,一年增加的效果远远高于一美元的增长,但年龄(一年)的单位增长不能轻易与收入的单位增长(一美元)相比.

那么在这种情况下,年龄比收入更重要吗?很难说.

解决此问题的一种常见方法是将每个变量缩放到相同的范围.这样至少你可以比较类似的步骤变化.但是,这可能会使系数值的解释更加困难,因为您不确定缩放变量中的单位变化对应于什么.

这是否意味着最后两个特征在分类结果中最重要?

不,正如@Vivek Kumar在评论中指出的那样,你应该看一下绝对价值.因此,在这种情况下,如果您认为变量具有可比性,那么按重要性排序,它是1,3,4,2.

逻辑是,即使第一个变量具有负系数,改变该变量的效果更大,同时保持所有其他变量不变大于改变变量2,3或4之一的效果.


Mar*_*yer 5

当你在做简单的逻辑回归时,你试图确定它Y是真/假、1/0、是/否……等等。对吗?

您拥有这些X可能有助于您做出决定的功能。基本逻辑回归背后的数学使用 sigmoid 函数(又名逻辑函数),在 Numpy/Python 中如下所示:

y = 1/(1 + np.exp(-x) )
Run Code Online (Sandbox Code Playgroud)

x这种情况下是你的特点和COEF的线性组合:

coeaf[0] + coef[1] * feature[0] + coef[2] * coef[1] # etc.
Run Code Online (Sandbox Code Playgroud)

随着这增加,逻辑函数接近 1,随着它减少,它逐渐接近 0。

当您将系数和特征插入逻辑函数时,它会输出一个数字,即您的样本为真的概率。它的准确程度取决于您对数据进行建模和拟合的程度。逻辑回归的目标是找到正确拟合数据并最小化误差的这些系数。由于逻辑函数输出概率,因此您可以使用它对最不可能到最可能进行排序。

如果您使用的是 Numpy,您可以取一个样本X和您的系数,并将它们插入到逻辑方程中:

import numpy as np
X = np.array([1, .2 , .1, 1.5]) # one element from your data set
c = np.array([.5, .1, -.7, .2]) # the coefficients that (hopefully) minimize error
z = X @ c.T                     # matrix multiply - linear combination

y = 1/(1 + np.exp(-z)           # logistic function
Run Code Online (Sandbox Code Playgroud)

y将是您的模型认为该样本X为真的概率。