# Data Preprocessing
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
url ='https://raw.githubusercontent.com/cagriemreakin/Machine-Learning/master/1-%20Data%20Preprocessing/dataset.csv'
dataset = pd.read_csv(url)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values
# Dealing with missing data
from sklearn.preprocessing import Imputer #Imputer Class' ının yüklenmesi
# Missing_values : Hangi değerler üzerinde işlem yapmak istediğimizi belirtme
# Strategy: Bu değerleri ne ile değiştirmek istediğimiz.
# axis= satır mı sütun mu
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
# Veri setimizde NaN değere sahip sütunlar; Age 1. Salary ise 2. eleman olduğundan
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
X
array([['France', 44.0, 72000.0], ['Spain', 27.0, 48000.0], ['Germany', 30.0, 54000.0], ['Spain', 38.0, 61000.0], ['Germany', 40.0, 63777.77777777778], ['France', 35.0, 58000.0], ['Spain', 38.77777777777778, 52000.0], ['France', 48.0, 79000.0], ['Germany', 50.0, 83000.0], ['France', 37.0, 67000.0]], dtype=object)
Yukarıda X[0] sütunundaki değerlerin kategorik olduğunu görüyoruz.Kategorik değerlerden kurtulmak için LabelEncoder class' ını kullanrak bu labellar için değer atamamız gerekli.
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
X
array([[0, 44.0, 72000.0], [2, 27.0, 48000.0], [1, 30.0, 54000.0], [2, 38.0, 61000.0], [1, 40.0, 63777.77777777778], [0, 35.0, 58000.0], [2, 38.77777777777778, 52000.0], [0, 48.0, 79000.0], [1, 50.0, 83000.0], [0, 37.0, 67000.0]], dtype=object)
X[0] sütunundaki değerlerin France:0, Spain:1, Germany:2 ile değiştiğini gördük.Fakat bu da başka bir problemi meydana getirdi. Makine öğrenmesi algoritmaları matematiksel formuller ile çalıştığından hesaplamlarda bu değerleri kullanacak ve yanlış sonuçlar çıkarmamıza sebep olacaktır. Aslında yukarıdaki işlemi yaptığımızda şöyle bir varsayım yapmış olduk:
Germany > Spain > France
df = pd.DataFrame([ [1,0,0],
[0,1,0],
[0,0,1],
[0,1,0],
[0,0,1],
[1,0,0],
[0,1,0],
[1,0,0],
[0,0,1],
[1,0,0]])
df.columns = ['France','Spain','Germany']
df
France | Spain | Germany | |
---|---|---|---|
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
2 | 0 | 0 | 1 |
3 | 0 | 1 | 0 |
4 | 0 | 0 | 1 |
5 | 1 | 0 | 0 |
6 | 0 | 1 | 0 |
7 | 1 | 0 | 0 |
8 | 0 | 0 | 1 |
9 | 1 | 0 | 0 |
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(categorical_features = [0])
X = ohe.fit_transform(X).toarray()
# Diğer kategorik değer ise, dependent variable olan Purchase sütunu
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
X
array([[ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.40000000e+01, 7.20000000e+04], [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.70000000e+01, 4.80000000e+04], [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 3.00000000e+01, 5.40000000e+04], [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.80000000e+01, 6.10000000e+04], [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 4.00000000e+01, 6.37777778e+04], [ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.50000000e+01, 5.80000000e+04], [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.87777778e+01, 5.20000000e+04], [ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.80000000e+01, 7.90000000e+04], [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 5.00000000e+01, 8.30000000e+04], [ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.70000000e+01, 6.70000000e+04]])
y
array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1], dtype=int64)