داده های دسته بندی: واژگان و رمزگذاری یک طرفه

اصطلاح بعد مترادفی برای تعداد عناصر در یک بردار ویژگی است. برخی از ویژگی های طبقه بندی شده دارای ابعاد کم هستند. به عنوان مثال:

نام ویژگی # دسته بندی دسته بندی نمونه
برف_امروز 2 درست، نادرست
skill_level 3 مبتدی، کارشناس، متخصص
فصل 4 زمستان، بهار، تابستان، پاییز
روز_هفته 7 دوشنبه، سه شنبه، چهارشنبه
سیاره 8 عطارد، زهره، زمین

هنگامی که یک ویژگی طبقه‌بندی تعداد دسته‌های ممکن کم دارد، می‌توانید آن را به عنوان یک واژگان رمزگذاری کنید. با رمزگذاری واژگان، مدل با هر مقدار طبقه بندی ممکن به عنوان یک ویژگی جداگانه برخورد می کند. در طول تمرین، مدل وزن های مختلفی را برای هر دسته یاد می گیرد.

برای مثال، فرض کنید در حال ایجاد مدلی برای پیش‌بینی قیمت خودرو هستید که تا حدی بر اساس یک ویژگی طبقه‌بندی به نام car_color است. شاید ارزش خودروهای قرمز بیشتر از خودروهای سبز باشد. از آنجایی که تولیدکنندگان تعداد محدودی از رنگ های بیرونی را ارائه می دهند، car_color یک ویژگی طبقه بندی کم بعدی است. تصویر زیر یک واژگان (مقادیر ممکن) برای car_color را پیشنهاد می‌کند:

شکل 1. هر رنگ در پالت به عنوان یک ویژگی جداگانه نشان داده شده است. یعنی هر رنگ یک ویژگی جداگانه در بردار ویژگی است.       به عنوان مثال، "قرمز" یک ویژگی است، "نارنجی" یک ویژگی جداگانه است، و غیره.
شکل 1. یک ویژگی منحصر به فرد برای هر دسته.

ورزش: شهود خود را بررسی کنید

درست یا نادرست: یک مدل یادگیری ماشینی می‌تواند مستقیماً روی مقادیر رشته خام مانند «قرمز» و «سیاه» بدون تبدیل این مقادیر به بردارهای عددی آموزش ببیند.
درست است
نادرست

اعداد شاخص

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

شکل 2. هر رنگ با یک عدد صحیح منحصر به فرد مرتبط است. به عنوان مثال، "قرمز" با عدد صحیح 0، "نارنجی" با عدد صحیح 1 و غیره مرتبط است.
شکل 2. ویژگی های نمایه شده.

شهود خود را بررسی کنید

آیا مدل شما باید مستقیماً با اعداد شاخص نشان داده شده در شکل 2 تمرین کند؟
بله
خیر

رمزگذاری تک داغ

گام بعدی در ساخت واژگان این است که هر عدد شاخص را به رمزگذاری تکی آن تبدیل کنید. در یک رمزگذاری یکباره:

  • هر دسته با یک بردار (آرایه) از N عنصر نشان داده می شود که N تعداد دسته ها است. به عنوان مثال، اگر car_color دارای هشت دسته ممکن باشد، بردار یک داغ که نشان دهنده هشت عنصر خواهد بود.
  • دقیقاً یکی از عناصر در یک بردار یک داغ دارای مقدار 1.0 است. تمام عناصر باقی مانده دارای مقدار 0.0 هستند.

به عنوان مثال، جدول زیر کدگذاری تک داغ برای هر کدام را در car_color نشان می‌دهد:

ویژگی قرمز نارنجی آبی زرد سبز مشکی بنفش قهوه ای
"قرمز" 1 0 0 0 0 0 0 0
"نارنجی" 0 1 0 0 0 0 0 0
"آبی" 0 0 1 0 0 0 0 0
"زرد" 0 0 0 1 0 0 0 0
"سبز" 0 0 0 0 1 0 0 0
"سیاه" 0 0 0 0 0 1 0 0
"بنفش" 0 0 0 0 0 0 1 0
"قهوه ای" 0 0 0 0 0 0 0 1

این بردار یک داغ است، نه رشته یا عدد شاخص که به بردار ویژگی منتقل می شود. مدل وزن جداگانه ای برای هر عنصر از بردار ویژگی یاد می گیرد.

تصویر زیر دگرگونی های مختلف در نمایش واژگان را نشان می دهد:

شکل 3. نمودار فرآیند انتها به انتها برای نگاشت دسته ها به بردارهای ویژگی. در نمودار، ویژگی های ورودی «زرد»، «نارنجی»، «آبی» و «آبی» برای بار دوم است.  این سیستم از یک واژگان ذخیره شده ("قرمز" 0، "نارنجی" 1، "آبی" 2، "زرد" 3 و غیره) برای نگاشت مقدار ورودی به یک شناسه استفاده می کند. بنابراین، سیستم "زرد"، "نارنجی"، "آبی" و "آبی" را به 3، 1، 2، 2 نگاشت می کند. سپس سیستم آن مقادیر را به یک بردار ویژگی یک داغ تبدیل می کند. به عنوان مثال، با توجه به یک سیستم با هشت رنگ ممکن، 3 تبدیل به 0، 0، 0، 1، 0، 0، 0، 0 می شود.
شکل 3. فرآیند پایان به انتها برای نگاشت دسته ها به بردارهای ویژگی.

نمایندگی پراکنده

مشخصه ای که مقادیر آن عمدتاً صفر (یا خالی) است، یک ویژگی پراکنده نامیده می شود. بسیاری از ویژگی‌های طبقه‌بندی، مانند car_color ، معمولاً ویژگی‌های پراکنده هستند. نمایش Sparse به معنای ذخیره موقعیت 1.0 در یک بردار پراکنده است. به عنوان مثال، بردار یک داغ برای "Blue" عبارت است از:

[0، 0، 1، 0، 0، 0، 0، 0]

از آنجایی که 1 در موقعیت 2 قرار دارد (هنگامی که شمارش را از 0 شروع می کنیم)، نمایش پراکنده برای بردار یک داغ قبلی است:

2

توجه داشته باشید که نمایش پراکنده نسبت به بردار هشت عنصری یک داغ حافظه بسیار کمتری مصرف می کند. نکته مهم این است که مدل باید بر روی بردار یک داغ تمرین کند ، نه نمایش پراکنده.

پرت در داده های طبقه بندی شده

مانند داده‌های عددی، داده‌های طبقه‌بندی نیز حاوی مقادیر پرت هستند. فرض کنید car_color نه تنها رنگ‌های محبوب را شامل می‌شود، بلکه برخی از رنگ‌های پرت که به ندرت مورد استفاده قرار می‌گیرند، مانند "Mauve" یا "Avocado" شامل می‌شود. به جای اینکه به هر یک از این رنگ‌های پرت یک دسته جداگانه بدهید، می‌توانید آن‌ها را در یک دسته «کلاسی» به نام خارج از واژگان (OOV) قرار دهید. به عبارت دیگر، تمام رنگ های پرت در یک سطل پرت قرار می گیرند. سیستم یک وزن واحد را برای آن سطل پرت یاد می گیرد.

رمزگذاری ویژگی های دسته بندی با ابعاد بالا

برخی از ویژگی های دسته بندی دارای ابعاد بالایی هستند، مانند مواردی که در جدول زیر آمده است:

نام ویژگی # دسته بندی دسته بندی نمونه
کلمات_به_انگلیسی ~ 500000 "شاد"، "راه رفتن"
کدهای_پستی_ایالات متحده ~42000 "02114", "90301"
نامهای_خانوادگی_در_آلمان 850000 ~ "اشمیت"، "اشنایدر"

وقتی تعداد دسته‌ها زیاد است، رمزگذاری یک‌طرفه معمولاً انتخاب بدی است. تعبیه‌ها ، که در یک ماژول جاسازی جداگانه توضیح داده شده‌اند، معمولاً انتخاب بسیار بهتری هستند. تعبیه‌ها به‌طور قابل‌توجهی تعداد ابعاد را کاهش می‌دهند، که به دو روش مهم برای مدل‌ها مفید است:

  • این مدل معمولاً سریعتر تمرین می کند.
  • مدل ساخته شده معمولاً پیش بینی ها را سریعتر استنباط می کند. یعنی مدل تاخیر کمتری دارد.

هش کردن (همچنین به آن ترفند هش کردن نیز می گویند) روشی کمتر رایج برای کاهش تعداد ابعاد است.

به طور خلاصه، هش کردن یک دسته (به عنوان مثال، یک رنگ) را به یک عدد صحیح کوچک - تعداد "سطل" که آن دسته را نگه می دارد، نگاشت می کند.

در جزئیات، شما یک الگوریتم هش را به صورت زیر پیاده سازی می کنید:

  1. تعداد bin ها را در بردار دسته ها بر روی N قرار دهید، جایی که N کمتر از تعداد کل دسته های باقی مانده است. به عنوان یک مثال دلخواه، بگویید N = 100.
  2. یک تابع هش را انتخاب کنید. (اغلب، شما محدوده مقادیر هش را نیز انتخاب می کنید.)
  3. هر دسته (مثلاً یک رنگ خاص) را از طریق آن تابع هش عبور دهید، مثلاً 89237 یک مقدار هش ایجاد کنید.
  4. به هر bin یک عدد شاخص از مدول مقدار هش خروجی N اختصاص دهید. در این مورد، جایی که N 100 و مقدار هش 89237 است، نتیجه مدول 37 است زیرا 89237 % 100 برابر با 37 است.
  5. با این اعداد فهرست جدید، یک رمزگذاری یک‌طرفه برای هر سطل ایجاد کنید.

برای جزئیات بیشتر در مورد داده های هش، به بخش تصادفی سازی ماژول سیستم های یادگیری ماشین تولید مراجعه کنید.