ข้อมูลเชิงหมวดหมู่: คำศัพท์และการเข้ารหัสแบบฮอตเดียว

คําว่ามิติข้อมูลเป็นคําพ้องกับจํานวนองค์ประกอบในเวกเตอร์ลักษณะ ฟีเจอร์บางอย่างตามหมวดหมู่มีมิติข้อมูลต่ำ เช่น

ชื่อฟีเจอร์ จำนวนหมวดหมู่ ตัวอย่างหมวดหมู่
snowed_today 2 True False
skill_level 3 ผู้เริ่มต้น ผู้ปฏิบัติงาน ผู้เชี่ยวชาญ
season 4 ฤดูหนาว ฤดูใบไม้ผลิ ฤดูร้อน ฤดูใบไม้ร่วง
day_of_week 7 วันจันทร์ วันอังคาร วันพุธ
ดาวเคราะห์ 8 ดาวพุธ ดาวศุกร์ โลก

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

ตัวอย่างเช่น สมมติว่าคุณกําลังสร้างโมเดลเพื่อคาดการณ์ราคารถยนต์โดยอิงตามฟีเจอร์เชิงหมวดหมู่ชื่อ car_color เพียงบางส่วน รถยนต์สีแดงอาจมีมูลค่ามากกว่ารถยนต์สีเขียว เนื่องจากผู้ผลิตนำเสนอสีภายนอกในจำนวนจำกัด car_color จึงเป็นฟีเจอร์เชิงหมวดหมู่ที่มีมิติต่ำ ภาพต่อไปนี้แสดงคลังคำศัพท์ (ค่าที่เป็นไปได้) สำหรับ car_color

รูปที่ 1 สีแต่ละสีในจานสีจะแสดงเป็นฟีเจอร์แยกกัน กล่าวคือ สีแต่ละสีคือองค์ประกอบแยกต่างหากในเวกเตอร์องค์ประกอบ
      เช่น "สีแดง" เป็นฟีเจอร์หนึ่ง "สีส้ม" เป็นฟีเจอร์แยกต่างหาก และอื่นๆ
รูปที่ 1 ฟีเจอร์ที่ไม่ซ้ำกันสำหรับแต่ละหมวดหมู่

แบบฝึกหัด: ตรวจสอบสัญชาติญาณของคุณ

จริงหรือเท็จ: โมเดลแมชชีนเลิร์นนิงสามารถฝึกโดยตรงจากค่าสตริงดิบ เช่น "แดง" และ "ดํา" โดยไม่ต้องแปลงค่าเหล่านี้เป็นเวกเตอร์ตัวเลข
จริง
ในระหว่างการฝึก โมเดลจะจัดการได้เฉพาะตัวเลขทศนิยมเท่านั้น สตริง "Red" ไม่ใช่จํานวนจุดลอยตัว คุณต้องแปลงสตริง เช่น "Red" เป็นตัวเลขทศนิยม
เท็จ
โมเดลแมชชีนเลิร์นนิงจะฝึกได้เฉพาะกับฟีเจอร์ที่มีค่าทศนิยม คุณจึงต้องแปลงสตริงเหล่านั้นเป็นค่าทศนิยมก่อนการฝึก

ตัวเลขดัชนี

โมเดลแมชชีนเลิร์นนิงจะจัดการได้เฉพาะตัวเลขทศนิยม ดังนั้น คุณต้องแปลงสตริงแต่ละรายการเป็นหมายเลขดัชนีที่ไม่ซ้ำกัน ดังที่แสดงในภาพต่อไปนี้

รูปที่ 2 แต่ละสีจะเชื่อมโยงกับค่าจำนวนเต็มที่ไม่ซ้ำกัน เช่น "สีแดง" เชื่อมโยงกับจำนวนเต็ม 0, "สีส้ม" เชื่อมโยงกับจำนวนเต็ม 1 เป็นต้น
รูปที่ 2 ฟีเจอร์ที่จัดทำดัชนี

แบบฝึกหัด: ตรวจสอบความรู้สึกของคุณ

โมเดลควรฝึกกับตัวเลขดัชนีที่แสดงในรูปภาพ 2 โดยตรงหรือไม่
ใช่
หากโมเดลได้รับการฝึกด้วยตัวเลขดัชนี ระบบจะถือว่าแต่ละรายการเป็นค่าตัวเลขอย่างไม่ถูกต้องและถือว่า"Black" (ตัวเลขดัชนี 5) สำคัญต่อโมเดลมากกว่า"Orange" (ตัวเลขดัชนี 1) 5 เท่า
ไม่ได้
โมเดลไม่ควรฝึกด้วยตัวเลขดัชนี หากเป็นเช่นนั้น โมเดลจะถือว่าหมายเลขดัชนีแต่ละรายการเป็นค่าตัวเลข และถือว่า "Black" (หมายเลขดัชนี 5) สำคัญต่อโมเดลมากกว่า "Orange" (หมายเลขดัชนี 1) 5 เท่า

การเข้ารหัสแบบฮอตเดียว

ขั้นตอนถัดไปในการสร้างคำศัพท์คือการแปลงหมายเลขดัชนีแต่ละรายการเป็นการเข้ารหัสแบบฮอตเดียว ในการเข้ารหัสแบบฮอตเวิร์ก 1 รายการ

  • แต่ละหมวดหมู่จะแสดงด้วยเวกเตอร์ (อาร์เรย์) ขององค์ประกอบ N โดย N คือจำนวนหมวดหมู่ ตัวอย่างเช่น หาก car_color มี 8 หมวดหมู่ที่เป็นไปได้ เวกเตอร์เลขร้อนเดียวที่แสดงจะมีองค์ประกอบ 8 รายการ
  • องค์ประกอบในเวกเตอร์แบบฮอตเวกเตอร์ 1 รายการมีค่าเป็น 1.0 ส่วนองค์ประกอบที่เหลือทั้งหมดมีค่าเป็น 0.0

เช่น ตารางต่อไปนี้แสดงการเข้ารหัสแบบฮอตเดียวสำหรับแต่ละรายการในcar_color

ฟีเจอร์ แดง Orange น้ำเงิน เหลือง เขียว ดำ ม่วง สีน้ำตาล
"Red" 1 0 0 0 0 0 0 0
"ส้ม" 0 1 0 0 0 0 0 0
"น้ำเงิน" 0 0 1 0 0 0 0 0
"Yellow" 0 0 0 1 0 0 0 0
"Green" 0 0 0 0 1 0 0 0
"ดำ" 0 0 0 0 0 1 0 0
"Purple" 0 0 0 0 0 0 1 0
"น้ำตาล" 0 0 0 0 0 0 0 1

ระบบจะส่งเวกเตอร์ One-Hot ไม่ใช่สตริงหรือหมายเลขดัชนีไปยังเวกเตอร์ลักษณะ โมเดลจะเรียนรู้น้ำหนักแยกกันสำหรับแต่ละองค์ประกอบของเวกเตอร์ฟีเจอร์

ภาพประกอบต่อไปนี้แสดงการเปลี่ยนรูปแบบต่างๆ ในการแสดงคำศัพท์

รูปที่ 3 แผนภาพกระบวนการจากต้นจนจบในการแมปหมวดหมู่กับเวกเตอร์องค์ประกอบ ในแผนภาพ ฟีเจอร์อินพุตคือ "สีเหลือง",
      'สีส้ม", 'สีน้ำเงิน" และ "สีน้ำเงิน" อีกครั้ง  ระบบจะใช้คลังคำศัพท์ที่จัดเก็บไว้ ("แดง" คือ 0, "ส้ม" คือ 1, "น้ำเงิน" คือ 2, "เหลือง" คือ 3 และอื่นๆ) เพื่อจับคู่ค่าอินพุตกับรหัส ดังนั้น ระบบจะจับคู่ "สีเหลือง",
      'สีส้ม", 'สีน้ำเงิน" และ "สีน้ำเงิน" เป็น 3, 1, 2, 2 จากนั้นระบบจะแปลงค่าเหล่านั้นเป็นเวกเตอร์ฟีเจอร์แบบฮอตเวิร์ก ตัวอย่างเช่น ระบบที่มีสีที่เป็นไปได้ 8 สี จะทำให้ 3 กลายเป็น 0, 0, 0, 1, 0, 0, 0, 0
รูปที่ 3 กระบวนการตั้งแต่ต้นจนจบในการจับคู่หมวดหมู่กับเวกเตอร์

การนําเสนอแบบเบาบาง

ฟีเจอร์ที่มีค่าเป็น 0 (หรือว่างเปล่า) ส่วนใหญ่เรียกว่าฟีเจอร์แบบเบาบาง ฟีเจอร์เชิงหมวดหมู่จํานวนมาก เช่น car_color มีแนวโน้มที่จะเป็นฟีเจอร์ที่กระจัดกระจาย การนําเสนอแบบเบาบางคือการเก็บตําแหน่งของ 1.0 ในเวกเตอร์แบบเบาบาง ตัวอย่างเช่น เวกเตอร์หนึ่งฮอตสำหรับ "Blue" คือ

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

เนื่องจาก 1 อยู่ในตําแหน่ง 2 (เมื่อเริ่มนับที่ 0) การนําเสนอแบบเบาบางสําหรับเวกเตอร์ One-Hot ก่อนหน้าจึงมีดังนี้

2

โปรดทราบว่าการนําเสนอแบบเบาบางใช้หน่วยความจําน้อยกว่าเวกเตอร์ One-Hot 8 องค์ประกอบ สิ่งสำคัญคือโมเดลต้องฝึกด้วยเวกเตอร์แบบฮอตเวิร์ก ไม่ใช่การนำเสนอแบบเบาบาง

ค่าผิดปกติในข้อมูลเชิงหมวดหมู่

ข้อมูลเชิงหมวดหมู่ก็มีค่าผิดปกติเช่นเดียวกับข้อมูลเชิงตัวเลข สมมติว่า car_color ไม่ได้มีแค่สียอดนิยมเท่านั้น แต่ยังมีสีที่ไม่ค่อยได้ใช้ เช่น "Mauve" หรือ "Avocado" แทนที่จะให้สีที่ผิดปกติแต่ละสีเป็นหมวดหมู่แยกต่างหาก คุณรวมสีเหล่านั้นไว้ในหมวดหมู่ "รวมทั้งหมด" หมวดหมู่เดียวได้ ซึ่งเรียกว่าไม่ได้อยู่ในคลังคำ (OOV) กล่าวคือ ระบบจะจัดกลุ่มสีที่ไม่ใช่ค่าปกติทั้งหมดไว้ในที่เก็บข้อมูลค่าที่ไม่ใช่ค่าปกติที่เดียว ระบบจะเรียนรู้น้ำหนักค่าเดียวสำหรับที่เก็บข้อมูล Outlier ดังกล่าว

การเข้ารหัสฟีเจอร์เชิงหมวดหมู่มิติสูง

ฟีเจอร์ตามหมวดหมู่บางรายการมีมิติข้อมูลจำนวนมาก เช่น มิติข้อมูลในตารางต่อไปนี้

ชื่อฟีเจอร์ จำนวนหมวดหมู่ ตัวอย่างหมวดหมู่
words_in_english ~500,000 "happy", "walking"
US_postal_codes ~42,000 "02114", "90301"
last_names_in_Germany ประมาณ 850,000 คน "Schmidt", "Schneider"

เมื่อจํานวนหมวดหมู่สูง การเข้ารหัส One-Hot มักเป็นตัวเลือกที่ไม่เหมาะ การฝัง ซึ่งจะแสดงรายละเอียดในโมดูลการฝังแยกต่างหาก มักเป็นตัวเลือกที่ดีกว่ามาก การฝังจะลดจํานวนมิติข้อมูลลงอย่างมาก ซึ่งจะเป็นประโยชน์ต่อโมเดลใน 2 วิธีสําคัญ ดังนี้

  • โดยปกติโมเดลจะฝึกได้เร็วขึ้น
  • โดยทั่วไปแล้ว โมเดลที่สร้างจะอนุมานการคาดการณ์ได้เร็วกว่า กล่าวคือ โมเดลมีเวลาในการตอบสนองต่ำกว่า

การแฮช (หรือที่เรียกว่าเคล็ดลับการแฮช) เป็นวิธีที่ไม่ค่อยนิยมในการลดจํานวนมิติข้อมูล