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

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

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

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

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

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

แบบฝึกหัด: ทดสอบความเข้าใจ

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

หมายเลขดัชนี

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

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

หลังจากแปลงสตริงเป็นหมายเลขอินเด็กซ์ที่ไม่ซ้ำกันแล้ว คุณจะต้องประมวลผลข้อมูลเพิ่มเติมเพื่อแสดงข้อมูลในลักษณะที่จะช่วยให้โมเดลเรียนรู้ความสัมพันธ์ที่มีความหมายระหว่างค่าต่างๆ หากปล่อยให้ข้อมูลฟีเจอร์เชิงหมวดหมู่เป็นจำนวนเต็มที่จัดทำดัชนีและโหลดลงในโมเดล โมเดลจะถือว่าค่าที่จัดทำดัชนีเป็นตัวเลขทศนิยมต่อเนื่อง จากนั้นโมเดลจะพิจารณาว่า "สีม่วง" มีแนวโน้มมากกว่า "สีส้ม" 6 เท่า

การเข้ารหัสแบบ One-hot

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

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

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

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

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

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

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

การแทนค่าแบบกระจัดกระจาย

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

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

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

2

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

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

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

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

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

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

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

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

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