2

トレーニング セットから 1 つのトレーニング ドキュメントを選択したとします。選択した特徴の特徴ベクトル X に入れました。

私はやろうとしています:

self.clf = LogisticRegression()
self.clf.fit(X, Y)

私の Y は次のようになります。 [0 0 0 1 1 0 1 0 0 1 0]

11 個の出力値のそれぞれに同時に最適に適合するように、1 つのモデルをトレーニングしたいと考えています。イーサバイナリまたはマルチクラスの単一の値を期待しているが、複数の値を許可していないためfit、エラーが発生するため、これはうまくいかないようです。unhashable type 'list'

sci-kit Learnでこれを行う方法はありますか?

4

2 に答える 2

7

マルチラベル分類には、通常の分類とは多少異なる 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')]
于 2013-01-03T10:27:42.380 に答える
0

あなたの仕事が何であるか、より具体的に教えていただけますか?ラベルはバイナリ変数の固定長ベクトルですか? 次に、これはマルチ ラベル分類と呼ばれます (つまり、複数のラベルがオンまたはオフのいずれかになります)。各ラベルが 2 つ以上の値を持つことができる場合、scikit-learn では「マルチ出力」と呼ばれ、ツリーとアンサンブルによってのみ実行できます。

PS: ロジスティック回帰などの線形分類子を使用する場合、出力変数はいずれにしても独立して処理されます。

于 2013-01-03T09:20:52.763 に答える