我正在尝试应用多标签分类。形状是:
x_train.shape
(3975, 3788)
y_train.shape
(3975, 66)
x_test.shape
(994, 3788)
y_test.shape
(994, 66)
当我尝试训练时,出现以下错误:
ValueError: bad input shape (3975, 66)
有办法解决吗?
这是代码:
sgd = SGDClassifier()
lr = LogisticRegression(solver='lbfgs')
svc = LinearSVC
def j_score(y_true, y_pred):
jaccard = np.minimum(y_true, y_pred).sum(axis =1)/np.maximum(y_true, y_pred).sum(axis =1)
return jaccard.mean()*100
def print_score(y_pred, clf):
print('Clf: ', clf.__class__.__name__)
print('Jaccard score: {}'.format(j_score(y_test, y_pred)))
print('----')
for classifier in [sgd, lr, svc]:
clf = OneVsOneClassifier(classifier)
clf.fit(x_train, y_train) #Here is the error indicator
y_pred = clf.predict(x_test)
print_score(y_pred, classifier)
您正在使用的模型正在进行二元分类。即它们可以区分两类事物;属于一类的项目,由仅具有一列的向量 Y 提供。
该向量将包含类名称,例如 class1 和 class2。
如果有更多类,则向量 Y 将是包含 class1 ... classn 的一列。然后,您可以使用 OneVsOneClassifier 或 OVR 等策略,为每个 class_i 运行二元分类算法,以将其与其他分类区分开来。这是多类分类。
如果你想预测多个输出(即 Y 有超过 1 列),那么这个问题是多标签。
为此,您需要使用支持多标签的模型。例如,TreeClassifier 就是其中之一,但 SGD 和逻辑回归则不是。
如果您的标签不相关,您也可以尝试运行完全相同的代码,但每个时间仅提供一列 Y。
要了解差异并了解哪些型号支持哪些功能,请查看https://scikit-learn.org/stable/modules/multiclass.html https://scikit-learn.org/stable/modules/multiclass.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)