ケラスを使用したマルチクラス分類で文字列ラベルを処理するにはどうすればよいですか?


18

私は機械学習とケラスの初心者であり、現在ケラスを使用してマルチクラスの画像分類問題に取り組んでいます。入力はタグ付き画像です。いくつかの前処理の後、トレーニングデータはPythonリストで次のように表されます。

[["dog", "path/to/dog/imageX.jpg"],["cat", "path/to/cat/imageX.jpg"], ["bird", "path/to/cat/imageX.jpg"]]

「犬」、「猫」、および「鳥」はクラスラベルです。この問題にはワンホットエンコーディングを使用する必要があると思いますが、これらの文字列ラベルの処理方法についてはあまり明確ではありません。私はこの方法でsklearnのLabelEncoder()を試しました:

encoder = LabelEncoder()
trafomed_label = encoder.fit_transform(["dog", "cat", "bird"])
print(trafomed_label)

そして、出力は[2 1 0]であり、これは[[1,0,0]、[0,1,0]、[0,0,1]]のような気まぐれな出力とは異なります。いくつかのコーディングで行うことができますが、それに対処するための「標準」または「伝統的な」方法があるかどうか知りたいですか?

回答:


14

SklearnのLabelEncoderモジュールは、すべてのクラスを検出し、それぞれに0から始まる数値IDを割り当てます。つまり、クラス表現が元のデータセットにある場合は、各クラスを表現する簡単で一貫した方法が得られます。ワンホットエンコードは行いませんが、正しく識別するとかなり近いため、これらのIDを使用して、他のコードでワンホットエンコードをすばやく生成できます。

ワンホットエンコーディングが必要な場合は、LabelBinarizer代わりに使用できます。これは非常によく似ています:

 from sklearn.preprocessing import LabelBinarizer
 encoder = LabelBinarizer()
 transfomed_label = encoder.fit_transform(["dog", "cat", "bird"])
 print(transfomed_label)

出力:

[[0 0 1]
 [0 1 0]
 [1 0 0]]

しかし、新しい色を予測しようとするとき、hotencodingはどのように役立ちますか?たぶんあなたの場合、モデルを再訓練する必要があります。解決策はありますか?
gtzinos

@gtzinos:それは別の質問のように見えます。おそらくサイトで聞いてみてください。その場合、NNが新しい項目(トレーニングデータには表示されませんが、論理的には新しい入力で発生するはずです)を予測するか、オンライントレーニングデータに遭遇したときに新しいクラスをオンザフライで追加するかを明確にします。
ニールスレーター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.