การเข้ารหัสตัวแปรเชิงหมวดหมู่
การเข้ารหัสป้ายกำกับ การเข้ารหัสแบบวันฮอต การเข้ารหัสลำดับ และ 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 baselinesklearn 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจจับและนำค่าผิดปกติออก
- การเข้ารหัสตัวแปรเชิงหมวดหมู่
- การปรับสเกลคุณลักษณะ: การทำให้เป็นบรรทัดฐานและมาตรฐาน
- การสร้างสายงานการเตรียมข้อมูล