در نوشته اداره کردن داده های رسته ای – کدگذاری One-Hot& مفهوم کد گذاری One-Hot (یا One-Hot Encoding) را از طریق کلاس LabelBinarizer را توضیح دادیم. در این مطلب می خواهیم دو کلاس دیگر از ماژول Scikit-Learn به نام LabelEncoder و OneHotEncoder که در ترکیب با یکدیگر همان کاری را انجام می دهند که کلاس LabelBinarizer از ماژول Scikit-Learn یکجا و در یک گام انجام می داد.

توجه کنید که وظیفه همان است که می خواهیم ویژگی های رسته بندی که به صورت رشته ای هستند را به ویژگی های عددی (دودویی) تبدیل کنیم تا بتوانیم آنها را درون الگوریتم های یادگیری ماشین به کار ببریم. هدف از کلاس OneHotEncode تبدیل مقدارهای عددی به فرمت دودویی (Binary) شناخته شده در فرمت کد گذاری One-Hot است. اگر به یاد داشته باشید گفتیم در عددهای دودویی کد گذاری One-Hot تنها یک مرتبه عدد ۱ ظاهر می شود و بقیه عددها صفر هستند. 

ورودی کلاس OneHotEncoder از نوع عدد است، پس لازم است پیش از استفاده از این کلاس، مقدار رشته ها را تبدیل به مقدارهای عددی کنیم، پس برای این منظور باید پیش از به کار گیری کلاس OneHotEncoder کلاس دیگری به نام LabelEncoder را به کار ببریم. فرض کنید یک DataFrame و یا یک فایل CSV یا اکسل همانند کدهای زیر داریم که دارای دو ستون رشته ای برای رنگ و نام تجاری ماشین ها و یک ستون عددی برای تاریخ تولید آنها است. حال می خواهیم ستون های یا بهتر بگوییم ویژگی های رنگ و نام تجاری را از نوع رشته به ویژگی های عددی تبدیل کنیم.

مطابق کدهای زیر ابتدا باید یک نمونه از کلاس LabelEncoder را بسازیم، زیرا می خواهیم مقدارهای رشته ای را به مقدارهای عددی تبدیل کنیم. اگر به شکل زیر دقت کنید خواهید دید که عدد صفر به رنگ blue، عدد یک به رنگ green، عدد سه به رنگ red و عدد ۴ به رنگ yellow انستاب داده شده است. این ترتیب عدد گذاری بر اساس حروف الفبا است.

خط زیر از قطعه کد بالا در واقع برای الحاق مقدارهای جدید به عنوان یک ستون تازه و به نام ColorLabelEncoder به DataFrame استفاده شده است. در شکل زیر این ستون پس از ستون Year و از این پس این ستون تازه به صورت دائمی به DataFrame (در اینجا carDataframe) افزوده خواهد شد.

بازهم اگر به شکل بالا دقت کنید می بننید که مقدار ستون ColorLabelEncoder از نوع int64 (عدد صحیح) است. برای پیدا کردن نوع اولین فیلد از ستون ColorLabelEncoder از دستور زیر استفاده شده است. پیش از این توضیح داده بودیم که مقدارهای درون یک ستون از DataFrame یا تمامی مقدارهای درون نوع Series در ماژول pandas همگی از یک نوع هستند.

پس از آنکه مقدارهای رشته ای به مقدارهای عددی تبدیل شدند، نوبت به تبدیل این مقدارهای عددی به فرمت مورد نظر در کد گذاری One-Hot است. برای این منظور باید از کلاس OneHotEncoder استفاده کنیم. توجه کنید که ورودی این کلاس باید مقدارهای عددی باشند.

در شکل زیر خروجی کد بالا، مقدارهای ستون ColorLabelEncoder به صورت یک آرایه به متد ()fit_transform فرستاده شده اند. در نهایت پس از اجرای موفق این متد، مطابق شکل زیر می بینید که مقدارهای کد گذاری شده One-Hot ایجاد می شوند.