اغلب متغیرهای طبقه بندی شده در مجموعه داده های خود را پیدا خواهید کرد. یک متغیر طبقه بندی شده برای مقادیر خود تعداد محدودی از دسته ها یا برچسب ها را دارد. به عنوان مثال ، جنسیت یک متغیر طبقه بندی شده است که می تواند "مرد" و "زن" را برای مقادیر خود بگیرد.
انواع متغیرهای طبقه بندی
متغیرهای طبقه بندی شده عمدتا به دو نوع تقسیم می شوند:
- متغیرهای طبقه بندی شده ترتیب: اینها متغیرهای طبقه بندی شده ای هستند که ارزش آنها از یک نظم طبیعی پیروی می کند. به عنوان مثال ، در سطح آموزشی متغیر ، ارزش های آن از "مدرسه ابتدایی" ، "برخی از کالج ها" و "مدرک تحصیلات تکمیلی" از نظمی پیروی می کنند که در آن "مدرک تحصیلات تکمیلی" بالاترین سطح آموزشی است و "مدرسه ابتدایی" پایین ترین است.
- متغیرهای طبقه بندی اسمی: اینها متغیرهای طبقه بندی شده ای هستند که ارزشهای آنها از یک نظم طبیعی پیروی نمی کنند. به عنوان مثال ، جنسیت یک متغیر طبقه بندی اسمی است که ارزش "مرد" و "زن" از نظم پیروی نمی کند.
رمزگذاری متغیر طبقه بندی چیست و چرا ما به آن احتیاج داریم؟
متغیرهای طبقه بندی معمولاً رشته هایی برای مقادیر خود دارند. بسیاری از الگوریتم های یادگیری ماشین از مقادیر رشته برای متغیرهای ورودی پشتیبانی نمی کنند. بنابراین ، ما باید این مقادیر رشته را با اعداد جایگزین کنیم. این فرآیند رمزگذاری متغیر طبقه بندی شده نامیده می شود.
انواع رمزگذاری
در اینجا ، ما در مورد دو نوع رمزگذاری مختلف بحث خواهیم کرد:
- رمزگذاری یک داغ
- رمزگذاری ساختگی
ما با رمزگذاری یک داغ شروع خواهیم کرد.
رمزگذاری یک داغ
در رمزگذاری یک داغ ، ما مجموعه جدیدی از متغیرهای ساختگی (باینری) را ایجاد می کنیم که برابر با تعداد دسته ها (k) در متغیر است. به عنوان مثال ، بیایید بگوییم که ما یک رنگ متغیر طبقه بندی شده با سه دسته به نام "قرمز" ، "سبز" و "آبی" داریم ، ما باید از سه متغیر ساختگی استفاده کنیم تا این متغیر را با استفاده از رمزگذاری یک داغ رمزگذاری کنیم. یک متغیر ساختگی (باینری) فقط مقدار 0 یا 1 را برای نشان دادن محرومیت یا گنجاندن یک دسته می گیرد.
در رمزگذاری یک داغ ،
- رنگ "قرمز" به عنوان [1 0 0] بردار اندازه 3 رمزگذاری شده است.
- رنگ "سبز" به عنوان [0 1 0] بردار اندازه 3 رمزگذاری شده است.
- رنگ "آبی" به عنوان [0 0 1] بردار اندازه 3 رمزگذاری شده است.
رمزگذاری ساختگی
رمزگذاری ساختگی همچنین از متغیرهای ساختگی (باینری) استفاده می کند. به جای ایجاد تعدادی از متغیرهای ساختگی که برابر با تعداد دسته ها (k) در متغیر باشد ، رمزگذاری ساختگی از متغیرهای ساختگی K-1 استفاده می کند. برای رمزگذاری همان متغیر رنگ با سه دسته با استفاده از رمزگذاری ساختگی ، باید فقط از دو متغیر ساختگی استفاده کنیم.
در رمزگذاری ساختگی ،
- رنگ "قرمز" به عنوان [1 0] بردار اندازه 2 رمزگذاری شده است.
- رنگ "سبز" به عنوان [0] بردار اندازه 2 رمزگذاری شده است.
- رنگ "آبی" به عنوان [0 0] بردار اندازه 2 رمزگذاری شده است.
رمزگذاری ساختگی یک دسته تکراری موجود در رمزگذاری یک داغ را حذف می کند.
اجرای با پاندا
هر دو رمزگذاری یک داغ و ساختگی را می توان با استفاده از عملکرد GET_DUMMIES در پاندا اجرا کرد.
- داده ها - در اینجا داده هایی را که باید رمزگذاری کنیم مشخص می کنیم. این می تواند یک آرایه numpy ، سری Pandas یا یک Dataframe باشد.
- پیشوند - اگر پیشوند را مشخص کنیم ، به نام ستون ها اضافه می شود تا بتوانیم به راحتی ستون ها را شناسایی کنیم. پیشوند را می توان به عنوان یک رشته برای یک نام ستون مشخص کرد. برای نام های چند ستون ، به عنوان نام ستون نقشه برداری فرهنگ لغت به پیشوندها تعریف شده است. برای اطلاعات بیشتر ، به مثال های زیر مراجعه کنید.
- DUMMY_NA - اگر نادرست (پیش فرض) باشد ، مقادیر گمشده (NANS) هنگام رمزگذاری متغیرها نادیده گرفته می شوند. در صورت صحت ، این داده های گمشده را در یک دسته جداگانه باز می گرداند.
- ستون ها - این نام ستون های رمزگذاری شده را مشخص می کند. اگر هیچ یک (پیش فرض) باشد ، تمام ستون های طبقه بندی شده در پارامتر داده رمزگذاری می شوند. اگر نام ستون را به عنوان لیست مشخص کنید ، فقط ستون های مشخص شده رمزگذاری می شوند.
- drop_first - این مهمترین پارامتر است. این یک مقدار بولی ، درست یا نادرست است. اگر نادرست (پیش فرض) باشد ، این رمزگذاری یک داغ را انجام می دهد. اگر درست باشد ، این دسته اول از هر متغیر طبقه بندی را کاهش می دهد ، متغیرهای ساختگی K-1 را برای هر متغیر طبقه بندی ایجاد کرده و رمزگذاری ساختگی را انجام می دهد.
اکنون ، ما از Diamonds Dataset استفاده می کنیم (به منبع و اطلاعات مجوز در پایین مراجعه کنید) تا هر دو نوع رمزگذاری را در عمل مشاهده کنیم.
مجموعه داده شامل 53. 940 نمونه و 10 متغیر است.
بیایید ببینیم مقادیر گمشده در مجموعه داده وجود دارد یا خیر.
از آنجا که این 0 باز می گردد ، هیچ مقدار از دست رفته در مجموعه داده وجود ندارد.
بیایید ببینیم که چند متغیر طبقه بندی شده در مجموعه داده ها وجود دارد.
متغیرهای طبقه بندی دارای داده شیء یا دسته بندی هستند. بنابراین ، 3 متغیر طبقه بندی شده در مجموعه داده وجود دارد. آنها برش ، رنگ و وضوح دارند.
بیایید دسته ها یا برچسب های منحصر به فرد متغیر برش را ببینیم.
5 دسته منحصر به فرد در متغیر برش وجود دارد. برای رمزگذاری این متغیر ، ما باید 5 متغیر ساختگی را در رمزگذاری یک داغ و 4 متغیر ساختگی در رمزگذاری ساختگی ایجاد کنیم.
به همین ترتیب ، متغیرهای رنگ و وضوح دارای دسته های منحصر به فردی هستند.
اجرای رمزگذاری یک داغ با پاندا
اکنون ، رمزگذاری یک داغ را به تنهایی روی متغیر رنگ اعمال می کنیم و نتایج را می بینیم.
این یک Dataframe Pandas از داده های رمزگذاری شده را برمی گرداند. بیایید چند ردیف اول آن را ببینیم.
ببینید چگونه متن مشخص شده در پارامتر پیشوند با نام دسته رنگ ترکیب شده است.
اکنون ، رمزگذاری یک داغ از متغیر رنگ را به مجموعه داده اضافه می کنیم.
اکنون ، ما رمزگذاری یک داغ را برای همه متغیرهای طبقه بندی شده در مجموعه داده اعمال می کنیم.
اکنون ، شکل مجموعه داده های رمزگذاری شده را می بینیم.
مجموعه داده رمزگذاری شده دارای 27 متغیر است. این امر به این دلیل است که رمزگذاری یک داغ هنگام رمزگذاری متغیرهای طبقه بندی ، 20 متغیر ساختگی اضافی را به آن اضافه کرده است. بنابراین ، رمزگذاری یک داغ فضای ویژگی (ابعاد) را در مجموعه داده شما گسترش می دهد.
اجرای رمزگذاری ساختگی با پاندا
برای اجرای رمزگذاری ساختگی به داده ها ، می توانید همان مراحل انجام شده در رمزگذاری یک داغ را دنبال کنید. تنها تفاوت این است که شما باید به جای False ، پارامتر DROP_FIRST را روی TRUE تنظیم کنید.
اکنون ، شکل مجموعه داده های رمزگذاری شده را می بینیم.
مجموعه داده رمزگذاری شده دارای 24 متغیر است. این امر به این دلیل است که رمزگذاری ساختگی هنگام رمزگذاری متغیرهای طبقه بندی ، 17 متغیر ساختگی اضافی اضافه کرده است. بنابراین ، رمزگذاری ساختگی همچنین فضای ویژگی (ابعاد) را در مجموعه داده شما گسترش می دهد.
اجرای با Scikit-Learn
هر دو رمزگذاری یک داغ و ساختگی را می توان با استفاده از عملکرد OneHotenCoder در Scikit-Learn اجرا کرد.
- دسته بندی ها - پیش فرض "خودکار" است که به طور خودکار دسته ها را در هر متغیر تعیین می کند.
- Drop-پیش فرض هیچ کدام است که رمزگذاری یک داغ را انجام می دهد. برای انجام رمزگذاری ساختگی ، این پارامتر را روی "اول" تنظیم کنید که دسته اول هر متغیر را رها می کند.
- پراکنده - این را به False تنظیم کنید تا خروجی را به عنوان یک آرایه numpy برگردانید. پیش فرض درست است که یک ماتریس پراکنده را برمی گرداند.
اجرای رمزگذاری یک داغ با Scikit-Learn
در اینجا ، ما از همان مجموعه داده Diamonds استفاده می کنیم. ما رمزگذاری یک داغ را برای همه متغیرهای طبقه بندی شده در مجموعه داده اعمال می کنیم.
اکنون ، شکل مجموعه داده های رمزگذاری شده را می بینیم.
اوهچی؟مجموعه داده رمزگذاری شده دارای 13،687 متغیر است. آیا می تواند این اتفاق بیفتد؟بله ، این به این دلیل است که عملکرد OneHotenCoder () Scikit-Learn متغیرهای ساختگی را برای متغیرهای عددی نیز ایجاد کرده است. برای جلوگیری از این امر ، ما فقط باید هنگام استفاده از روش fit_transform آن ، داده های طبقه بندی شده را منتقل کنیم.
با این حال ، این فقط داده های طبقه بندی شده رمزگذاری شده را برمی گرداند ، نه کل مجموعه داده با متغیرهای عددی.
اجرای رمزگذاری ساختگی با Scikit-Learn
شما به سادگی می توانید این کار را با مشخص کردن پارامتر قطره به "اول" انجام دهید.
چه زمانی از رمزگذاری یک داغ و رمزگذاری ساختگی استفاده کنید
هر دو نوع رمزگذاری را می توان برای رمزگذاری متغیرهای طبقه بندی منظم و اسمی استفاده کرد. با این حال ، اگر شما به شدت می خواهید ترتیب طبیعی یک متغیر طبقه بندی منظم را حفظ کنید ، می توانید به جای دو نوع رمزگذاری که در بالا بحث کرده ایم ، از رمزگذاری برچسب استفاده کنید.
بیایید بگوییم که ما با سه دسته به نام "منصفانه" ، "خوب" و "حق بیمه" کیفیت متغیر طبقه بندی داریم. ترتیب طبیعی این دسته ها:
ما می توانیم این را به شرح زیر رمزگذاری کنیم.
یکی از مزیت های رمزگذاری برچسب این است که به هیچ وجه فضای ویژگی را گسترش نمی دهد زیرا ما فقط نام دسته را با شماره ها جایگزین می کنیم. در اینجا ، ما از متغیرهای ساختگی استفاده نمی کنیم.
مهمترین نقطه ضعف رمزگذاری برچسب این است که الگوریتم های یادگیری ماشین ممکن است در نظر بگیرند که ممکن است بین دسته های رمزگذاری شده روابط وجود داشته باشد. به عنوان مثال ، یک الگوریتم ممکن است حق بیمه (2) را به عنوان دو برابر بهتر از خوب تفسیر کند (1). در واقع ، چنین رابطه ای بین دسته ها وجود ندارد.
برای جلوگیری از این امر ، رمزگذاری برچسب فقط باید برای مقادیر هدف (y) اعمال شود ، نه به مقادیر ورودی (x).
رمزگذاری برچسب را می توان با استفاده از عملکرد LabelEncoder Scikit-Learn استفاده کرد. اکنون ، ما آن را در متغیر برش در مجموعه داده های Diamonds خود اعمال می کنیم. این فقط برای اهداف تصویرگری است که ما از رمزگذاری برچسب برای رمزگذاری مقادیر ورودی (X) استفاده نمی کنیم.
ستون داده رمزگذاری شده جدید (cut_enc) در سمت راست اضافه شده است. اکنون می توانیم متغیر برش را حذف کنیم.
مزایای عملکرد pandas get_dummies () بیش از عملکرد Scikit-Learn Onehotencoder ()
- تابع get_dummies () داده های رمزگذاری شده را با نام های متغیر برمی گرداند. ما همچنین می توانیم پیشوند را به متغیرهای ساختگی در هر نام متغیر طبقه بندی اضافه کنیم.
- تابع get_dummies () کل مجموعه داده ها را با متغیرهای عددی نیز برمی گرداند.
مزایای رمزگذاری ساختگی بیش از رمزگذاری یک داغ
- هر دو با افزودن متغیرهای ساختگی ، فضای ویژگی (ابعاد) را در مجموعه داده خود گسترش می دهند. با این حال ، رمزگذاری ساختگی متغیرهای ساختگی کمتری را نسبت به رمزگذاری یک داغ اضافه می کند.
- رمزگذاری ساختگی یک دسته تکراری را در هر متغیر طبقه بندی حذف می کند. این از تله متغیر ساختگی جلوگیری می کند.
این پایان پست امروز است.
لطفاً اگر بازخورد دارید به من اطلاع دهید.
در همین حال ، شما می توانید برای دسترسی کامل به هر داستانی که می نویسم برای عضویت در عضویت ثبت نام کنید و بخشی از هزینه عضویت شما را دریافت می کنم.
از حمایت مستمر شما بسیار سپاسگزارم!شما را در داستان بعدی می بینیم. یادگیری مبارک به همه!
منبع داده Diamonds:
مجموعه داده های Diamonds را می توان در https://www. kaggle. com/shivam2503/diamonds بارگیری کرد
مجوز مجموعه داده های الماس:
مجموعه داده های Diamonds توسط مجوز دامنه عمومی همانطور که در اینجا تعریف شده است ، مجوز دارد. این بدان معنی است که مجموعه داده به عموم اهدا شده است.