使用scikit-learn逻辑回归获取特征权重

8
我是一名新手。我正在使用python scikit-learn中的简单逻辑回归分类器。我有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]
  • 我想知道coef数组表示什么?
  • 我们能否使用这些coef * features进行排名?
  • 这是否意味着最后两个特征在分类结果中最重要?

1
取绝对值进行排名。不要使用给定的原始值。 - Vivek Kumar
我编辑了问题,我的意思是从这个数组中我们能够推导出 c1f1 + c2f2 + c3*f3 + c4 * f4 = 某个值后来我们可以使用这个值进行排名。 - Naufal Khalid
classifier.predict() 不是做同样的事情吗? - Vivek Kumar
我不确切知道。 - Naufal Khalid
“我们可以使用这些coef * features来排名吗?”这是指排名输出还是排名特征? - amanbirs
2个回答

11

以下是我的回答,根据您的问题和评论,似乎您仍在学习逻辑回归。我可以推荐Advanced Data Analysis( http://www.stat.cmu.edu/~cshalizi/ADAfaEPoV/)这本书,它有一个关于逻辑回归的很好的章节,以及Elements of Statistical Learning或Introduction to Statistical Learning等教材。

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

系数数组是系数值的列表。这些值按照X_train数据集中列的顺序排序。例如,-1.07091645是X_train中第一列的系数值,-0.07848958是第二列的系数值,依此类推。

因此,根据您的评论,方程式将变为:

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

我们能用这些coef * features进行排名吗?

我猜您正在尝试对特征的重要性进行排名,如果我误解了您的问题,请指出,我会相应地编辑帖子。

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

这意味着年龄增加一岁会将结果变量减少-1.07091645,而收入增加一美元会将结果变量降低0.07848958。现在,一岁的增加效应要比一美元的增加效应大得多,但是年龄(一年)的单位增加无法轻易地与收入(一美元)的单位增加进行比较。

所以,在这种情况下,年龄比收入更重要吗?很难说。

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

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

不是的。正如@Vivek Kumar在他的评论中所指出的那样,您应该看绝对值。因此,在这种情况下,如果您认为这些变量是可比较的,则按重要性的顺序为1、3、4、2。

逻辑是,即使第一个变量具有负系数,改变该变量时保持所有其他变量恒定的影响比改变变量2、3或4中的一个变量的影响更大。


7

当你进行简单的逻辑回归时,你试图决定 Y 是否为真/假,1/0,是/否等。对吗?

你有这些特征 X,它们可能帮助你做出决策。基本逻辑回归背后的数学使用了一个 Sigmoid 函数(也称作 Logistic 函数),在 Numpy/Python 中的表现如下:

y = 1/(1 + np.exp(-x) )

在这种情况下,x是您的特征和coef的线性组合。
coeaf[0] + coef[1] * feature[0] + coef[2] * coef[1] # etc.

随着数值的增加,logistic函数趋近于1;随着数值的减少,logistic函数呈渐近趋向于0。
当您将系数和特征输入到logistic函数中时,它会输出一个数字,这个数字是样本为真实的概率。其准确性取决于您对数据建模和拟合的程度。逻辑回归的目标是找到正确符合数据的系数并最小化误差。由于logistic函数输出概率,因此可以用它来排列从最不可能到最可能。
如果您正在使用Numpy,可以将样本X和系数插入logistic方程式中:
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

y 是指您的模型认为此样本 X 为真实的概率。


请问一下,系数是否应该取指数以推断每个特征的影响方向?我的意思是这个链接中所述的内容:https://stats.idre.ucla.edu/other/mult-pkg/faq/general/faq-how-do-i-interpret-odds-ratios-in-logistic-regression/ 以及这篇文章的第二个答案:https://stats.stackexchange.com/questions/309935/negative-value-in-logistic-regression @Mark_M 非常感谢。 - ebrahimi
我喜欢代码/数学突出显示和系数的简单解释。 - Dave C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接