نحوه اجرای کدگذاری یک‌هت برای متغیرهای چند طبقه‌ای

گره منبع: 841101

در این مقاله، یاد خواهیم گرفت که چگونه می توانیم با استفاده از تکنیک Feature Engineering One Hot Encoding، متغیرهای چند طبقه ای را مدیریت کنیم.

اما قبل از ادامه، اجازه دهید بحث مختصری در مورد مهندسی ویژگی و One Hot Encoding داشته باشیم.

مهندسی ویژگی

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

مفهوم شفافیت برای مدل‌های یادگیری ماشین موضوع پیچیده‌ای است زیرا مدل‌های مختلف اغلب به رویکردهای متفاوتی برای انواع مختلف داده‌ها نیاز دارند. مانند:-

  • داده های پیوسته
  • ویژگی های طبقه بندی شده
  • ارزش از دست رفته
  • عادی سازی
  • تاریخ و زمان

اما در اینجا ما فقط ویژگی‌های طبقه‌بندی را مورد بحث قرار می‌دهیم، ویژگی‌های دسته‌بندی آن دسته از ویژگی‌هایی هستند که در آنها نوع داده از نوع Object است. مقدار نقطه داده در هر ویژگی مقوله ای به صورت عددی نیست، بلکه به شکل شی بوده است.

تکنیک های زیادی برای مدیریت متغیرهای طبقه بندی شده وجود دارد که برخی از آنها عبارتند از:

  • رمزگذاری برچسب یا رمزگذاری ترتیبی
  • یک کدگذاری داغ
  • رمزگذاری ساختگی
  • رمزگذاری اثر
  • رمزگذاری باینری
  • رمزگذاری بازل
  • رمزگذاری هش
  • رمزگذاری هدف

بنابراین، در اینجا ما ویژگی‌های طبقه‌بندی شده را توسط One Hot Encoding بررسی می‌کنیم، بنابراین ابتدا از One Hot Encoding بحث خواهیم کرد.

یک کدگذاری داغ

ما می دانیم که متغیرهای طبقه بندی حاوی مقادیر برچسب به جای مقادیر عددی هستند. تعداد مقادیر ممکن اغلب به یک مجموعه ثابت محدود می شود. متغیرهای طبقه بندی اغلب اسمی نامیده می شوند. بسیاری از الگوریتم‌های یادگیری ماشینی نمی‌توانند مستقیماً روی داده‌های برچسب کار کنند. آنها نیاز دارند که همه متغیرهای ورودی و متغیرهای خروجی عددی باشند.

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

مثلا داده های مربوط به جنسیت به شکل است 'نر' و "مونث".

اما اگر از رمزگذاری تک داغ استفاده کنیم، رمزگذاری و اجازه دادن به مدل برای فرض یک نظم طبیعی بین دسته‌ها ممکن است منجر به عملکرد ضعیف یا نتایج غیرمنتظره شود.

رمزگذاری تک داغ را می توان برای نمایش عدد صحیح اعمال کرد. اینجاست که متغیر رمزگذاری شده عدد صحیح حذف می شود و یک متغیر باینری جدید برای هر عدد صحیح منحصر به فرد اضافه می شود.

به عنوان مثال، ما متغیر رنگ ها را رمزگذاری می کنیم،

رنگ قرمز  رنگ آبی
0 1
1 0
0 1

اکنون ما سفر خود را آغاز خواهیم کرد. در مرحله اول، مجموعه داده‌ای از پیش‌بینی قیمت مسکن را می‌گیریم.

مجموعه داده

در اینجا از مجموعه داده خانه_قیمت استفاده می کنیم که در پیش بینی قیمت خانه با توجه به متراژ منطقه استفاده می شود.

اگر می‌خواهید مجموعه داده پیش‌بینی قیمت خانه را دانلود کنید، کلیک کنید اینجا کلیک نمایید.

وارد کردن ماژول ها

اکنون، ما باید ماژول‌های مهمی را از پایتون وارد کنیم که برای رمزگذاری یک‌هت استفاده می‌شوند

# وارد کردن پانداها، پانداها را به‌عنوان pd وارد کنید # وارد کردن numpy import numpy به‌عنوان np # وارد کردن OneHotEncoder از sklearn.preprocessing import OneHotEncoder()

در اینجا، از پانداهایی که برای تجزیه و تحلیل داده‌ها استفاده می‌شوند، از NumPyused برای آرایه‌های n بعدی استفاده می‌کنیم، و از sklearn، از یک کلاس One Hot Encoder برای رمزگذاری طبقه‌بندی استفاده می‌کنیم.

حال باید این داده ها را با استفاده از پایتون بخوانیم.

خواندن مجموعه داده

به طور کلی مجموعه داده به صورت CSV است و مجموعه داده ای که استفاده می کنیم نیز به صورت CSV است. برای خواندن فایل CSV از تابع pandas read_csv() استفاده می کنیم. زیر را ببینید:

# خواندن مجموعه داده df = pd.read_csv('house_price.csv') df.head()

خروجی: -

اما ما فقط باید از متغیرهای طبقه بندی برای یک رمزگذار داغ استفاده کنیم و برای درک آسان فقط سعی می کنیم با متغیرهای طبقه بندی توضیح دهیم.

برای پارتیشن بندی متغیرهای طبقه بندی شده از داده ها باید بررسی کنیم که چند ویژگی دارای مقادیر طبقه بندی هستند.

بررسی مقادیر طبقه بندی شده

برای بررسی مقادیر از تابع pandas select_dtypes استفاده می کنیم که برای انتخاب انواع داده های متغیر استفاده می شود.

# بررسی ویژگی‌های cat = df.select_dtypes(include='O').keys() # نمایش متغیرهای گربه

خروجی: -

 

اکنون باید آن ستون های عددی را از مجموعه داده حذف کنیم و از این متغیر طبقه بندی برای استفاده خود استفاده خواهیم کرد. ما فقط از 3-4 ستون دسته بندی شده از مجموعه داده برای اعمال رمزگذاری یک طرفه استفاده می کنیم.

ایجاد DataFrame جدید

اکنون برای استفاده از متغیرهای طبقه‌بندی، یک دیتافریم جدید از ستون‌های دسته‌بندی انتخاب شده ایجاد می‌کنیم.

# ایجاد df جدید # ستون های تنظیم از new_df = pd.read_csv('house_price.csv',usecols=['محله','بیرونی1st','Exterior2nd']) new_df.head()

خروجی: -

اکنون باید دریابیم که در هر ستون دسته بندی چند دسته منحصر به فرد وجود دارد.

یافتن ارزش های منحصر به فرد

برای یافتن مقادیر منحصربه‌فرد، از تابع pandas () unique استفاده می‌کنیم.

# مقدار منحصر به فرد در هر ستون برای x در new_df.columns: #printing مقادیر منحصر به فرد print(x ,':', len(new_df[x].unique()))

خروجی: -

محله: 25
بیرونی 1: 15
بیرونی 2: 16

اکنون، ما به سراغ تکنیک خود می رویم تا رمزگذاری تک داغ را روی متغیرهای چند طبقه ای اعمال کنیم.

تکنیک برای متغیرهای چند طبقه ای

تکنیک به این صورت است که ما رمزگذاری یک‌طرفه را به 10 برچسب متداول متغیر محدود می‌کنیم. این بدان معنی است که ما فقط برای هر یک از 10 برچسب متداول یک متغیر باینری می سازیم، این معادل گروه بندی سایر برچسب ها در یک دسته جدید است که در این مورد حذف می شود. بنابراین، 10 متغیر ساختگی جدید نشان می دهد که آیا یکی از 10 برچسب متداول وجود دارد یا خیر. 1 یا نه پس 0 برای یک مشاهده خاص

متداول ترین متغیرها

در اینجا ما 20 متغیر متداول را انتخاب می کنیم.

فرض کنید یک متغیر دسته بندی را در نظر بگیرید همسایگی.

# پیدا کردن 20 دسته برتر new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

خروجی:

وقتی در این تصویر خروجی می بینید متوجه خواهید شد که نام ها برچسب 225 بار در ستون های Neighborhood تکرار می شود و پایین می آییم این تعداد در حال کاهش است.

بنابراین ما 10 نتیجه برتر را از بالا گرفتیم و این 10 نتیجه برتر را به یک رمزگذاری یک داغ تبدیل می کنیم و برچسب های سمت چپ به صفر تبدیل می شوند.

خروجی: -

 

فهرست متداول ترین متغیرهای دسته بندی

# لیستی با 10 متغیر برتر top_10 = [x برای x در new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

خروجی: -

['نامها'،
«CollgCr»،
'شهر قدیمی'،
"ادواردز"،
"سومرست"،
"گیلبرت"،
"NridgHt"،
"سویر"،
NWAmes،
"SawyerW"]

10 برچسب طبقه بندی برتر در ستون Neighborhood وجود دارد.

باینری بسازید

اکنون باید 10 متغیر باینری از top_10 label ها را بسازیم:

# باینری از برچسب ها بسازید

برای برچسب در top_10:

new_df = np.where(new_df['Neighborhood']==label,1,0)

new_df[["محله"]+top_10]


خروجی: -

نام ها CollgCr شهر قدیمی ادواردز سامرست گیلبرت NridgHt اره کش NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 وینکر 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 کرافور 0 0 0 0 0 0 0 0 0 0
4 نورریج 0 0 0 0 0 0 0 0 0 0
5 میچل 0 0 0 0 0 0 0 0 0 0
6 سامرست 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 شهر قدیمی 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 اره کش 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

می توانید ببینید که چگونه top_10 برچسب ها اکنون به فرمت باینری تبدیل می شوند.

بگذارید یک مثال بزنیم، در جدول ببینید کجا 1 شاخص وینکر که به برچسب دسته های top_10 ما تعلق نداشت، بنابراین منجر به آن می شود 0 تمام ستون ها

اکنون این کار را برای تمام متغیرهای دسته بندی که در بالا انتخاب کرده ایم انجام می دهیم.

همه متغیرهای انتخاب شده در OneHotEncoding

# برای همه متغیرهای طبقه بندی، def top_x(df2,variable,top_x_labels): برای برچسب در top_x_labels: df2[متغیر+'_'+label] = np.where(data[variable]==label,1,0) # read the data again data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) Neighborhood را به 10 دسته پرتکرار top_x(data, 'Neighborhood', top_10) # display data data.head()

خروجی: -

اکنون، در اینجا ما رمزگذاری یک داغ را روی همه متغیرهای چند طبقه ای اعمال می کنیم.

اکنون مزایا و معایب One Hot Encoding برای چند متغیر را خواهیم دید.

مزایای

  • ساده برای پیاده سازی
  • برای کاوش متغیر به زمان زیادی نیاز ندارد
  • فضای ویژگی را به شدت گسترش نمی دهد.

معایب

  • هیچ اطلاعاتی که ممکن است متغیر را پیش بینی تر کند اضافه نمی کند
  • اطلاعات متغیرهای نادیده گرفته شده را حفظ نکنید.

پایان یادداشت ها

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

با من در لینکدین ارتباط برقرار کنید: مشخصات

مقالات دیگر من را بخوانید: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

ممنون 😎

رسانه های نشان داده شده در این مقاله متعلق به Analytics Vidhya نیستند و به صلاحدید نویسنده استفاده می شوند.

همچنین می توانید این مقاله را در برنامه موبایل ما بخوانید آن را دریافت در Google Play

مقالات مرتبط

منبع: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

تمبر زمان:

بیشتر از تجزیه و تحلیل Vidhya