如何使用多项式Lo​​gistic回归解决多标签分类问题?

时间:2020-05-23 19:41:59

标签: python-3.x scikit-learn logistic-regression multilabel-classification

我必须根据其他属性来预测学生所学课程的类型。

prog 是一个分类变量,指示学生所在的课程类型:“一般”(1),“学术”(2)或“职业”(3)

Ses 是表明某人的社会经济阶层的分类变量:“低”(1),“中”(2)和“高”(3)

readwritemathscience是他们在不同测试中的分数

honors他们是否已注册

csv file in image format;

import pandas as pd;
import numpy as np;
df1=pd.get_dummies(df,drop_first=True);
X=df1.drop(columns=['prog_general','prog_vocation'],axis=1);
y=df1.loc[:,['prog_general','prog_vocation']];
from sklearn.model_selection import train_test_split;
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.30, random_state=42);
from sklearn.linear_model import LogisticRegression;
from sklearn.metrics import classification_report;
clf=LogisticRegression(multi_class='multinomial',solver='newton-cg');
model=clf.fit(X_train,y_train)

但是在这里,我遇到以下错误:

ValueError:输入形状错误(140,2)。

1 个答案:

答案 0 :(得分:2)

因此,LogisticRegression无法处理多个目标。但这不是Sklearn中所有模型的情况。例如,所有基于树的模型(DecisionTreeClassifier)都可以本地处理多输出。

要使此LogisticRegression可用,您需要一个MultiOutputClassifier包装器。

示例:

import numpy as np
from sklearn.datasets import make_multilabel_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.linear_model import LogisticRegression

X, y = make_multilabel_classification(n_classes=3, random_state=0)
clf = MultiOutputClassifier(estimator= LogisticRegression()).fit(X, y)
clf.predict(X[-2:])