マルチラベル分類には、通常の分類とは多少異なる 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
複数の分類を処理する推定器に供給することができます。OneVsRestClassifier
ラッパーを使用して、そのような推定器を構築できます。
from sklearn.multiclass import OneVsRestClassifier
clf = OneVsRestClassifier(LogisticRegression())
でトレーニングしclf.fit(X, Y)
ます。clf.predict
シーケンスのシーケンスも生成するようになりました。
UPDATE scikit-learn 0.15 の時点で、この API は入力があいまいなため廃止されました。Y
上で示したものを次の行列に変換する必要があり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')]