对于多类情况,我在正确调用Scikit的逻辑回归时遇到了问题。我使用的是lbgfs解算器,并且我确实将multi_class参数设置为多项式。
我不清楚如何在拟合模型时传递真正的类标签。我曾假设它与随机森林分类器multi-class类似/相同,其中您传递[n_samples,m_classes]数据帧。然而,在这样做的过程中,我得到了一个错误,即数据的状态不好。ValueError:错误的输入形状(20,5)——在这个小例子中,有5个类,20个样本。
在检查时,fit方法的文档说,真值以[n_samples,]的形式传递——这与我得到的错误相匹配——然而,我当时不知道如何用多个类训练模型。所以,这就是我的问题:如何将完整的类标签传递给fit函数?
我在互联网上找不到要建模的示例代码,在StackOverflow上也找不到这个问题。。但我确信一定有人知道怎么做!
在下面的代码中,train_features=[n_samples,nn_features],truth_train=[n_ssamples,m_classes]
clf = LogisticRegressionCV(class_weight='balanced', multi_class='multinomial', solver='lbfgs')
clf.fit(train_features, truth_train)
pred = clf.predict(test_features)
您似乎混淆了术语multiclass和multilabelhttp://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