วิธีการจัดการกับฉลากสตริงในการจำแนกหลายระดับกับ keras?


18

ฉันเป็นมือใหม่เกี่ยวกับการเรียนรู้ของเครื่องและ keras และตอนนี้ทำงานกับปัญหาการจำแนกภาพหลายระดับโดยใช้ keras อินพุตถูกติดแท็กรูปภาพ หลังจากการประมวลผลล่วงหน้าข้อมูลการฝึกอบรมจะถูกแสดงในรายการ Python ดังนี้

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

"สุนัข", "แมว" และ "นก" เป็นป้ายกำกับของชั้นเรียน ฉันคิดว่าควรใช้การเข้ารหัสแบบร้อนแรงสำหรับปัญหานี้ แต่ฉันไม่ชัดเจนเกี่ยวกับวิธีจัดการกับฉลากสตริงเหล่านี้ ฉันได้ลอง LabelEncoder ของ sklearn ด้วยวิธีนี้:

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

LabelEncoderโมดูลของ Sklearn ค้นหาคลาสทั้งหมดและกำหนดรหัสตัวเลขแต่ละค่าเริ่มต้นจาก 0 ซึ่งหมายความว่าอะไรก็ตามที่การแทนคลาสของคุณอยู่ในชุดข้อมูลต้นฉบับตอนนี้คุณมีวิธีที่สอดคล้องกันง่าย ๆ ในการเป็นตัวแทนแต่ละชุด มันไม่ได้ทำการเข้ารหัสแบบร้อนแรงแม้ว่าคุณจะระบุได้อย่างถูกต้อง แต่ก็ใกล้และคุณสามารถใช้รหัสเหล่านั้นเพื่อสร้างการเข้ารหัสแบบร้อนอย่างรวดเร็วในรหัสอื่น

หากคุณต้องการการเข้ารหัสแบบร้อนแรงคุณสามารถใช้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 ที่จะทำนายรายการใหม่ (ไม่เห็นในข้อมูลการฝึกอบรม แต่ควรมีเหตุผลเกิดขึ้นกับอินพุตใหม่) หรือเพิ่มคลาสใหม่ทันทีเมื่อพบข้อมูลการฝึกอบรมออนไลน์
Neil Slater
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.