多标签分类与普通分类有一些不同的 API。你Y
应该是一个序列序列,例如一个列表列表,比如
Y = [["foo", "bar"], # the first sample is a foo and a bar
["foo"], # the second is only a foo
["bar", "baz"]] # the third is a bar and a baz
Y
然后可以将这样的 a馈送到处理多个分类的估计器。OneVsRestClassifier
您可以使用包装器构造这样的估计器:
from sklearn.multiclass import OneVsRestClassifier
clf = OneVsRestClassifier(LogisticRegression())
然后用 训练clf.fit(X, Y)
。clf.predict
现在也将产生序列序列。
从 scikit-learn 0.15 开始更新,此 API 已被弃用,因为它的输入不明确。您应该将Y
我上面给出的转换为带有 a 的矩阵MultiLabelBinarizer
:
>>> from sklearn.preprocessing import MultiLabelBinarizer
>>> mlb = MultiLabelBinarizer()
>>> mlb.fit_transform(Y)
array([[1, 0, 1],
[0, 0, 1],
[1, 1, 0]])
然后将其提供给估算器的fit
方法。转换回来是inverse_transform
在同一个二值化器上完成的:
>>> mlb.inverse_transform(mlb.transform(Y))
[('bar', 'foo'), ('foo',), ('bar', 'baz')]