Multiple Linear Regression, Preprocessing

Kategori: Machine Learning , 27 Kasım 2019 , JanFranco


Bir önceki yazımda Simple Linear Regression algoritmasından bahsetmiştik. Simple linear regression algoritması basitçe y = ax + b denklemine dayanmakta. Buradaki x değişkeni bir sütunu temsil ediyor. Buradaki temel sorun ya da sorundan ziyade özellik, tek bir sütunu, attribute'yi kabul ediyor olmasıdır algoritmanın. Eğer elimizde birden çok özellik, attribute var ise Multiple Linear Regression algoritmasını kullanmalıyız. Örneğin elimizde ülke, boy, kilo, yaş ve cinsiyet değerleri var. Tahmin yapacağımız sütunun cinsiyet sütunu olduğunu varsayalım. Bu durumda elimizde tahmin için kullanabileceğimiz 4 attribute var. O zaman formülü şu şekilde düşünebiliriz, y = ax1 + bx2 + cx3 + dx4 + e.

Python üzerinde bu algoritmayı kullanmadan önce veri üzerinde preprocessing, ön işleme işlemlerini gerçekleştirmeliyiz. Veriler ilk Machine Learning yazımız olan preprocessing yazısındaki veriler ile aynı verilerdir. Hatırlarsak, 2 satırda eksik veri mevcuttu. Ülke sütununa one-hot-encoding işlemi yapılması gerekiyordu. O yazıda yapmadık fakat burada cinsiyet değerlerinin de 0-1 şeklinde yeniden ayarlanması gerekiyor. Başlayalım, ilk olarak kütüphaneleri import edelim ve verileri okuyalım:


import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

df = pd.read_csv('preprocessing_veriler.csv')
Eksik veriler için SimpleImputer sınıfının fit_transform methodunu kullanacağız. Eksik verileri ortalama değer yöntemiyle dolduracağız:


imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
numericData = df.iloc[:, 1:4].values
numericData[:, 1:4] = imputer.fit_transform(numericData[:, 1:4])
Ülke sütununa one-hot-encoding işlemi yapacağız ve ülke sütunları ile numerik sütunları tek bir verisetinde birleştirebilmek için result ve result_2 verisetlerini oluşturacağız:


ohe = OneHotEncoder()
country = df.iloc[:, 0:1].values
country = ohe.fit_transform(country).toarray()
result = pd.DataFrame(data=country, index=range(22), columns=['fr', 'tr', 'us'])
result_2 = pd.DataFrame(data=numericData, index=range(22), columns=['height', 'weight', 'age'])
Cinsiyet değerlerine one-hot-encoding işleminden ziyade label encoding işlemi yapılması daha doğru olur. İşlemden sonra da cinsiyet, ülke ve numerik sütunları tek bir verisetinde toplayalım:


le = LabelEncoder()
gender = df.iloc[:, -1:].values
gender = le.fit_transform(gender)
df = pd.concat([result, result_2], axis=1)
1/3 oranında verileri eğitim ve test verisi olarak ayıralım. Randomluk da katalım:


x_train, x_test, y_train, y_test = train_test_split(df, gender, test_size=0.33, random_state=0)

print(x_train)
print(x_train.shape)
print(x_test)
print(x_test.shape)
print(y_train)
print(y_train.shape)
print(y_test)
print(y_test.shape)

>>

     fr   tr   us  height  weight    age
8   0.0  1.0  0.0   177.0    60.0  22.00
6   0.0  1.0  0.0   190.0    80.0  25.00
16  1.0  0.0  0.0   193.0    90.0  28.45
4   0.0  1.0  0.0   129.0    38.0  12.00
2   0.0  1.0  0.0   135.0    34.0  10.00
5   0.0  1.0  0.0   180.0    90.0  30.00
17  1.0  0.0  0.0   187.0    80.0  27.00
9   0.0  0.0  1.0   185.0   105.0  33.00
7   0.0  1.0  0.0   175.0    90.0  35.00
18  1.0  0.0  0.0   183.0    88.0  28.00
3   0.0  1.0  0.0   133.0    30.0   9.00
0   0.0  1.0  0.0   130.0    30.0  10.00
15  1.0  0.0  0.0   174.0    70.0  47.00
12  0.0  0.0  1.0   160.0    58.0  28.45
(14, 6)
     fr   tr   us  height  weight   age
20  1.0  0.0  0.0   164.0    66.0  32.0
10  0.0  0.0  1.0   165.0    55.0  27.0
14  0.0  0.0  1.0   167.0    62.0  55.0
13  0.0  0.0  1.0   162.0    59.0  41.0
1   0.0  1.0  0.0   125.0    36.0  11.0
21  1.0  0.0  0.0   166.0    56.0  42.0
11  0.0  0.0  1.0   155.0    50.0  44.0
19  1.0  0.0  0.0   159.0    40.0  29.0
(8, 6)
[1 0 0 0 1 0 0 0 0 0 1 0 0 1]
(14,)
[1 1 1 1 0 1 1 1]
(8,)


Sonraki Yazı: MLRegression, Fitting, Backward Elimination
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın