การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง
การเข้ารหัสเป้าหมาย การเข้ารหัสความถี่ การเข้ารหัสไบนารี และเวกเตอร์ฝังตัวสำหรับคอลัมน์ที่มีค่าหลากหลายจำนวนมาก
การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการเข้ารหัสข้อมูลแบบหมวดหมู่
โมเดลต้องใช้ตัวเลข แต่หมวดหมู่เป็นข้อความ การเข้ารหัสวันฮอตเหมาะกับหมวดหมู่จำนวนน้อย แต่คุณลักษณะที่มีจำนวนหมวดหมู่สูง เช่น เมืองหรือสินค้านับพันรายการ จะสร้างคอลัมน์มากเกินไป
ข้อจำกัดของการเข้ารหัสวันฮอตและป้ายกำกับ
การเข้ารหัสวันฮอตทำให้มิติข้อมูลเพิ่มขึ้นอย่างรวดเร็ว การเข้ารหัสป้ายกำกับแบบธรรมดาสร้างลำดับที่ไม่เป็นจริงขึ้นมา เช่น เมืองที่ 5 ไม่ได้มากกว่าเมืองที่ 2 สำหรับข้อมูลที่มีจำนวนหมวดหมู่สูง เราจึงต้องใช้การเข้ารหัสที่ฉลาดกว่า
การเข้ารหัสตามเป้าหมายคืออะไร
การเข้ารหัสตามเป้าหมายจะแทนที่แต่ละหมวดหมู่ด้วยค่าเฉลี่ยของตัวแปรเป้าหมายสำหรับหมวดหมู่นั้น เมืองหนึ่งจะแทนด้วยอัตราการเลิกใช้บริการโดยเฉลี่ยของลูกค้าในเมืองนั้น ซึ่งเป็นตัวเลขเดียวที่ให้ข้อมูล
import pandas as pd
means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)อันตรายจากการปรับพอดีเกินไป
หมวดหมู่ที่พบได้น้อยและมีแถวข้อมูลไม่กี่แถวจะได้ค่าเฉลี่ยสุดโต่ง ซึ่งทำให้ข้อมูลเป้าหมายรั่วไหลและเกิดการปรับพอดีเกินไป หมวดหมู่ที่พบเพียงครั้งเดียวจะคัดลอกป้ายกำกับเดียวนั้นมาโดยตรง เราแก้ปัญหานี้ด้วยการทำให้เรียบ
การปรับค่าเฉลี่ยให้เรียบ
การปรับให้เรียบ ผสานค่าเฉลี่ยของหมวดหมู่เข้ากับค่าเฉลี่ยรวม โดยให้น้ำหนักตามจำนวนตัวอย่างในหมวดหมู่นั้น หมวดหมู่ที่มีตัวอย่างน้อยจะโน้มเข้าหาค่าเฉลี่ยรวมมากขึ้น จึงช่วยลดความแปรปรวน
import pandas as pd
global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])ไลบรารี category_encoders
แพ็กเกจ category_encoders นำตัวเข้ารหัสเหล่านี้มาใช้งานผ่านส่วนติดต่อแบบ scikit-learn ทำให้สามารถนำไปใช้ในไปป์ไลน์ และประยุกต์ใช้กับชุดฝึกและชุดทดสอบได้อย่างสม่ำเสมอ
import category_encoders as ce
encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)หลีกเลี่ยงการรั่วไหลในการใช้งานจริง
ควรฝึกตัวเข้ารหัสด้วยข้อมูลฝึกเท่านั้นเสมอ จากนั้นจึงแปลงข้อมูลตรวจสอบหรือข้อมูลทดสอบ ยิ่งไปกว่านั้น ควรใช้การตรวจสอบไขว้หรือการเข้ารหัสนอกโฟลด์ เพื่อให้แต่ละแถวถูกเข้ารหัสด้วยข้อมูลที่ไม่รวมแถวนั้นเอง
import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
pipe = make_pipeline(
ce.TargetEncoder(cols=["city"]),
LogisticRegression(),
)
# fit inside CV to encode without leakageการเข้ารหัสแบบไบนารี
BinaryEncoder แปลงหมวดหมู่เป็นเลขฐานสอง โดยใช้เพียง log2(N) คอลัมน์แทนที่จะใช้ N คอลัมน์ วิธีนี้เป็นทางเลือกตรงกลางที่ใช้พื้นที่กระชับระหว่างการเข้ารหัสแบบ one-hot กับการเข้ารหัสเป้าหมาย
import category_encoders as ce
encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columnsตัวเข้ารหัสอื่นที่มีประโยชน์
category_encoders ยังมี CountEncoder (ความถี่ของแต่ละหมวดหมู่), LeaveOneOutEncoder (ค่าเฉลี่ยเป้าหมายโดยไม่รวมแถวปัจจุบัน) และ CatBoostEncoder (สถิติเป้าหมายตามลำดับ)
import category_encoders as ce
count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])การจัดการกับจำนวนค่าที่แตกต่างกันสูง
สำหรับข้อมูลที่มีค่าที่แตกต่างกันสูงมาก การเข้ารหัสเป้าหมายหรือความถี่จะบีบอัดข้อมูลให้เหลือหนึ่งคอลัมน์ การเข้ารหัสแบบไบนารียังคงใช้พื้นที่น้อย และการจัดกลุ่มหมวดหมู่ที่พบได้น้อยลงในกลุ่ม "อื่น ๆ" จะช่วยลดสัญญาณรบกวน ควรเลือกวิธีโดยพิจารณาจากจำนวนค่าที่แตกต่างกันและความเสี่ยงจากการรั่วไหลของข้อมูล
import pandas as pd
freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")การเลือกตัวเข้ารหัส
มีหมวดหมู่น้อย: ใช้ one-hot โมเดลต้นไม้ที่มีหมวดหมู่จำนวนมาก: ใช้การเข้ารหัสเป้าหมายหรือ CatBoost ใช้การเข้ารหัสเมื่อจำเป็นต้องประหยัดพื้นที่ ควรป้องกันการรั่วไหลของข้อมูลเสมอ โดยฝึกด้วยข้อมูลฝึกเท่านั้น และใช้การปรับให้เรียบหรือวิธีนอกโฟลด์
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับการเข้ารหัสข้อมูลเชิงหมวดหมู่
สรุปทบทวน
สรุป: การเข้ารหัสเป้าหมาย แทนที่หมวดหมู่ด้วยค่าเฉลี่ยเป้าหมายของหมวดหมู่นั้น โดยใช้ การปรับให้เรียบ เพื่อควบคุมผลกระทบจากหมวดหมู่ที่พบได้น้อย ใช้ category_encoders (TargetEncoder, BinaryEncoder, CatBoost/LeaveOneOut) และฝึกด้วยข้อมูลฝึกเท่านั้นหรือใช้วิธีนอกโฟลด์เพื่อหลีกเลี่ยงการรั่วไหลของข้อมูล ตัวเข้ารหัสแบบกระชับช่วยจัดการคุณลักษณะที่มีค่าที่แตกต่างกันสูง ซึ่ง one-hot ไม่สามารถจัดการได้ดี
คำถามที่พบบ่อย
บทเรียน “การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง”
การเข้ารหัสเป้าหมาย การเข้ารหัสความถี่ การเข้ารหัสไบนารี และเวกเตอร์ฝังตัวสำหรับคอลัมน์ที่มีค่าหลากหลายจำนวนมาก คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- วิธีการคัดเลือกคุณลักษณะ
- การสร้างคุณลักษณะปฏิสัมพันธ์และพหุนาม
- การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง
- วิศวกรรมคุณลักษณะอัตโนมัติด้วย Featuretools