เมื่อใดจึงต้องใช้ One Hot Encoding กับ LabelEncoder vs DictVectorizor


95

ฉันได้สร้างแบบจำลองที่มีข้อมูลหมวดหมู่มาระยะหนึ่งแล้วและเมื่ออยู่ในสถานการณ์นี้ฉันเริ่มใช้ฟังก์ชั่น LabelEncoder ของ scikit-Learn เพื่อแปลงข้อมูลนี้ก่อนที่จะสร้างแบบจำลอง

ผมเข้าใจความแตกต่างระหว่างOHE, LabelEncoderและDictVectorizorในแง่ของสิ่งที่พวกเขากำลังทำเพื่อข้อมูล แต่สิ่งที่ไม่ชัดเจนกับผมคือเมื่อคุณอาจเลือกที่จะจ้างเทคนิคหนึ่งมากกว่าอีก

มีอัลกอริทึมหรือสถานการณ์บางอย่างที่มีข้อดี / ข้อเสียเกี่ยวกับผู้อื่นหรือไม่?


2
ในการอ้างอิงถึงคำตอบของ AN6U5และคำสั่งนี้:> ยังมีอัลกอริทึมเช่นแผนผังการตัดสินใจและฟอเรสต์แบบสุ่มที่สามารถทำงานกับตัวแปรเด็ดขาดได้ดีและ LabelEncoder สามารถใช้เพื่อเก็บค่าโดยใช้พื้นที่ดิสก์ที่น้อยลง จะไม่ใช้ LabelEncoder แปลงหมวดหมู่เป็นคุณลักษณะที่เป็นตัวเลขจึงทำให้แผนภูมิการตัดสินใจทำการแยกที่ค่าบางอย่างซึ่งไม่สมเหตุสมผลจริง ๆ เนื่องจากการทำแผนที่เป็นไปตามอำเภอใจ?
นิโก้

1
ฉันคิดว่าสิ่งที่ AN6U5 พูดนั้นเป็นเรื่องเฉพาะสำหรับต้นไม้ตัดสินใจที่ใช้งานได้ดีเพราะต้นไม้จะแยกบนสุนัขแมวเมาส์หรือ 1,2,3 และความหมายของ "cat" vs "2" ไม่สำคัญสำหรับ ต้นไม้ (คิดเกี่ยวกับวิธีการแยก) ในกรณีของบางอย่างเช่นการถดถอยแบบลอจิสติกค่าเหล่านี้เป็นส่วนหนึ่งของสมการเนื่องจากคุณคูณค่าน้ำหนัก * ดังนั้นมันอาจทำให้เกิดปัญหาการฝึกอบรมและปัญหาน้ำหนักเนื่องจากสุนัข: 1 และแมว: 2 ไม่มีความสัมพันธ์แบบตัวเลข 1 * 2 มันยังสามารถทำงานกับตัวอย่างการฝึกอบรมและยุคสมัยที่เพียงพอ)
Doug F

คำตอบ:


124

มีบางกรณีที่ LabelEncoder หรือ DictVectorizor มีประโยชน์ แต่สิ่งเหล่านี้ค่อนข้าง จำกัด ในความเห็นของฉันเนื่องจากกฎ

LabelEncoder สามารถเปลี่ยน [dog, cat, dog, mouse, cat] เป็น [1,2,1,3,2] แต่จากนั้นกฎที่กำหนดไว้ก็หมายความว่าค่าเฉลี่ยของสุนัขและเมาส์คือแมว ยังมีอัลกอริทึมเช่นแผนผังการตัดสินใจและฟอเรสต์แบบสุ่มที่สามารถทำงานกับตัวแปรเด็ดขาดได้ดีและ LabelEncoder สามารถใช้เพื่อเก็บค่าโดยใช้พื้นที่ดิสก์น้อยลง

One-Hot-Encoding มีข้อได้เปรียบที่ผลลัพธ์คือเลขฐานสองแทนที่จะเป็นเลขลำดับและทุกอย่างอยู่ในพื้นที่เวกเตอร์แบบมุมฉาก ข้อเสียคือสำหรับ cardinality สูงพื้นที่คุณลักษณะสามารถระเบิดได้อย่างรวดเร็วและคุณเริ่มต่อสู้กับคำสาปของมิติ ในกรณีเหล่านี้โดยทั่วไปฉันใช้การเข้ารหัสแบบหนึ่งร้อนตามด้วย PCA เพื่อลดขนาด ฉันพบว่าการผสมผสานที่ลงตัวระหว่าง PCA แบบ one-hot plus สามารถเอาชนะได้โดยวิธีการเข้ารหัสอื่น ๆ PCA ค้นหาการซ้อนทับเชิงเส้นดังนั้นโดยปกติจะมีแนวโน้มที่จะจัดกลุ่มคุณสมบัติที่คล้ายกันลงในคุณลักษณะเดียวกัน


1
ขอบคุณมาก - มันมีประโยชน์มากและมีเหตุผลมากมาย มีรูปแบบการเข้ารหัสอื่น ๆ ที่คุณใช้สำหรับเคสเฉพาะหรือรุ่นขอบ คุณเคยพบว่าคุณอยู่ในสถานการณ์ที่คุณจะใช้รูปแบบการเข้ารหัสที่แตกต่างกันสำหรับคุณสมบัติที่แตกต่างกันหรือไม่?
anthr

20

ในขณะที่AN6U5ให้คำตอบที่ดีมากฉันต้องการเพิ่มบางประเด็นเพื่อใช้อ้างอิงในอนาคต เมื่อพิจารณาOne Hot Encoding (OHE) และLabel Encodingเราจะต้องพยายามและเข้าใจว่าคุณกำลังสร้างโมเดลใด คือโมเดลสองประเภทที่เราจะพิจารณา ได้แก่ :

  1. แบบจำลองที่ใช้ต้นไม้ : การตัดสินใจแบบไล่ระดับสีกระตุ้นต้นไม้การตัดสินใจและป่าสุ่ม
  2. โมเดลที่ไม่ใช่แบบต้นไม้ : แบบเชิงเส้น, kNN หรือเครือข่ายประสาทเทียม

ลองพิจารณาว่าจะใช้ OHE เมื่อใดและจะใช้การเข้ารหัสป้ายกำกับเมื่อสร้างแบบจำลองที่ใช้แผนภูมิต้นไม้หรือไม่

เราใช้ OHE เมื่อ:

  1. เมื่อค่าที่อยู่ใกล้กันในการเข้ารหัสฉลากจะสอดคล้องกับค่าเป้าหมายที่ไม่ได้ปิด (ข้อมูลที่ไม่ใช่เชิงเส้น)
  2. เมื่อคุณสมบัติหมวดหมู่ไม่ได้เป็นอันดับ (dog, cat, mouse)

เราใช้การเข้ารหัสฉลากเมื่อ:

  1. คุณลักษณะที่เป็นหมวดหมู่คือลำดับ (จูเนียร์กิโลกรัมซีเนียร์กิโลกรัมโรงเรียนประถมมัธยม ฯลฯ )
  2. เมื่อเราสามารถสร้างตัวเข้ารหัสฉลากที่กำหนดป้ายกำกับที่ใกล้เคียงกับหมวดหมู่ที่คล้ายกัน : สิ่งนี้นำไปสู่ ​​spilts ที่น้อยลงในปอยผมจึงลดเวลาดำเนินการ
  3. เมื่อจำนวนของคุณสมบัติที่เป็นหมวดหมู่ในชุดข้อมูลมีขนาดใหญ่: การเข้ารหัสหนึ่งคุณสมบัติของหมวดหมู่ที่มีค่าจำนวนมากสามารถนำไปสู่ ​​(1) การใช้หน่วยความจำสูงและ (2) กรณีที่คุณสมบัติที่ไม่จัดหมวดหมู่โดยไม่ค่อยใช้ คุณสามารถจัดการกับกรณีที่ 1 หากคุณใช้เมทริกซ์กระจัดกระจาย กรณีที่ 2 สามารถเกิดขึ้นได้หากคุณสร้างแผนผังโดยใช้ฟีเจอร์ย่อยเท่านั้น ตัวอย่างเช่นหากคุณมีคุณสมบัติตัวเลข 9 ตัวและ 1 หมวดที่มีค่าไม่ซ้ำกัน 100 ค่าและคุณมีคุณสมบัติเข้ารหัสหนึ่งหมวดหมู่คุณจะได้รับ 109 คุณสมบัติ หากทรีถูกสร้างขึ้นด้วยชุดย่อยของคุณลักษณะเท่านั้นคุณลักษณะตัวเลข 9 ตัวแรกจะไม่ถูกนำมาใช้ ในกรณีนี้คุณสามารถเพิ่มขนาดการควบคุมพารามิเตอร์ของชุดย่อยนี้ ใน xgboost มันถูกเรียกว่า colsample_bytree ใน Random Forest max_features ของ sklearn

ในกรณีที่คุณต้องการดำเนินการกับ OHE ตามที่ @ AN6U5 แนะนำคุณอาจต้องการรวม PCA กับ OHE

ให้พิจารณาว่าเมื่อใดที่จะใช้การเข้ารหัส OHE และฉลากในขณะที่สร้างแบบจำลองที่ไม่ใช่แบบทรี

ในการใช้การเข้ารหัสฉลากการพึ่งพาระหว่างคุณลักษณะและเป้าหมายต้องเป็นแบบเชิงเส้นเพื่อให้การเข้ารหัสฉลากสามารถใช้งานได้อย่างมีประสิทธิภาพ

ในทำนองเดียวกันในกรณีที่การพึ่งพาไม่ใช่เชิงเส้นคุณอาจต้องการใช้ OHE เหมือนกัน

หมายเหตุ: คำอธิบายบางส่วนได้รับการอ้างอิงจากHow to Win a Data Science Competitionจาก Coursera


คำอธิบายที่ใช้งานง่ายมาก ไม่ควรจะเป็น "แยก" ไม่ใช่ "spilts" ใช่ไหม
dzieciou

0

LabelEncoder ใช้สำหรับข้อมูลอันดับในขณะที่ OHE ใช้สำหรับข้อมูลที่ระบุ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.