در بسیاری از مسائل یادگیری ماشین، دادهها شامل ویژگیهای دستهای (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، برای هر مقدار دستهای، یک ستون جدید ساخته میشود و مقدار ۱ فقط در ستون مربوط به آن مقدار و ۰ در سایر ستونها قرار میگیرد:
| رنگ | قرمز | آبی | زرد | سبز | بنفش |
| قرمز | 1 | 0 | 0 | 0 | 0 |
| آبی | 0 | 1 | 0 | 0 | 0 |
| زرد | 0 | 0 | 1 | 0 | 0 |
در scikit-learn، با OneHotEncoder میتوان این تبدیل را انجام داد.
مزایا
مناسب برای دادههای غیرترتیبی
از هرگونه ترتیب یا فاصلهی نادرست بین مقادیر جلوگیری میکند
در مدلهای خطی، شبکههای عصبی و بسیاری دیگر نتایج بهتری میدهد
معایب
افزایش تعداد ستونها (ویژه زمانی که تعداد دستهها زیاد باشد)
استفاده بیشتر از حافظه
مدیریت missing values
OneHotEncoderبهطور پیشفرضNaNرا به عنوان یک دسته جدا در نظر میگیرد (اگر تنظیم نشده باشد).با تنظیم
handle_unknown='ignore'، مقدارهای ناشناخته یا گمشده به صورت ردیفی از صفرها نمایش داده میشوند.
نتیجه گیری
| ویژگی | Label Encoding | One-Hot Encoding |
| افزایش تعداد ستونها | کم | زیاد (به تعداد دستهها) |
| ترتیبدار بودن ویژگیها | بله | نه |
| حساسیت به فاصله مقادیر | بله | نه |
| مناسب برای مدلهای درختی | بله | بله |
| مناسب برای مدلهای خطی و NN | معمولاً نه | بله |
| مدیریت NaN | با تنظیم خاص | بله، قابل کنترل |
چه زمانی از کدام استفاده کنیم؟
| نوع ویژگی | توصیهشده |
| دادههای با ترتیب مشخص (رتبهبندی، سطح تحصیلات، …) | Label Encoding / OrdinalEncoder |
| دادههای بدون ترتیب (کشور، رنگ، شهر، جنسیت و …) | One-Hot Encoding |
| مدلهایی مثل تصمیمگیری درختی، جنگل تصادفی | هر دو قابل استفاده است |
| مدلهایی مثل رگرسیون خطی، شبکه عصبی | ترجیحاً One-Hot Encoding |
انتخاب بین Label Encoding و One-Hot Encoding به نوع دادهها و مدل مورد استفاده بستگی دارد. در صورت استفاده از Label Encoding برای دادههای بدون ترتیب، مدل ممکن است از مقدارهای عددی برداشت اشتباهی داشته باشد. One-Hot Encoding در بیشتر موارد امنتر و قابل اعتمادتر است، بهویژه زمانی که ویژگیها ترتیب منطقی ندارند یا قرار است از مدلهای حساس به مقادیر عددی استفاده شود.

