پیش پردازش داده های دسته ای (Categorical Data)
وقتی داده «دسته ای (Categorical)» و متنی باشد، مدل ها مشکل دارند. چون بیشتر مدل ها فقط عدد می پذیرند. پس باید این متن ها را به عدد تبدیل کنیم، نه اینکه حذفشان کنیم.
داده های دسته ای
مثلا ستون «Car» برند ماشین است و متن دارد. اما مدل عدد می خواهد. بنابراین اول داده را می خوانیم و جدول را می بینیم.
import pandas as pd
cars = pd.read_csv('data.csv')
print(cars.to_string())
در درس رگرسیون چندگانه، از حجم موتور و وزن برای پیش بینی CO2 استفاده شد. اما برند و مدل حذف شدند. این اطلاعات می توانند کمک کنند.
وان هات کدینگ (One Hot Encoding)
برای تبدیل متن به عدد، برای هر برند یک ستون می سازیم. وجود برند می شود 1، نبودن می شود 0. این کار «وان هات کدینگ» است.
import pandas as pd
cars = pd.read_csv('data.csv')
ohe_cars = pd.get_dummies(cars[['Car']])
print(ohe_cars.to_string())
اکنون برای هر برند یک ستون داریم. مقدار 1 یعنی آن ردیف همان برند است.
پیش بینی CO2 با ویژگی های جدید
ستون های وان هات را کنار «Volume» و «Weight» می گذاریم. سپس رگرسیون خطی را آموزش می دهیم و CO2 را پیش بینی می کنیم.
import pandas
from sklearn import linear_model
cars = pandas.read_csv("data.csv")
ohe_cars = pandas.get_dummies(cars[['Car']])
X = pandas.concat([cars[['Volume', 'Weight']], ohe_cars], axis = 1)
y = cars['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
# پیش بینی CO2 برای VW با وزن 2300 و حجم 1300
predictedCO2 = regr.predict([[2300, 1300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]])
print(predictedCO2)
اکنون یک ضریب برای حجم، وزن و هر برند داریم. بنابراین مدل از برند نیز بهره می گیرد.
دامی سازی کم هزینه (Dummifying)
لازم نیست به تعداد همه گروه ها ستون بسازیم. می توانیم یکی کمتر بسازیم و اطلاعات حفظ شود. مثلا رنگ ها:
import pandas as pd
colors = pd.DataFrame({'color': ['blue', 'red']})
print(colors)
با drop_first فقط یک ستون می سازیم. 1 یعنی «red»، و 0 یعنی «blue».
import pandas as pd
colors = pd.DataFrame({'color': ['blue', 'red']})
dummies = pd.get_dummies(colors, drop_first = True)
print(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)
گام های عملی
- CSV را بخوان و جدول را بررسی کن.
- ستون های متنی را با get_dummies تبدیل کن.
- X را با عددی ها و دامی ها بساز.
- y را انتخاب کن و مدل را fit کن.
- پیش بینی کن و خطا را بسنج.
جمع بندی سریع
- متن به عدد نیاز دارد؛ get_dummies کمک می کند.
- وان هات کدینگ برای هر گروه یک ستون می سازد.
- با drop_first یک ستون کمتر می سازیم.
- ترکیب ویژگی ها، پیش بینی CO2 را بهتر می کند.
برای مرور جست وجوی شبکه ای را ببین. همچنین کِی مینز مرحله بعد است. بازگشت به پیش پردازش داده های دسته ای.