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
در این مثال، به جای ایجاد سه ستون برای هر رنگ، تنها دو ستون (برای قرمز و سبز) ایجاد شده است. ستون سوم (آبی) بهطور ضمنی در نظر گرفته شده است.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام