روش کدبندی وان هات (One Hot Encoding) در یادگیری ماشین

بفرست برای دوستت
Telegram
WhatsApp
روش کدبندی وان هات - one hot encoding

فهرست مطالب

در درس سیزدهم از آموزش رایگان یادگیری ماشین با پایتون می خواهیم با روش کدبندی وان هات (One Hot Encoding) در یادگیری ماشین آشنا شویم.

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

برای مثال، فرض کنید یک مجموعه داده با ستون جنسیت داریم که شامل مقادیر «مرد» و «زن» است. چون این مقادیر غیرعددی هستند و ترتیب خاصی ندارند، مدل‌های یادگیری ماشین ممکن است به اشتباه فکر کنند در این میان یک ترتیب یا ارتباط هست.

یک راه برای حل این مشکل استفاده از “رمزگذاری برچسب” است، که در آن به هر برچسب یک عدد نسبت داده می‌شود. مثلاً، «مرد» به 0 و «زن» به 1 نگاشت می‌شود.

اما این کار ممکن است به مدل ما سویه اضافه کند، چرا که مدل شروع به دادن اهمیت بیشتر به «زن» می‌کند، چون عدد 1 از 0 بزرگ‌تر است، در حالی که هر دو برچسب واقعاً مهم هستند. برای حل این مشکل، از روش کدبندی وان هات (One Hot Encoding) استفاده می‌کنیم.

 

کدبندی وان هات (One Hot Encoding)

کدبندی وان هات روشی است که برای نمایش متغیرهای غیرعددی به صورت مقادیر عددی در مدل یادگیری ماشین استفاده می‌شود.

  رگرسیون لجستیک با استفاده از پایتون

 

مزایای کدبندی وان هات (One Hot Encoding)

✔️ این روش به ما این امکان را می‌دهد که از داده‌های دسته‌ای در مدل‌هایی که داده عددی می‌خواهند، استفاده کنیم.

✔️ با ارائه اطلاعات دقیق‌تر به مدل، عملکرد آن را بهبود می‌بخشد.

✔️ مشکلات ناشی از ترتیب در متغیرهای غیرعددی، مثل تفاوت بین «کوچک»، «متوسط» و «بزرگ» را برطرف می‌کند.

 

معایب کدبندی وان هات (One Hot Encoding)

✔️ این روش می‌تواند باعث افزایش تعداد ویژگی‌ها شود، زیرا هر دسته جدید یک ستون جدید ایجاد می‌کند. این موضوع می‌تواند مدل را پیچیده‌تر کند و زمان آموزش آن را طولانی‌تر سازد.

✔️ بیشتر داده‌ها در ستون‌های رمزگذاری شده 0 خواهند بود و این می‌تواند منجر به داده‌های پراکنده شود.

✔️ در صورت داشتن تعداد زیادی دسته و داده‌های محدود، ممکن است باعث بیش‌برازش شود.

✔️ هرچند روش one hot encoding برای داده‌های غیرعددی مفید است، اما می‌تواند باعث پیچیدگی‌های ذکر شده شود. بنابراین، استفاده هوشمندانه از آن و در نظر گرفتن روش‌های دیگر مانند رمزگذاری ترتیبی یا دودویی حائز اهمیت است.

 

مثال‌هایی از کدبندی وان هات (One Hot Encoding)

در کدبندی وان هات، برای هر برچسب مثل “مرد” یا “زن”، یک ستون مجزا در نظر گرفته می‌شود. پس اگر یک نمونه برچسب “مرد” داشته باشد، در ستون مربوط به “مرد” عدد 1 و در ستون “زن” عدد 0 قرار می‌گیرد، و بالعکس.

برای فهم بهتر، فرض کنید داده‌ای داریم که در آن اسامی میوه‌ها، برچسب‌های دسته‌بندی‌شان و قیمت‌ها آمده است.

  رگرسیون لجستیک با استفاده از tensorflow
قیمت ارزش میوه
5 1 سیب
10 2 انبه
15 1 سیب
20 3 پرتغال

 

پس از اجرای روش کدبندی وان هات، خروجی به این شکل خواهد بود:

قیمت پرتغال انبه سیب
5 1
10 1
15 1
20 1

 

چطور با استفاده از پایتون از one hot encoding استفاده کنیم؟

ساخت دیتافریم (Dataframe)

از یک فایل CSV دیتافریمی می‌سازیم تا روش کدبندی وان هات را روی آن پیاده‌سازی کنیم.

 

# Program for demonstration of one hot encoding 

# import libraries 
import numpy as np 
import pandas as pd 

# import the data required 
data = pd.read_csv('employee_data.csv') 
print(data.head()) 

 

 

یافتن مقادیر منحصر به فرد در ستون‌های غیرعددی

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

 

print(data['Gender'].unique()) 
print(data['Remarks'].unique())

 

 

شمارش تعداد المان‌ها در یک ستون

برای محاسبه تعداد مقادیر مختلف در یک ستون، می‌توانیم از تابع ()value_counts در pandas استفاده کنیم.

 

data['Gender'].value_counts() 
data['Remarks'].value_counts() 

 

 

دو روش برای کدبندی وان هات ستون‌های غیرعددی

1- با استفاده از کتابخانه pandas

می‌توانیم از تابع ()pd.get_dummies برای انجام کدبندی وان هات ستون های غیرعددی استفاده کنیم. 

 

one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) 
print(one_hot_encoded_data)

 

در داده‌ها، ما سه ستون ریمارک و دو ستون جنسیت داریم. اما اگر بخواهیم n برچسب مختلف را نمایش دهیم، فقط به n-1 ستون نیاز داریم. به عبارت دیگر، اگر فقط ستون جنسیت زن را نگه داریم و ستون جنسیت مرد را حذف کنیم، هنوز هم اطلاعات کافی داریم.

  رگرسیون چندجمله‌ای برای داده‌ های غیرخطی

وقتی مقدار 1 باشد، به این معنی است که زن است و وقتی مقدار 0 باشد، مرد است. با این روش، می‌توانیم داده‌های غیرعددی را کدگذاری کرده و در عین حال، تعداد ستون‌ها را کاهش دهیم.

 

2- با استفاده از کتابخانه Sci-kit Learn

Scikit-learn (یا به اختصار sklearn) یکی از کتابخانه‌های یادگیری ماشین در پایتون است که ابزارهای زیادی برای پیش‌ پردازش داده ها ارائه می‌دهد.

این کتابخانه تابع OneHotEncoder را فراهم می‌کند که برای رمزگذاری متغیرهای غیرعددی و عددی به بردارهای دودویی استفاده می‌شود.

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

 

# importing libraries 
import pandas as pd 
import numpy as np 
from sklearn.preprocessing import OneHotEncoder 

# Retrieving data 
data = pd.read_csv('Employee_data.csv') 

# Converting type of columns to category 
data['Gender'] = data['Gender'].astype('category') 
data['Remarks'] = data['Remarks'].astype('category') 


# Assigning numerical values and storing it in another columns 
data['Gen_new'] = data['Gender'].cat.codes 
data['Rem_new'] = data['Remarks'].cat.codes 


# Create an instance of One-hot-encoder 
enc = OneHotEncoder() 

# Passing encoded columns 

enc_data = pd.DataFrame(enc.fit_transform( 
	data[['Gen_new', 'Rem_new']]).toarray()) 

# Merge with main 
New_df = data.join(enc_data) 

print(New_df) 

 

توجه: در اینجا متد ()enc.fit_transform را به یک آرایه تبدیل کرده‌ایم، زیرا متد fit_transform از OneHotEncoder یک ماتریس پراکنده از نوع SciPy را برمی‌گرداند. لذا تبدیل به آرایه به ما این امکان را می‌دهد که در مواردی که تعداد زیادی متغیر غیرعددی داریم، در فضای مورد استفاده صرفه‌جویی کنیم.

Rating 3.43 from 7 votes

لیست دروس دوره

آموزش پیشنهادی و مکمل

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

سبد خرید

دوره جامع متخصص علم داده و یادگیری ماشین

برای دیدن نوشته هایی که دنبال آن هستید تایپ کنید.
×