Makine Öğrenmesinde Veri Ön İşleme (LabelEncoder, OneHotEncoder)

ibrahimcanerdogan
3 min readSep 17, 2020

--

Merhabalar, bugün makine öğrenmesinde çok önemli bir konuyu ele alacağım. Makine öğrenmesinde veriyi ön işleme, modelimizi eğiteceğimiz konuma getirinceye kadar veri üzerinde yapılan her türlü hazırlık, değişiklik “veri ön işleme” anlamına gelir.

Elimizde bulunan veri hakkında bilgi sahibi olup bunu en iyi ve en saf şekilde kullanmaya çalışacağız.

Bu yazıda seaborn kütüphanesinin “tips” veriseti üzerinden düzenlemeler yapmaya çalışacağız. Bu veriseti bize bir restaurantta verilen bahşiş miktarı ile birlikte çeşitli değişkenleri sunar.

ADIM 1- ) VERİ YÜKLEME

import seaborn as snsimport pandas as pddata=sns.load_dataset(“tips”)df=pd.DataFrame(data)print(df)

Verisetimizi yukarıdaki gibi Seaborn ile verimizi yükleyip, Pandas ile DataFrame haline çeviriyoruz.

Veriseti hakkında bilgi vermek gerekirse; Verisetinde bulunan “total_bill” değişken verilen hesap miktarını, “tip” verilen bahşiş miktarını, “sex” değişkeni hesabı ödeyen kişinin cinsiyetini, “smoker” değişkeni hesabı ödeyinin sigara kullanıp kullanmadığı, “day” değişkeni hangi gün yemek yenildiği, “time” değişkeni hangi öğünde yemek yendiği, “size” değişkeni ise yemeğin kaç kişi tarafından yenildiğini gösterir.

ADIM 2- ) VERİ ANALİZİ

Bu adımda verimizdeki sayısal, kategorik değişkenleri tanımlayıp tespit edip kullanıma uygun hale getireceğiz.

Verisetimizde “total_bill”, “tip”, “size” değişkenleri sayısal değişkenler olduğu için bunlar üzerinde bir değişiklik yapmamız gerekmiyor.

bahsis=df[[“tip”]].valuestoplam_ucret=df[[“total_bill”]].valuestoplam_kisi=df[[“size”]].values

“sex”, “smoker”, “day” ve “time” değişkenleri kategorik değişkenlerdir, bellideğerler içerir. Burada çeşitli değişiklikler ve metotlar uygulamamız gerekiyor.

Bu metodları (Label Encoder & One Hot Encoder) uygulamamız için bu iki kütüphaneyi kurmamız. preprocessing içinden LabelEncoder() fonksiyonunu pandas içinden ise “get_dummies” fonksiyonunu kullanacağız.

from sklearn import preprocessingimport pandas as pd

Öncelikle “sex” değişkeni “Female” ve “Male” olarak iki değer içeriyor. Bu değişkene Label Encoder uygulayarak 0 ve 1 dönüşümü yapılacak. Ardından pandas içinden “get_dummies” fonksiyonu ile One Hot Encoder yöntemini uyguladığımızda ortaya “Female” ve “Male” hakkında bilgi veren birbinin tamamen zıt olan 2 sütun oluşacak. Burada oluşan ve “kukla değişken” olarak adlandırılan sütunu önlemek için “drop” fonksiyonu ile iki cinsiyetten birini (öncelik ilk satırı 0 olan) veri setimizden kaldırıyoruz.

lbe=preprocessing.LabelEncoder()lbe.fit_transform(df[“sex”])cinsiyet=pd.get_dummies(df.iloc[:,2:3], columns=[“sex”])cinsiyet.drop([“sex_Male”], axis=1, inplace=True)

Bir diğer değişkenimiz “smoker” için de aynı yöntemleri sırayla uyguluyoruz.

lbe.fit_transform(df[“smoker”])sigara=pd.get_dummies(df.iloc[:,3:4], columns=[“smoker”])sigara.drop([“smoker_Yes”], axis=1, inplace=True)

Şimdi yine 2 değişken içeren “time” değişkenimiz var. Bu değişken kahvaltı ile birlikte 3 farklı değişken içermiş olabilirdi. Burada aşağıdaki kod ile hangi değişkenleri içeriyor görebiliriz.

result=df[“time”].value_counts()print(result)

Anladık ki 2 farklı değişkene sahipmiş bu değişkenimize de aynı adımları uyguluyoruz.

lbe.fit_transform(df[“time”])zaman=pd.get_dummies(df.iloc[:,5:6], columns=[“time”])zaman.drop([“time_Lunch”], axis=1, inplace=True)

Son değişkenimiz “day” değişkeni aşağıdaki kod ile kontrol ettiğimizde 2 den fazla değişken içeriyor. Buradan anlayacağımız şey herhangi bir değişken kaldırma (drop) işlemi yapmamıza gerek olmadığını anlarız.

#veri sütun isimleri
result=df[“day”].value_counts()
print(result)
lbe.fit_transform(df[“time”])gun=pd.get_dummies(df.iloc[:,4:5], columns=[“day”])

ADIM 3- ) VERİ DÜZENLEME & BİRLEŞTİRME

Bu adımda değişkenlerimiziayrı ayrı DataFrame haline getirmemiz gerekiyor. Bu DataFrameleri birleştirdiğimzde her biri saısal değer olan bir veri tablosu elimize geçmiş olacak.

DataFrame oluştururken verilen “columns” isimlerini orijinal verisetimizden farklı vermemeye dikkat edin. Aksi halde NaN ile dolu bir satır ile karşılaşabilrisiniz.

#tip DataFramebahsis=pd.DataFrame(data=bahsis, index=range(len(bahsis)), columns=[“tip”])#total_bill DataFrametoplam_ucret=pd.DataFrame(data=toplam_ucret, index=range(len(toplam_ucret)), columns=["total_bill"])#size DataFrametoplam_kisi=pd.DataFrame(data=toplam_kisi, index=range(len(toplam_kisi)), columns=["size"])

Kategorik değikenlerimizde yine “columns” isimlerini değişken isimlerinize cinsiyet.columns, sigara.columns, zaman.columns, gun.columns get_dummies değişkeninde kullandığımız değişkenlere verilen değişken adlarıyla sorgulama yapılabilir.

#cinsiyet DataFramecinsiyet=pd.DataFrame(data=cinsiyet, index=range(len(cinsiyet)), columns=[“sex_Female”])#smoker DataFramesigara=pd.DataFrame(data=sigara, index=range(len(sigara)), columns=[“smoker_No”])#time DataFramezaman=pd.DataFrame(data=zaman, index=range(len(zaman)), columns=[“time_Dinner”])#day DataFramegun=pd.DataFrame(data=gun, index=range(len(gun)), columns=[“day_Sat”,”day_Sun”,”day_Thur”, “day_Fri”])

Tüm değişkenlerimiz hazırladık veee birleştirme vakti geldi burada pandas içinden “concat” fonksiyonuna değişken adlarını giriyor, axis değerini de sütun olarak birleştirmek için 1 veriyoruz.

new_data=pd.concat([toplam_ucret, toplam_kisi, cinsiyet, sigara, zaman, gun, bahsis], axis=1)

ADIM 4- ) VERİ AYIRMA

Son adımımız da veriyi train ve test olarak ayırma işlemidir. Bu adımdan sonra veriyi çeşitli algoritma ve metodlarda kullanıma hazır hale gelmiş oluyor.

Kullanacağımız kütüphane;

from sklearn.model_selection import train_test_split

Öncelikle verilerimizi birleştirdiğimizde 10 tane sutun elde ettiğimizi biliyoruz. Buradan 0 dahil olmadan 9'a kadar hepsi bizim bahsis değerimizi etkileyen değişkenler ve 9 dahil olmadan 10'a kadar ise bizim tahmin etmek istediğimiz bahsis değişkenimiz yer alıyor.

Bunu şu şekilde gösteriyoruz;

training=new_data.iloc[:,0:9]testing=new_data.iloc[:,9:10]

Veee verilerimizi train ve test olarak ayırıyoruz;

x_train, x_test, y_train, y_test=train_test_split(training, testing, test_size=0.33, random_state=0)

“test_size” train ve test için hangi oranlarda ayıracağımızı, “random_state” ise rastsallık değerimizi belirlemek için veriyoruz.

Eveet güzel ve emek verdiğim bir yazı oldu. Umarım bir nebze de olsa faydalı olmuştur. Umarım daha iyilerini sizlerle buluştururum. Sağlıcakla Kalın :)

Github: https://github.com/icanerdogan

Linkedin: https://www.linkedin.com/in/ibrahimcanerdogan/

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet