Bagaimana cara menangani label string dalam klasifikasi multi-kelas dengan keras?

18

Saya pemula di pembelajaran mesin dan keras dan sekarang bekerja masalah klasifikasi gambar multi-kelas menggunakan keras. Input ditandai gambar. Setelah beberapa pra-pemrosesan, data pelatihan diwakili dalam daftar Python sebagai:

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

"anjing", "kucing", dan "burung" adalah label kelas. Saya pikir pengkodean satu-panas harus digunakan untuk masalah ini, tetapi saya tidak begitu jelas tentang bagaimana menghadapinya dengan label string ini. Saya sudah mencoba LabelEncoder () sklearn dengan cara ini:

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

Dan hasilnya adalah [2 1 0], yang berbeda dengan yang saya harapkan dari sesuatu seperti [[1,0,0], [0,1,0], [0,0,1]]. Itu dapat dilakukan dengan beberapa pengkodean, tetapi saya ingin tahu apakah ada beberapa cara "standar" atau "tradisional" untuk menghadapinya?

Dracary
sumber

Jawaban:

14

LabelEncoderModul Sklearn menemukan semua kelas dan memberikan masing-masing id angka mulai dari 0. Ini berarti bahwa apa pun representasi kelas Anda dalam kumpulan data asli, Anda sekarang memiliki cara konsisten sederhana untuk mewakili masing-masing. Itu tidak melakukan pengkodean satu-panas, meskipun ketika Anda mengidentifikasi dengan benar, itu cukup dekat, dan Anda dapat menggunakan id tersebut untuk dengan cepat menghasilkan satu-hot-pengkodean dalam kode lain.

Jika Anda ingin penyandian satu panas, Anda dapat menggunakannya LabelBinarizer. Ini bekerja sangat mirip:

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

Keluaran:

[[0 0 1]
 [0 1 0]
 [1 0 0]]
Neil Slater
sumber
Tetapi bagaimana hotencoding membantu Anda ketika Anda akan mencoba untuk memprediksi warna baru? Mungkin dalam kasus Anda, Anda harus melatih ulang model. Apakah Anda punya solusi?
gtzinos
@ gtzinos: Itu terlihat seperti pertanyaan yang berbeda. Mungkin bertanya di situs. Jika ya, jelaskan apakah Anda khawatir tentang NN yang memprediksi item baru (tidak terlihat dalam data pelatihan, tetapi secara logis harus terjadi pada input baru), atau menambahkan kelas baru dengan cepat ketika mereka ditemui dalam data pelatihan online.
Neil Slater