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

Posted

技术标签:

【中文标题】使用 scikit learn 训练逻辑回归进行多类分类【英文标题】:Training logistic regression using scikit learn for multi-class classification 【发布时间】:2015-11-11 12:30:21 【问题描述】:

根据scikit multiclass classification 通过设置逻辑回归可以用于多类分类 multi_class=构造函数中的多项式。但是这样做会出错:

代码:

text_clf = Pipeline([('vect', TfidfVectorizer()),('clf', LogisticRegression(multi_class = 'multinomial')),])
text_clf = text_clf.fit(X_train, Y_train)

错误:

ValueError: Solver liblinear 不支持多项式后端。

你能告诉我这里出了什么问题吗?

注意: 将 multi_class 保持为空白,即“ovr”工作正常,但它适合每个分类器的二进制模型,我也想尝试多项式特征。

【问题讨论】:

【参考方案1】:

您似乎没有提供求解器,默认情况下求解器设置为不支持多类的“liblinear”。 根据 sklearn 版本 0.20.1,“newton-cg”、“lbfgs”、“sag”、“saga”而不是“liblinear”支持多类,因此请按照以下代码更改 LogisticRegression 的实例创建

logReg = LogisticRegression(multi_class='multinomial', solver='newton-cg')

solver 必须是“newton-cg”、“lbfgs”、“sag”、“saga”中的任何东西,但不能离开

【讨论】:

您的回答与 3 年多前已经回答的内容有何不同? 添加了精确的代码 sn-p 以及增强功能以​​支持另外 2 个求解器,如 sag 和 saga。如果这两个求解器对用于训练模型的相关数据带来任何改进,可能有助于提高模型的性能和准确性【参考方案2】:

来自doc:

目前,“多项式”选项仅受“lbfgs”和“newton-cg”求解器支持。

因此您需要将solver 显式设置为'newton-cg' 或'lbfgs',因为默认求解器是'liblinear'

【讨论】:

以上是关于使用 scikit learn 训练逻辑回归进行多类分类的主要内容,如果未能解决你的问题,请参考以下文章

在 scikit learn 中训练具有不同特征维度的逻辑回归模型

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

如何使用 scikit-learn 执行非正则化逻辑回归?

scikit-learn 中的多输出高斯过程回归

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

使用 scikit-learn python 的逻辑回归输出不匹配