در بسیاری از مسائل یادگیری ماشین، داده‌ها شامل ویژگی‌های دسته‌ای (Categorical Features) هستند؛ یعنی داده‌هایی که مقدارشان از یک مجموعه گسسته (مانند رنگ، کشور، جنسیت و…) گرفته شده است. اما بیشتر مدل‌های یادگیری ماشین نمی‌توانند مستقیماً با داده‌های غیرعددی کار کنند. بنابراین، باید این داده‌ها را به شکلی عددی و قابل تفسیر برای مدل تبدیل کنیم.

دو روش رایج برای این تبدیل عبارت‌اند از:

  • Label Encoding
  • One-Hot Encoding

در این مقاله، تفاوت‌ها، مزایا، معایب، و کاربردهای هر کدام به همراه نحوه رفتار آن‌ها با مقادیر گمشده (missing values) بررسی می‌شود.

 

بخش ۱: Label Encoding

تعریف

Label Encoding به هر مقدار دسته‌ای، یک عدد منحصر به‌فرد اختصاص می‌دهد. مثلاً:

رنگمقدار پس از Label Encoding
قرمز0
آبی1
زرد2
سبز3
بنفش4

در پایتون، می‌توان از map() یا LabelEncoder از sklearn.preprocessing برای این کار استفاده کرد.

مزایا

  • بسیار ساده و کم‌حجم
  • مناسب برای داده‌هایی با ترتیب ذاتی (مثل رتبه‌بندی)

معایب

  • به مدل حس می‌دهد که مقدارها دارای ترتیب و فاصله هستند، در حالی که ممکن است این‌طور نباشد.
  • مدل‌های خطی ممکن است از ترتیب عددی برداشت اشتباه کنند.

مدیریت missing values

  • LabelEncoder به صورت پیش‌فرض با NaN کار نمی‌کند.
  • اگر از OrdinalEncoder در scikit-learn استفاده شود، می‌توان با پارامترهای handle_unknown و unknown_value مقدار NaN را به یک عدد خاص مثل -1 نسبت داد.

 

بخش ۲: One-Hot Encoding

تعریف

در One-Hot Encoding، برای هر مقدار دسته‌ای، یک ستون جدید ساخته می‌شود و مقدار ۱ فقط در ستون مربوط به آن مقدار و ۰ در سایر ستون‌ها قرار می‌گیرد:

 

رنگقرمزآبیزردسبزبنفش
قرمز10000
آبی01000
زرد00100

در scikit-learn، با OneHotEncoder می‌توان این تبدیل را انجام داد.

مزایا

  • مناسب برای داده‌های غیرترتیبی

  • از هرگونه ترتیب یا فاصله‌ی نادرست بین مقادیر جلوگیری می‌کند

  • در مدل‌های خطی، شبکه‌های عصبی و بسیاری دیگر نتایج بهتری می‌دهد

معایب

  • افزایش تعداد ستون‌ها (ویژه زمانی که تعداد دسته‌ها زیاد باشد)

  • استفاده بیشتر از حافظه

مدیریت missing values

  • OneHotEncoder به‌طور پیش‌فرض NaN را به عنوان یک دسته جدا در نظر می‌گیرد (اگر تنظیم نشده باشد).

  • با تنظیم handle_unknown='ignore'، مقدارهای ناشناخته یا گمشده به صورت ردیفی از صفرها نمایش داده می‌شوند.

 

نتیجه گیری

ویژگیLabel EncodingOne-Hot Encoding
افزایش تعداد ستون‌ها کم زیاد (به تعداد دسته‌ها)
ترتیب‌دار بودن ویژگی‌ها بله نه
حساسیت به فاصله مقادیر بله نه
مناسب برای مدل‌های درختی بله بله
مناسب برای مدل‌های خطی و NN معمولاً نه بله
مدیریت NaNبا تنظیم خاصبله، قابل کنترل

 

چه زمانی از کدام استفاده کنیم؟

نوع ویژگیتوصیه‌شده
داده‌های با ترتیب مشخص (رتبه‌بندی، سطح تحصیلات، …)Label Encoding / OrdinalEncoder
داده‌های بدون ترتیب (کشور، رنگ، شهر، جنسیت و …)One-Hot Encoding
مدل‌هایی مثل تصمیم‌گیری درختی، جنگل تصادفیهر دو قابل استفاده است
مدل‌هایی مثل رگرسیون خطی، شبکه عصبیترجیحاً One-Hot Encoding

 

انتخاب بین Label Encoding و One-Hot Encoding به نوع داده‌ها و مدل مورد استفاده بستگی دارد. در صورت استفاده از Label Encoding برای داده‌های بدون ترتیب، مدل ممکن است از مقدارهای عددی برداشت اشتباهی داشته باشد. One-Hot Encoding در بیشتر موارد امن‌تر و قابل اعتمادتر است، به‌ویژه زمانی که ویژگی‌ها ترتیب منطقی ندارند یا قرار است از مدل‌های حساس به مقادیر عددی استفاده شود.