具有分类输出的逻辑回归 sklearn

Posted

技术标签:

【中文标题】具有分类输出的逻辑回归 sklearn【英文标题】:Logistic Regression sklearn with categorical Output 【发布时间】:2020-09-16 19:20:51 【问题描述】:

我必须在 sklearn 中使用逻辑回归训练模型。我到处都看到结果必须是二元的,但我的标签是好的、坏的或正常的。我有 12 个功能,但我不知道如何处理三个标签?非常感谢每一个回答

【问题讨论】:

@ShreyanshAgarwal scikit-learn 在标题、正文和标签中明确提及。 是的,我知道,但我推荐他,因为他是新人,在标签中添加 Python 会使其更清晰,并且会增加覆盖面。 【参考方案1】:

您可以使用 Multinomial Logistic Regression。 在 python 中,您可以将 Logistic 回归代码修改为:

LogisticRegression(multi_class='multinomial').fit(X_train,y_train)

您可以在 Scikit-Learn 中查看 Logistic Regression 文档以了解更多详细信息。

【讨论】:

【参考方案2】:

它被称为一对多分类或多类分类。

来自sklearn.linear_model.LogisticRegression:

在多类情况下,如果 'multi_class' 选项设置为 'ovr',则训练算法使用 one-vs-rest (OvR) 方案,如果设置了 'multi_class' 选项,则使用交叉熵损失到“多项式”。 (目前,“多项式”选项仅受“lbfgs”、“sag”、“saga”和“newton-cg”求解器支持。)

代码示例:

# Authors: Tom Dupre la Tour <tom.dupre-la-tour@m4x.org>
# License: BSD 3 clause

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression

# make 3-class dataset for classification
centers = [[-5, 0], [0, 1.5], [5, -1]]
X, y = make_blobs(n_samples=1000, centers=centers, random_state=40)
transformation = [[0.4, 0.2], [-0.4, 1.2]]
X = np.dot(X, transformation)

for multi_class in ('multinomial', 'ovr'):
    clf = LogisticRegression(solver='sag', max_iter=100, random_state=42,
                             multi_class=multi_class).fit(X, y)

    # print the training scores
    print("training score : %.3f (%s)" % (clf.score(X, y), multi_class))

查看完整代码示例:Plot multinomial and One-vs-Rest Logistic Regression

【讨论】:

以上是关于具有分类输出的逻辑回归 sklearn的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn 逻辑回归中使用分类数据作为特征

python sklearn库实现逻辑回归的实例代码

sklearn库学习----逻辑回归(LogisticRegression)使用详解

在逻辑回归中预测具有最高可能概率的某个标签

sklearn机器学习——逻辑回归

sklearn (scikit-learn) 逻辑回归包——设置训练的分类系数。