การเข้ารหัสดัมมี่เทียบกับหนึ่งใน Scikit เรียนรู้


50

มีวิธีการเข้ารหัสตัวแปรเด็ดขาดสองวิธี กล่าวว่าหนึ่งตัวแปรเด็ดขาดมีค่าn การเข้ารหัสแบบ one-hotจะแปลงเป็นตัวแปรnในขณะที่การเข้ารหัสแบบจำลองจะแปลงเป็นตัวแปรn-1 ถ้าเรามีตัวแปรเด็ดขาดkแต่ละตัวมีค่าn การเข้ารหัสฮอตหนึ่งจบลงด้วยตัวแปรknในขณะที่การเข้ารหัสดัมมี่ลงท้ายด้วยตัวแปรkn-k

ฉันได้ยินมาว่าสำหรับการเข้ารหัสที่ร้อนแรงเพียงครั้งเดียวการสกัดกั้นอาจนำไปสู่ปัญหา collinearity ซึ่งทำให้ตัวแบบไม่ดัง บางคนเรียกมันว่า " กับดักตัวแปรจำลอง "

คำถามของฉัน:

  1. โมเดลการถดถอยเชิงเส้นของ Scikit-Learn ช่วยให้ผู้ใช้ปิดใช้งานการสกัดกั้น ดังนั้นสำหรับการเข้ารหัสที่ร้อนแรงฉันควรตั้งค่า fit_intercept = False เสมอหรือไม่ สำหรับการเข้ารหัสแบบสุ่มควรตั้งค่า fit_intercept เป็น True หรือไม่ ฉันไม่เห็น "คำเตือน" บนเว็บไซต์

  2. เนื่องจากการเข้ารหัสแบบร้อนแรงสร้างตัวแปรมากขึ้นมันมีระดับความอิสระมากกว่าการเข้ารหัสแบบจำลองหรือไม่?

คำตอบ:


35

โมเดลการถดถอยเชิงเส้นของ Scikit-Learn ช่วยให้ผู้ใช้ปิดใช้งานการสกัดกั้น ดังนั้นสำหรับการเข้ารหัสที่ร้อนแรงฉันควรตั้งค่า fit_intercept = False เสมอหรือไม่ สำหรับการเข้ารหัสแบบสุ่มควรตั้งค่า fit_intercept เป็น True หรือไม่ ฉันไม่เห็น "คำเตือน" บนเว็บไซต์

สำหรับโมเดลเชิงเส้นแบบไม่สม่ำเสมอที่มีการเข้ารหัสแบบร้อนแรงใช่คุณต้องตั้งค่าการดักฟังให้เป็นเท็จ sklearnยังช่วยให้มีการลงโทษการหดตัวสันเขาและในกรณีที่มันไม่จำเป็นและในความเป็นจริงคุณควรรวมทั้งการสกัดกั้นและทุกระดับ สำหรับการเข้ารหัสดัมมี่คุณควรรวมการสกัดกั้นเว้นแต่คุณจะสร้างมาตรฐานให้กับตัวแปรทั้งหมดของคุณซึ่งในกรณีนี้การสกัดกั้นจะเป็นศูนย์

เนื่องจากการเข้ารหัสแบบร้อนแรงสร้างตัวแปรมากขึ้นมันมีระดับความอิสระมากกว่าการเข้ารหัสแบบจำลองหรือไม่?

การสกัดกั้นนั้นเป็นการเพิ่มระดับของอิสรภาพดังนั้นในรูปแบบที่ระบุไว้อย่างดีมันก็เท่ากับ

สำหรับอันที่สองจะเกิดอะไรขึ้นถ้ามีตัวแปรเด็ดขาด k? ตัวแปร k จะถูกลบออกในการเข้ารหัสแบบจำลอง ระดับของเสรีภาพยังคงเหมือนเดิมหรือไม่?

คุณไม่สามารถจัดวางโมเดลที่คุณใช้ทุกระดับของตัวแปรเด็ดขาดทั้งการสกัดกั้นหรือไม่ สำหรับทันทีที่คุณมีการเข้ารหัสแบบร้อนทุกระดับในตัวแปรเดียวในแบบจำลองให้พูดด้วยตัวแปรไบนารีจากนั้นคุณมีการผสมเชิงเส้นของตัวทำนายเท่ากับเวกเตอร์คงที่x1,x2,,xn

x1+x2++xn=1

ถ้าคุณลองป้อนทุกระดับของหมวดหมู่อีกอันลงในแบบจำลองคุณจะได้ชุดแบบเส้นตรงที่แตกต่างกันเท่ากับเวกเตอร์คงที่x

x1+x2++xk=1

และคุณได้สร้างการอ้างอิงเชิงเส้น

x1+x2+xnx1x2xk=0

ดังนั้นคุณต้องออกจากระดับในตัวแปรที่สองและทุกอย่างเรียงกันอย่างถูกต้อง

บอกว่าฉันมีตัวแปรเด็ดขาด 3 ตัวซึ่งแต่ละตัวมี 4 ระดับ ในการเข้ารหัสแบบจำลองนั้นตัวแปร 3 * 4-3 = 9 จะถูกสร้างขึ้นโดยมีจุดตัดหนึ่งจุด ในการเข้ารหัสแบบ one-hot ตัวแปร 3 * 4 = 12 ถูกสร้างขึ้นโดยไม่มีการสกัดกั้น ฉันถูกไหม?

สิ่งที่สองใช้งานไม่ได้จริง คอลัมน์เมทริกซ์การออกแบบที่คุณสร้างจะเป็นเอกพจน์ คุณต้องลบสามคอลัมน์ออกจากการเข้ารหัสตามหมวดหมู่ที่แตกต่างกันสามแบบเพื่อกู้คืนการออกแบบที่ไม่เป็นเอกเทศ3×4=12


ขอบคุณ สำหรับอันที่สองจะเกิดอะไรขึ้นถ้ามีตัวแปรเด็ดขาด k? ตัวแปร k จะถูกลบออกในการเข้ารหัสแบบจำลอง ระดับของเสรีภาพยังคงเหมือนเดิมหรือไม่?
Munichong

@ChongWang ฉันแก้ไขการตอบความคิดเห็นของคุณเป็นคำตอบของฉัน
Matthew Drury

ขออภัยฉันหลงทางเล็กน้อย บอกว่าฉันมีตัวแปรเด็ดขาด 3 ตัวซึ่งแต่ละตัวมี 4 ระดับ ในการเข้ารหัสแบบจำลองนั้นตัวแปร 3 * 4-3 = 9 จะถูกสร้างขึ้นโดยมีจุดตัดหนึ่งจุด ในการเข้ารหัสแบบ one-hot ตัวแปร 3 * 4 = 12 ถูกสร้างขึ้นโดยไม่มีการสกัดกั้น ฉันถูกไหม? ดังนั้นที่นี่การเข้ารหัส dummy ของ Dummy คือ 9-1 ในขณะที่ DF ของการเข้ารหัสแบบร้อนแรงคือ 12 ฉันถูกต้องหรือไม่
Munichong

@ChongWang แก้ไขอีกครั้ง
Matthew Drury

@ MatthewDrury ฉันมีปัญหาเดียวกันกับ linear_model ใน sklearn หลังจากการเข้ารหัสต้นไม้ตัดสินใจและ KNN ทำงานได้ดี แต่การถดถอยเชิงเส้นตกอยู่ในภาวะเฉพาะตัว ฉันเข้าใจจากคำตอบของคุณว่าควรลบ "ระดับจากตัวแปรตัวที่สอง" แต่ฉันไม่รู้ว่ามันแปลว่าอะไรจริงหรือ ตัวอย่างเช่นฉันมี 3 คุณสมบัติตัวเลขและ 3 หมวดหมู่ (ผู้ผลิตรุ่นและ fuel_type) แบบจำลองนั้นขึ้นอยู่กับผู้ผลิตเนื่องจากผู้ผลิตหนึ่งรายสามารถมีโมเดลได้ n แบบ ดังนั้นวิธีการดำเนินการในสถานการณ์ทั่วไปประเภทนี้ถ้าฉันต้องการใช้การถดถอยเชิงเส้น?
ฮาร์วีย์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.