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

时间:2017-11-15 09:07:26

标签: 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]
  • 我想知道coef数组表示什么?
  • 我们可以使用这些coef *功能排名吗?
  • 这是否意味着最后两个功能在分类结果时最重要?

2 个答案:

答案 0 :(得分:5)

我已在下面回答了您的问题,但根据您的问题和评论,您似乎还在了解逻辑回归。我可以推荐高级数据分析(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之一的效果。

答案 1 :(得分:1)

当你进行简单的逻辑回归时,你试图确定X是真/假,1/0,是/否......等等吗?

您有这些功能y = 1/(1 + np.exp(-x) ) 可以帮助您做出决定。基本逻辑回归背后的数学使用sigmoid函数(也就是逻辑函数),在Numpy / Python中看起来像:

x

在这种情况下,coeaf[0] + coef[1] * feature[0] + coef[2] * coef[1] # etc. 是您的要素和coef:

的线性组合
X

随着这增加了逻辑函数接近1并且随着它减小,它渐近地接近0。

当你将系数和特征插入逻辑函数时,它会吐出一个数字,即你的样本是真实的概率。它的准确程度取决于您对数据进行建模和拟合的程度。逻辑回归的目标是找到适合您数据的系数并最大限度地减少错误。因为逻辑函数输出概率,所以您可以使用它来最不可能排名。

如果你正在使用Numpy,你可以取样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将是您的模型认为此样本chmod 600 /usr/local/etc/stunnel/key.pem 为真的概率。