SciKit Learn 中的多类逻辑回归

Posted

技术标签:

【中文标题】SciKit Learn 中的多类逻辑回归【英文标题】:Multi-Class Logistic Regression in SciKit Learn 【发布时间】:2016-07-31 03:09:14 【问题描述】:

对于多类案例,我无法正确调用 Scikit 的逻辑回归。我正在使用 lbgfs 求解器,并且确实将 multi_class 参数设置为多项式。

我不清楚如何在拟合模型时传递真实的类标签。我假设它与随机森林分类器多类相似/相同,您在其中传递 [n_samples, m_classes] 数据帧。但是,在执行此操作时,我收到一个错误,即数据形状不正确。 ValueError: bad input shape (20, 5)——在这个小例子中,有 5 个类,20 个样本。

在检查时,fit 方法的文档说真值作为 [n_samples, ] 传递——这与我得到的错误相匹配——但是,我不知道如何用多个训练模型类。所以,这是我的问题:如何将完整的类标签集传递给 fit 函数?

我无法在 Internet 上找到用于建模的示例代码,也无法在 *** 上找到这个问题。但我觉得肯定有人知道该怎么做!

在下面的代码中,train_features = [n_samples, nn_features], truth_train = [n_samples, m_classes]

clf = LogisticRegressionCV(class_weight='balanced', multi_class='multinomial', solver='lbfgs')
clf.fit(train_features, truth_train)
pred = clf.predict(test_features)

【问题讨论】:

【参考方案1】:

您似乎混淆了 multiclassmultilabel http://scikit-learn.org/stable/modules/multiclass.html 两个术语,简而言之:

多类分类是指一个分类任务有超过 两个班;例如,对一组水果图像进行分类,这些图像可能是 橙子、苹果或梨。多类分类使 假设每个样本都分配给一个且只有一个标签:a 水果可以是苹果或梨,但不能同时是两者。

因此数据为[n_samples, n_features],标签为[n_samples]

多标签分类为每个样本分配一组目标 标签。这可以被认为是预测数据点的属性 不相互排斥的,例如与 一份文件。文本可能与任何宗教、政治、金融有关 或同时接受教育或不接受任何教育。

因此数据为[n_samples, n_features],标签为[n_samples, n_labels]

您似乎正在寻找多标签(至于多类标签应该是 1-dim)。目前,在 sklearn 中,唯一支持多标签的方法是:决策树、随机森林、最近邻、岭回归。

如果你想学习不同模型的多标签问题,只需使用 OneVsRestClassifier 作为 LogisticRegression 的多标签包装器

http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier

【讨论】:

感谢您的回复。我实际上是在寻找多类,即每个样本只有一个类。但是,我对森林所做的是将类分配转换为布尔数组,这就是我最终得到 n x m 数组的方式。所以,如果我理解正确,我应该将我的类标签转换为整数并创建一个 n_sample 长数组,其中它可以采用的值映射到不同的类标签。那是对的吗?感谢您的帮助。 是的,你应该对树做同样的事情。否则你适合多标签模型。 @lejlot 我已经使用 scikit 逻辑回归对标量进行多重预测。 dukebody 在***.com/questions/36760000/… 中的回答也对我有用。也许我误解了你的回答?

以上是关于SciKit Learn 中的多类逻辑回归的主要内容,如果未能解决你的问题,请参考以下文章

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

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

逻辑回归-5. scikit-learn中的逻辑回归

简单示例中的不良逻辑回归 [scikit-learn]

Scikit-learn 逻辑回归的性能比 Python 中自己编写的逻辑回归差

逻辑回归模型中的内核 LogisticRegression scikit-learn sklearn