如何在Scikit中处理响应OneVsRestClassifier-学习多标签

时间:2016-06-15 13:12:55

标签: python scikit-learn classification multilabel-classification

我是Scikit的新手 - 学习和分类。我的任务是多标签分类问题。据我所知predict返回带有n元组的数组,这与示例中的要素数量相同。这是什么意思?我如何获得严格的订单和严格的预测值? 因为x_test = X_train[0]输出Result [('a', 'c'), (), ()]x_test = X_train[0]输出Result [('a',), (), ()]

import numpy as np
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import MultiLabelBinarizer

input_data = [
  [0, 2, 0, 'a', 'c'],
  [0, 2, 0, 'a', 'c'],
  [0, 2, 0, 'a', 'c'],
  [0, 1, 0, 'a', 'c'],
  [1, 2, 1, 'b', 'e'],
  [1, 2, 0, 'b', 'd'],
  [1, 2, 0, 'a', 'e'],
  [1, 2, 0, 'a', 'd'],
  [1, 1, 0, 'a', 'c']
]
X = [x[0:3] for x in input_data]
y = [x[-2:] for x in input_data]


X_train = np.array(X)
y_train = np.array(y)
mlb = MultiLabelBinarizer()
y_train = mlb.fit_transform(y_train)

classifier = OneVsRestClassifier(SVC())

classifier.fit(X_train, y_train)

x_test = X_train[0]
result = classifier.predict(x_test)
labels = mlb.inverse_transform(result)
print("Result %s" % labels)

1 个答案:

答案 0 :(得分:0)

您的五个班级的结果是积极的或消极的,因此,' a' ' C'对于测试[0]和' a'对于第二个。 多标记分类的目的是将每个数据标记为五个类中的0-5。

如果你想要严格的两个标签你可以运行两个单一的标签分类,它就足够了。