在 scikit learn 的多类逻辑回归中,哪些系数属于哪个类?

Posted

技术标签:

【中文标题】在 scikit learn 的多类逻辑回归中,哪些系数属于哪个类?【英文标题】:which coefficients go to which class in multiclass logistic regression in scikit learn? 【发布时间】:2017-09-23 04:21:24 【问题描述】:

我正在使用 scikit learn 的逻辑回归来解决多类问题。

logit = LogisticRegression(penalty='l1')
logit = logit.fit(X, y)

我对推动这一决定的功能感兴趣。

logit.coef_

上面给了我一个漂亮的(n_classes, n_features) 格式的数据框,但是所有的类和特性名称都不见了。有了特征,这没关系,因为假设它们的索引方式与我传递它们的方式相同似乎是安全的......

但是对于类,这是一个问题,因为我从来没有以任何顺序明确地传递类。那么系数集(数据框中的行)0、1、2 和 3 属于哪个类?

【问题讨论】:

它将简单地从索引 0 到 n_classses-1 排序。您是否在y 中传递了数字或字符串?如果是字符串,那么将使用 LabelEncoder 将其转换为数字形式。你能在这里显示你的y吗? 字符串。标签是:array(['GR3', 'GR4', 'SHH', 'GR3', 'GR4', 'SHH', 'GR4', 'SHH', 'GR4', 'WNT', 'GR3', 'GR4', 'GR3', 'SHH', 'SHH', 'GR3', 'GR4', 'SHH', 'GR4', 'GR3', 'SHH', 'GR3', 'SHH', 'GR4', 'SHH', 'GR3', 'GR4', 'GR4', 'SHH', 'GR4', 'SHH', 'GR4', 'GR3', 'GR3', 'WNT', 'SHH', 'GR4', 'SHH', 'SHH', 'GR3', 'WNT', 'GR3', 'GR4', 'GR3', 'SHH'], dtype=object),我得到课程0, 1, 2, 3。哪个对应哪个? 有什么方法可以访问 LogisticRegression 对象中的 LabelEncoder 对象吗? 【参考方案1】:

顺序将与logit.classes_ 返回的顺序相同(classes_ 是拟合模型的属性,表示 y 中存在的唯一类),如果是字符串,它们将按字母顺序排列。

为了解释它,我们上面提到的标签 y 在一个带有 LogisticRegression 的随机数据集上:

import numpy as np
from sklearn.linear_model import LogisticRegression

X = np.random.rand(45,5)
y = np.array(['GR3', 'GR4', 'SHH', 'GR3', 'GR4', 'SHH', 'GR4', 'SHH',
              'GR4', 'WNT', 'GR3', 'GR4', 'GR3', 'SHH', 'SHH', 'GR3', 
              'GR4', 'SHH', 'GR4', 'GR3', 'SHH', 'GR3', 'SHH', 'GR4', 
              'SHH', 'GR3', 'GR4', 'GR4', 'SHH', 'GR4', 'SHH', 'GR4', 
              'GR3', 'GR3', 'WNT', 'SHH', 'GR4', 'SHH', 'SHH', 'GR3',
              'WNT', 'GR3', 'GR4', 'GR3', 'SHH'], dtype=object)

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

# This is what you want
lr.classes_

#Out:
#    array(['GR3', 'GR4', 'SHH', 'WNT'], dtype=object)

lr.coef_
#Out:
#    array of shape [n_classes, n_features]

所以在coef_矩阵中,行中的索引0代表'GR3'(classes_数组中的第一个类,1 = 'GR4'等等。

希望对你有帮助。

【讨论】:

非常感谢 Vivek! @Vivek 你能否解释一下如何在二进制问题中分别获取正负类的系数,即 clf.classes_ = [0, 1] 和 clf.coef_ = [[ some values]]

以上是关于在 scikit learn 的多类逻辑回归中,哪些系数属于哪个类?的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit learn 训练逻辑回归进行多类分类

scikit-learn 逻辑回归预测与自我实现不同

如何在“GridSearchCV”中使用“log_loss”和 Scikit-Learn(sklearn)中的多类标签?

使用 scikit 学习的多类多输出回归

Scikit-learn 使用朴素贝叶斯进行 10 折交叉验证的多类分类

Scikit 学习支持向量机的多类分类