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

การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง

การเข้ารหัสเป้าหมาย การเข้ารหัสความถี่ การเข้ารหัสไบนารี และเวกเตอร์ฝังตัวสำหรับคอลัมน์ที่มีค่าหลากหลายจำนวนมาก

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

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

  1. วิธีการคัดเลือกคุณลักษณะ
  2. การสร้างคุณลักษณะปฏิสัมพันธ์และพหุนาม
  3. การเข้ารหัสเป้าหมายและการจัดการข้อมูลเชิงหมวดหมู่ขั้นสูง
  4. วิศวกรรมคุณลักษณะอัตโนมัติด้วย Featuretools
← กลับไปที่ Learn AI with Python