کدگذاری داده‌های دسته‌ای (Encoding)

تبدیل داده‌های متنی به عدد با Label Encoding و One-Hot Encoding و انتخاب روش درست

چرا کدگذاری؟

مدل‌های ریاضی فقط با عدد کار می‌کنند. وقتی ویژگی‌ای مثل «شهر» مقدار متنی دارد (تهران، شیراز)، باید آن را به عدد تبدیل کنیم.

روش ۱: Label Encoding

به هر دسته یک عدد می‌دهد:

تهران → 0
شیراز → 1
اصفهان → 2

در scikit-learn:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
df["city_encoded"] = le.fit_transform(df["city"])

خطر Label Encoding

وقتی دسته‌ها ترتیب واقعی ندارند، Label Encoding دروغ می‌گوید! مدل فکر می‌کند اصفهان (۲) «بزرگ‌تر» از تهران (۰) است و بین آن‌ها رابطه عددی قائل می‌شود. برای دسته‌های اسمی از One-Hot استفاده کنید.

روش ۲: One-Hot Encoding

برای هر دسته یک ستون باینری (۰/۱) می‌سازد:

شهرتهران؟شیراز؟اصفهان؟
تهران۱۰۰
شیراز۰۱۰
اصفهان۰۰۱

در Pandas:

df = pd.get_dummies(df, columns=["city"])

کدام را انتخاب کنیم؟

وضعیتروش پیشنهادی
دسته‌های اسمی بدون ترتیب (شهر، رنگ)One-Hot
دسته‌های ترتیبی (تحصیلات، رضایت)Label/Ordinal
برچسب هدف (y)Label Encoding
تعداد دسته‌های خیلی زیادOne-Hot مشکل‌ساز است؛ روش‌های پیشرفته‌تر

نکته: تعداد ستون‌ها

One-Hot با ۱۰ دسته، ۱۰ ستون می‌سازد. اگر دسته‌ها هزاران تا باشند، داده بسیار پهن می‌شود و فاصله‌ها بی‌معنا می‌شوند!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ماشین لرنینگ است.

ابزارهای مرتبط