Python – داده‌های دسته‌بندی‌شده (Categorical Data)

پیش‌پردازش داده‌های دسته‌ای

در یادگیری ماشین، داده‌های دسته‌ای (مانند رشته‌ها یا برچسب‌ها) باید به فرمت عددی تبدیل شوند تا قابل استفاده در مدل‌ها باشند. یکی از روش‌های رایج برای این تبدیل، رمزگذاری تک‌گرم (One-Hot Encoding) است.

رمزگذاری تک‌گرم (One-Hot Encoding)

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

مثال

در نظر بگیرید که یک دیتاست از خودروها داریم:

import pandas as pd

cars = pd.read_csv('data.csv')
print(cars.to_string())

نتیجه:

Car       Model  Volume  Weight  CO2
  0       Toyota        Aygo    1000     790   99
  1   Mitsubishi  Space Star    1200    1160   95
  2        Skoda      Citigo    1000     929   95
  3         Fiat         500     900     865   90
  4         Mini      Cooper    1500    1140  105
  ...

در این دیتاست، ستون‌های Car و Model دسته‌ای هستند و باید به فرمت عددی تبدیل شوند.

رمزگذاری تک‌گرم برای ستون Car

برای تبدیل ستون Car به فرمت عددی، از تابع get_dummies() در پانداس استفاده می‌کنیم:

import pandas as pd

cars = pd.read_csv('data.csv')
ohe_cars = pd.get_dummies(cars[['Car']])

print(ohe_cars.to_string())

نتیجه:

Car_Audi  Car_BMW  Car_Fiat  Car_Ford  Car_Honda  Car_Hundai  Car_Hyundai  Car_Mazda  Car_Mercedes  Car_Mini  Car_Mitsubishi  Car_Opel  Car_Skoda  Car_Suzuki  Car_Toyota  Car_VW  Car_Volvo
  0          0        0         0         0          0           0            0          0             0         0               0         0          0           1           0       0          0
  1          0        0         0         0          0           0            0          0             0         0               1         0          0           0           0       0          0
  2          0        0         0         0          0           0            0          0             0         0               0         0          1           0           0       0          0
  ...

ترکیب اطلاعات

برای پیش‌بینی میزان CO2 با استفاده از داده‌های حجم و وزن خودرو و برند آن، اطلاعات دسته‌ای را با داده‌های عددی ترکیب می‌کنیم:

import pandas as pd
from sklearn import linear_model

# بارگذاری داده‌ها
cars = pd.read_csv("data.csv")
ohe_cars = pd.get_dummies(cars[['Car']])

# ترکیب داده‌ها
X = pd.concat([cars[['Volume', 'Weight']], ohe_cars], axis=1)
y = cars['CO2']

# ایجاد مدل رگرسیون خطی
regr = linear_model.LinearRegression()
regr.fit(X, y)

# پیش‌بینی میزان CO2
predictedCO2 = regr.predict([[2300, 1300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]])
print(predictedCO2)

نتیجه:

[122.45153299]

درافتن یک ستون کمتر

برای جلوگیری از افزودن ستون‌های اضافی، می‌توانیم یک ستون کمتر از تعداد گروه‌ها ایجاد کنیم. این کار با استفاده از پارامتر drop_first=True در تابع get_dummies() انجام می‌شود:

import pandas as pd

colors = pd.DataFrame({'color': ['blue', 'red', 'green']})
dummies = pd.get_dummies(colors, drop_first=True)
dummies['color'] = colors['color']

print(dummies)

نتیجه:

color_red  color_green  color
0          0            0   blue
1          1            0    red
2          0            1  green

در این مثال، به جای ایجاد سه ستون برای هر رنگ، تنها دو ستون (برای قرمز و سبز) ایجاد شده است. ستون سوم (آبی) به‌طور ضمنی در نظر گرفته شده است.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.