روش کدبندی وان هات (One Hot Encoding) – به زبان ساده
متغیر «طبقهای» (Categorical)، نوع دادهای است که تنها میتواند تعداد محدودی مقدار را بگیرد. برای مثال، اگر یک نظرسنجی وجود داشته باشد که از افراد برند خودرو آنها را پرسیده باشند، نتیجه یک متغیر طبقهای خواهد بود؛ به این دلیل که، برند خودرویی که افراد میتوانند داشته باشند به چند شرکت ساخت خودروسازی خاص (در همان کشور، در همان کشور و چند کشور دیگر یا در کلیترین حالت به همه برندهای خودروی موجود در جهان) محدود میشود. بنابراین، پاسخها محدود به یک سری گزینه خاص خواهد بود. یا اگر از افراد بپرسند که رنگ مورد علاقه آنها چیست، پاسخهای افراد محدود به یک سری گزینه خاص (اسامی رنگها یعنی مثلا: سفید، آبی، قرمز، مشکی، قهرهای و دیگر موارد) خواهد بود.
در صورت استفاده از این نوع متغیرها در اغلب مدلهای «یادگیری ماشین» (Machine Learning)، پیغام خطا صادر خواهد شد. دلیل این امر آن است که بسیاری از مدلها، امکان انجام پردازش مستقیم و بدون انجام «کدبندی» (Encoding) را روی دادههای طبقهای ندارند. در ادامه، یکی از روشهای محبوب کدبندی دادههای طبقهای با عنوان «کدبندی وانهات» (One Hot Encoding) همراه با مثال، آموزش داده شده است. برای مطالعه بیشتر پیرامون انواع متغیرها شامل متغیرهای طبقهای، مطالعه مطلب «انواع ویژگی ها (خصیصهها) و مفهوم بردار ویژگی در داده کاوی» توصیه میشود. شایان توجه است که در این مطلب، روش پیادهسازی روش کدبندی One-Hot در پایتون، با استفاده از یک مثال آموزش داده خواهد شد.
کدبندی One-Hot
روش کدبندی One-Hot، یکی از پرکاربردترین رویکردها است و عملکرد آن به جز در مواردی که متغیر دستهای مقادیر خیلی زیادی بگیرد، بسیار خوب است (معمولا از این روش برای متغیرهایی که بیشتر از ۱۵ مقدار متفاوت بگیرند، مناسب نیست. در برخی از مواردی که تعداد متغیرها کمتر است نیز امکان دارد گزینه مناسبی نباشد). کدبندی One-Hot ستونهای دودویی (binary) جدیدی میسازد که هر یک مربوط به یکی از مقادیری هستند که متغیر به خود میگیرد. برای درک بهتر موضوع، مثالی در ادامه ارائه شده است.
فرض میشود که یک متغیر با عنوان Color در مجموعه داده وجود دارد که مقادیر آن Red ،Yellow و Green هستند. اکنون، کلیه مقادیر این متغیر به سه ستون جدا با عنوانهای Yellow ،Red و Green تبدیل میشوند. همانطور که در تصویر مشهود است، پنج «نمونه» در مجموعه داده وجود دارد که مقدار متغیر Color برای آنها به ترتیب برابر با Green ،Yellow ،Red ،Red و Yellow است. اکنون، برای نمونه اول که رنگ آن قرمز است در ستون Red عدد ۱ و در ستونهای Yellow و Green عدد صفر وارد میشوند. برای نمونه دوم نیز که رنگ آن قرمز است به همین صورت عمل میشود. برای نمونه سوم که رنگ آن زرد است در ستون Red و Green مقدار صفر و در ستون Yellow مقدار ۱ وارد میشود. برای متغیر چهارم که رنگ آن Green است در خانههای Red و Yellow مقدار صفر و در خانه Green مقدار ۱ وارد میشود. برای سایر نمونهها نیز به همین صورت عمل میشود.
پیادهسازی کدبندی One-Hot در پایتون
در ادامه، روش پیادهسازی کدبندی One-Hot در زبان برنامهنویسی پایتون آموزش داده است. در اینجا از گامهای اولیه نوشتن کد چشمپوشی و فرض شده که این مراحل انجام شدهاند. بنابراین، کار از جایی آغاز میشود که دیتافریمها (DataFrame) برا train_predictors و test_predictors وجود دارند.
این دادهها دارای مشخصات خانهها هستند، برای پیشبینی قیمت مورد استفاده قرار میگیرند و در سریهایی با عنوان target ذخیره شدهاند. کد کامل این مثال در ادامه آمده است.
ورودی [1]:
کتابخانه «پانداس» (Pandas) نوع داده (که به آن dtype گفته میشود) هر ستون از سری را مشخص کرده و در مقابل نام آن ستون نمایش میدهد.
در ادامه، یک نمونه تصادفی از dtypeهای دادههای پیشبینی شده نمایش داده میشود.
ورودی [۲]:
خروجی [۲]:
Heating object CentralAir object Foundation object Condition1 object YrSold int64 PavedDrive object RoofMatl object PoolArea int64 EnclosedPorch int64 KitchenAbvGr int64 dtype: object
Object نشان میدهد که یک ستون دارای متن (text) است (به لحاظ تئوری میتواند حاوی موارد دیگری نیز باشد که در اینجا برای ما اهمیتی ندارد). متداولترین کار برای One-Hot آن است که این ستونهای «شی» (Object) را کدبندی کند، زیرا نمیتوان آنها را به طور مستقیم به مدل داد. پانداس یک تابع convenience function با عنوان get_dummies برای دریافت کدبندی One-Hot دارد. این تابع را میتوان به صورت زیر فراخوانی کرد:
ورودی[3]:
متعاقبا، متغیرهای طبقهای نیز حذف شدند. برای مشاهده اینکه رویکردها چگونه مقایسه میشوند، میتوان «میانگین قدر مطلق خطا» (Mean Absolute Error) برای مدلها را محاسبه کرد که با دو مجموعه متناوب از پیشبینها ساخته شده است:
۱. طبقهبندیهای کدبندی شده One-Hot به عنوان پیشبینهای عددی
۲. پیشبینهای عددی در جایی که طبقهایها حذف شدهاند.
کدبندی One-Hot معمولا مفید واقع میشود اما از مسالهای به مساله دیگر متفاوت خواهد بود. در برخی موارد هیچ مزیت قابل توجهی در اثر استفاده از کدبندی One-Hot حاصل نمیشود.
ورودی [۴]:
Mean Absolute Error when Dropping Categoricals: 18350 Mean Abslute Error with One-Hot Encoding: 18023
اعمال به چندین فایل
تاکنون، دادههای آموزش با روش One-Hot کدبندی شدند. اما وقتی چندین فایل وجود دارد (برای مثال دادههای تست یا برخی از دیگر دادهها که کاربر قصد دارد برای آنها پیشبینی انجام دهد) چه کار میتوان کرد؟ کتابخانه «سایکیت لِرن» (Scikit Learn) به ترتیب ستونها حساس است، بنابراین اگر مجموعه داده آموزش و تست ناهماهنگ باشند، نتایج بیمعنی خواهد بود.
این مساله در صورتی ممکن است به وقوع بپیوندد که دادههای طبقهای دارای تعداد متفاوتی از مقادیر در دادههای آموزش و تست باشند.
با استفاده از دستور align میتوان اطمینان حاصل کرد که دادههای تست به همان ترتیبی کدبندی شدهاند که دادههای آموزش:
دستور align اطمینان حاصل میکند که ستونها به ترتیب مشابهی در هر دو مجموعه داده نمایش داده شدهاند (از نام ستونها برای شناسایی اینکه کدام ستونها در هر مجموعه داده صف کشیدهاند). آرگومان 'join='left تعیین میکند که left join مشابهی در SQL انجام خواهد شد. آرگومان 'join='inner کاری را انجام میدهد که پایگاه داده SQL به آن inner join میگوید و تنها ستونها را در هر دو مجموعه داده در حالت نمایش قرار میدهد. این مورد، انتخاب معقولی به نظر میرسد.
نتیجهگیری
جهان مملو از دادههای طبقهای است. افراد در صورتی که بدانند چگونه از این دادهها استفاده کنند، «دانشمندان داده» (Data Scientists) بهتری خواهند بود.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- مجموعه آموزش های داده کاوی یا Data Mining در متلب
- مجموعه آموزشهای آمار و احتمالات
- ساخت سیستم توصیهگر در پایتون — به زبان ساده
^^
سلام
می خواستم بدونم ترجمه این عبارت چی میشه؟ معادلی براش هست one-hot encoding?
hot در اینجا چی میتونه معنی بشه :کدگزاری یکسان کننده ، کدگزاری یکسان کننده اهمیت؟
ممنون