0Pricing
Learn AI with Python · บทเรียน

การเข้ารหัสตัวแปรเชิงหมวดหมู่

การเข้ารหัสป้ายกำกับ การเข้ารหัสแบบวันฮอต การเข้ารหัสลำดับ และ pd.get_dummies() เทียบกับ sklearn OrdinalEncoder

การเข้ารหัสตัวแปรเชิงหมวดหมู่ เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงเข้ารหัสหมวดหมู่

แบบจำลองการเรียนรู้ของเครื่องส่วนใหญ่ต้องการ NUMBERS ไม่ใช่ป้ายกำกับข้อความอย่าง "สีแดง" หรือ "เล็ก" การเข้ารหัสจะแปลงตัวแปรเชิงหมวดหมู่ให้อยู่ในรูปแบบตัวเลข โดยยังคงความหมายเดิมไว้

หมวดหมู่แบบมีลำดับเทียบกับแบบไม่มีลำดับ

หมวดหมู่แบบมีลำดับมีลำดับตามธรรมชาติ (เล็ก < กลาง < ใหญ่) ส่วนหมวดหมู่แบบไม่มีลำดับไม่มีลำดับเช่นนั้น (สีแดง สีเขียว สีน้ำเงิน) การเข้ารหัสที่เหมาะสมขึ้นอยู่กับว่าข้อมูลของคุณเป็นประเภทใด

การเข้ารหัสป้ายกำกับสำหรับข้อมูลแบบมีลำดับ

LabelEncoder จับคู่แต่ละหมวดหมู่กับจำนวนเต็ม วิธีนี้เหมาะกับข้อมูลแบบ ORDINAL ซึ่งลำดับของจำนวนเต็มมีความหมาย

from sklearn.preprocessing import LabelEncoder
sizes = ["small", "large", "medium", "small"]
le = LabelEncoder()
print(le.fit_transform(sizes))   # integers (alphabetical by default)

ความเสี่ยงกับข้อมูลแบบไม่มีลำดับ

การใช้การเข้ารหัสป้ายกำกับกับข้อมูลแบบ NOMINAL มีความเสี่ยง แบบจำลองอาจอ่านค่าสีแดง=0 สีเขียว=1 สีน้ำเงิน=2 ว่าสีเขียวอยู่ "ระหว่าง" สีแดงกับสีน้ำเงิน ทำให้เกิดลำดับที่ไม่เป็นจริง ควรใช้การเข้ารหัสแบบหนึ่งค่าเป็นหนึ่งแทน

การเข้ารหัสแบบหนึ่งค่าเป็นหนึ่งด้วย get_dummies

pd.get_dummies สร้างคอลัมน์ไบนารีหนึ่งคอลัมน์ต่อหนึ่งหมวดหมู่ ในแต่ละแถวจะมีคอลัมน์ที่เป็น 1 เพียงคอลัมน์เดียวและไม่มีลำดับแฝง จึงเหมาะอย่างยิ่งกับตัวแปรแบบไม่มีลำดับ

import pandas as pd
df = pd.DataFrame({"color": ["red", "green", "blue", "red"]})
print(pd.get_dummies(df, columns=["color"]))

กับดักตัวแปรจำลอง

เมื่อมี k หมวดหมู่และสร้าง k คอลัมน์ คอลัมน์เหล่านั้นจะมีความสัมพันธ์เชิงเส้นกันอย่างสมบูรณ์ เพราะผลรวมจะเท่ากับ 1 เสมอ กับดักตัวแปรจำลองนี้ทำให้แบบจำลองเชิงเส้นมีปัญหา การตัดคอลัมน์หนึ่งคอลัมน์ออกจะแก้ปัญหาได้

พารามิเตอร์การละหมวดหมู่แรก

drop_first=True นำหมวดหมู่หนึ่งหมวดออก เหลือ k-1 คอลัมน์ หมวดหมู่ที่นำออกจะกลายเป็นค่าพื้นฐานโดยนัย ซึ่งแทนด้วยค่าศูนย์ทั้งหมด และช่วยกำจัดความสัมพันธ์เชิงเส้นกัน

print(pd.get_dummies(df, columns=["color"], drop_first=True))
# one fewer column; the dropped color is the baseline

sklearn OrdinalEncoder

สำหรับกระบวนงาน OrdinalEncoder เป็นเครื่องมือของ sklearn ที่เทียบเท่ากับการเข้ารหัสป้ายกำกับสำหรับ FEATURES และช่วยให้ระบุลำดับหมวดหมู่ได้อย่างชัดเจน

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(categories=[["small", "medium", "large"]])
print(enc.fit_transform([["medium"], ["large"], ["small"]]))

sklearn OneHotEncoder

OneHotEncoder เป็นเครื่องมือการเข้ารหัสแบบหนึ่งค่าเป็นหนึ่งที่เหมาะกับกระบวนงาน โดยเรียนรู้หมวดหมู่จากข้อมูลฝึกและใช้การจับคู่แบบเดียวกันกับข้อมูลใหม่ ซึ่งสำคัญอย่างยิ่งสำหรับการใช้งานจริง

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"], ["green"], ["blue"]]))

การจัดการหมวดหมู่ที่ไม่เคยพบ

ข้อมูลทดสอบอาจมีหมวดหมู่ที่ไม่เคยพบในข้อมูลฝึก ตั้งค่า handle_unknown="ignore" เพื่อให้ OneHotEncoder แสดงผลเป็นศูนย์ทั้งหมดแทนที่จะหยุดทำงานด้วยข้อผิดพลาด

ohe = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
ohe.fit([["red"], ["green"]])
print(ohe.transform([["blue"]]))   # all zeros, no error

คอลัมน์ที่มีค่าหลากหลายจำนวนมาก

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

ตรวจสอบอย่างรวดเร็ว

ทดสอบความรู้เรื่องการเข้ารหัสของคุณ

ทบทวน

ชุดเครื่องมือการเข้ารหัส:

  • ข้อมูลแบบมีลำดับ -> การเข้ารหัสเป็นจำนวนเต็ม (LabelEncoder / OrdinalEncoder)
  • ข้อมูลแบบไม่มีลำดับ -> การเข้ารหัสแบบหนึ่งค่าเป็นหนึ่ง (pd.get_dummies / OneHotEncoder)
  • drop_first=True ช่วยหลีกเลี่ยงกับดักตัวแปรจำลอง
  • handle_unknown="ignore" สำหรับหมวดหมู่ในชุดทดสอบที่ไม่เคยพบ
  • ระวังจำนวนคอลัมน์ที่เพิ่มขึ้นอย่างมากจากคอลัมน์ที่มีค่าหลากหลายจำนวนมาก

คำถามที่พบบ่อย

บทเรียน “การเข้ารหัสตัวแปรเชิงหมวดหมู่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเข้ารหัสตัวแปรเชิงหมวดหมู่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเข้ารหัสตัวแปรเชิงหมวดหมู่”

การเข้ารหัสป้ายกำกับ การเข้ารหัสแบบวันฮอต การเข้ารหัสลำดับ และ pd.get_dummies() เทียบกับ sklearn OrdinalEncoder คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การเข้ารหัสตัวแปรเชิงหมวดหมู่” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม

ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตรวจจับและนำค่าผิดปกติออก
  2. การเข้ารหัสตัวแปรเชิงหมวดหมู่
  3. การปรับสเกลคุณลักษณะ: การทำให้เป็นบรรทัดฐานและมาตรฐาน
  4. การสร้างสายงานการเตรียมข้อมูล
← กลับไปที่ Learn AI with Python