Ana içeriğe geç

Black Friday Veri Kümesi ile Makine Öğrenimi Eğitimi

Bu eğitimde, boş değerleri doldurma, verileri ön işleme, PCA ile boyut indirgeme ve K-Fold kullanarak verileri bölme konularında bilgi edineceksiniz.
· 10 dk. oku

Yapay Zeka ile Keşfedin

Önce veri kümesiyle çalışmak için gereken temel kütüphaneyi içe aktaralım.

import pandas as pd

Şimdi veri kümesini okuyup görelim.

bfriday = pd.read_csv("BlackFriday.csv")
bfriday.head(10)
dataset

Yukarıdaki satır, 10 satır ve tüm sütunlardan oluşan veri kümesinin bir kısmını verir. bfriday.head(x,y) yazmayı denerseniz hata alırsınız çünkü bilgisayar toplam sütun sayısını zaten zorunlu kabul eder. bfriday.head() de çıktı verir ve hata olmaz; bilgisayar satır ve sütunları kendi varsayılanına göre alır

bfriday.shape #bu bize veri kümesinin boyutlarını verir (satır,sütun)
(550068, 12)
bfriday['Stay_In_Current_City_Years'].value_counts()# her aralıktaki değer sayısını sayar, bfriday['City_Category'].value_counts()
1    193821
2    101838
3     95285
5     84726
0     74398
Name: Stay_In_Current_City_Years, dtype: int64
bfriday.isnull().sum() #veri kümesindeki her kategori için boş değer sayısını hesaplar
User_ID                            0
Product_ID                         0
Gender                             0
Age                                0
Occupation                         0
City_Category                      0
Stay_In_Current_City_Years         0
Marital_Status                     0
Product_Category_1                 0
Product_Category_2            173638
Product_Category_3            383247
Purchase                           0
dtype: int64
b = ['Product_Category_2','Product_Category_3'] #burada Product_Category_2 ve Product_Category_3 adlı 2 sütundan oluşan bir dizi oluşturuyoruz
for i in b:
    exec("bfriday.%s.fillna(bfriday.%s.value_counts().idxmax(), inplace=True)" %(i,i))

Şimdi boş alanları en sık görülen değerle doldurduk. Ayrıca şu şekilde de boş alanları temizleyebilir ya da doldurabilirsiniz: bfriday.Product_Category_2.fillna(bfriday.Product_Category_2.value_counts().idxmax(),inplace=True) benzer şekilde Product_category_3 adlı sütunu da temizleyebilirsiniz

X = bfriday.drop(["Purchase"], axis=1)

Şimdi veri kümesinden purchase adlı sütunu kaldırdık ve Purchase sütunu dışındaki tüm sütunlardan oluşan X adlı bir dizi oluşturduk.

from sklearn.preprocessing import LabelEncoder#Şimdi sklearn kütüphanesinden kodlayıcıyı içe aktaralım
LE = LabelEncoder()
#Şimdi, kolay hesaplama için verileri etiket kodlayıcı ile etiketlere dönüştüreceğiz
X = X.apply(LE.fit_transform)#Burada kodlayıcıyı verilere uyguladık

Şimdi verileri pandas kullanarak sayısal forma dönüştüreceğiz; çünkü sayısal verilerle çalışmak, kategorik verilerle çalışmaktan daha kolaydır

X.Gender = pd.to_numeric(X.Gender)
X.Age = pd.to_numeric(X.Age)
X.Occupation = pd.to_numeric(X.Occupation)
X.City_Category = pd.to_numeric(X.City_Category)
X.Stay_In_Current_City_Years = pd.to_numeric(X.Stay_In_Current_City_Years)
X.Marital_Status = pd.to_numeric(X.Marital_Status)
X.Product_Category_1 = pd.to_numeric(X.Product_Category_1)
X.Product_Category_2 = pd.to_numeric(X.Product_Category_2)
X.Product_Category_3 = pd.to_numeric(X.Product_Category_3)
Y = bfriday["Purchase"]#Burada Purchase sütunundaki verilerden oluşan Y adlı bir dizi oluşturduk
from sklearn.preprocessing import StandardScaler
SS = StandardScaler()

Özellikleri ortalamayı çıkarıp birim varyansa ölçekleyerek standartlaştırır. Merkezleme ve ölçekleme, eğitim kümesindeki örnekler üzerinden ilgili istatistikler hesaplanarak her özellik için bağımsız şekilde gerçekleşir. Daha sonra ortalama ve standart sapma, transform yöntemiyle daha sonraki verilerde kullanılmak üzere saklanır.

Xs = SS.fit_transform(X)
#X'i sayısal bir gösterime (ikili olması gerekmez) dönüştürmeniz gerekir. Çünkü tüm makine öğrenimi yöntemleri sayı matrisleri üzerinde çalışır
from sklearn.decomposition import PCA
pc = PCA(4)#buradaki 4, istediğiniz bileşen sayısını belirtir.

Verinin Tekil Değer Ayrışımı kullanılarak doğrusal boyut indirgemesi, onu daha düşük boyutlu bir uzaya yansıtmaktır. PCA, en çok kullanılan ve bilinen boyut indirgeme yöntemlerinden biridir. PCA, makine öğrenimi algoritmalarını hızlandırmak için kullanılır; PCA’yı yalnızca eğitim kümesinde uygularsınız. Temel bileşen analizi (PCA)

PCA, orijinal değişkenlerin yerine, kovaryansları sıfır olan ve varyansları azalan sırada bulunan yeni değişkenler (temel bileşenler) koyar. Böylece, veriden çıkarılan temel bileşenler arasındaki kovaryans matrisi sıfır olur.

pca
Kaynak: 6.3 - Principal Components Analysis (PCA)

Burada RandomizedPCA adlı ilginç bir şeyimiz var

Not: Seyrek veriler için asla RandomizedPCA kullanmayın. Seyrek veri üzerinde RandomizedPCA kullanımı yanlıştır; çünkü seyrekliği bozmadan veriyi merkezleyemeyiz ve bu, gerçekçi boyutlardaki seyrek verilerde belleğin şişmesine yol açabilir. Oysa PCA için merkezleme gereklidir

principalComponents = pc.fit_transform(X)#Burada PCA’yı verilere uyguluyor/veriyi PCA’ya uyduruyoruz
pc.explained_variance_ratio_
array([7.35041374e-01, 2.64935995e-01, 1.10061180e-05, 6.21704987e-06])
principalDf = pd.DataFrame(data = principalComponents, columns = ["component 1", "component 2", "component 3", "component 4"])
from sklearn.model_selection import KFold
kf = KFold(20)
#Eğitim/test kümelerine ayırmak için indeksler sağlar. Varsayılan olarak karıştırmadan veri kümesini k ardışık katmana böler.
#Her katman bir kez doğrulama için kullanılırken, kalan k - 1 katman eğitim kümesini oluşturur.
for a,b in kf.split(principalDf):
    X_train, X_test = Xs[a],Xs[b]
    y_train, y_test = Y[a],Y[b]
from sklearn.linear_model import LinearRegression

Regresyon iki şeyi incelemek içindir: (1) belirli bir yordayıcı değişkenler kümesi, bir sonuç (bağımlı) değişkenini iyi tahmin ediyor mu? (2) Özellikle hangi değişkenler sonuç değişkeninin anlamlı yordayıcılarıdır ve beta katsayılarının büyüklüğü ve işaretiyle gösterildiği üzere sonucu nasıl etkilerler? Bu regresyon tahminleri, bir bağımlı değişken ile bir veya daha fazla bağımsız değişken arasındaki ilişkiyi açıklamak için kullanılır. Bir bağımlı ve bir bağımsız değişkenli en basit regresyon denklemi y = c + b*x şeklinde tanımlanır; burada y = tahmini bağımlı değişken skoru, c = sabit, b = regresyon katsayısı ve x = bağımsız değişkenin skoru.

simple linear regression model
Kaynak: Linear Regression
from sklearn.tree import DecisionTreeRegressor

Bir karar ağacı, kök düğümden yukarıdan aşağıya doğru inşa edilir ve benzer değerlere sahip örnekler içeren alt kümelere veri bölümlemeyi içerir. Karar ağacı, modelleri bir ağaç yapısı şeklinde kurar. Bir veri kümesini giderek daha küçük alt kümelere bölerken, buna eşlik eden bir karar ağacı da artımlı olarak geliştirilir. Nihai sonuç, karar düğümleri ve yaprak düğümlerinden oluşan bir ağaçtır. Bir karar düğümü (ör. Outlook) ikiden fazla dala (ör. Güneşli, Bulutlu ve Yağmurlu) sahiptir ve her dal test edilen özelliğin bir değerini temsil eder. Yaprak düğüm (ör. Oynanan Saat) sayısal hedefe ilişkin bir kararı temsil eder. Bir ağaçtaki en üstteki karar düğümü, en iyi yordayıcıya karşılık gelir ve kök düğüm olarak adlandırılır. Karar ağaçları hem kategorik hem sayısal verileri işleyebilir. Hedef değişkenin sürekli değerler (tipik olarak reel sayılar) alabildiği karar ağaçlarına regresyon ağaçları denir. Ağacın maksimum derinliği çok yüksek ayarlanırsa, karar ağaçları eğitim verisinin çok ince ayrıntılarını ve gürültüsünü öğrenir; yani aşırı uyum (overfit) oluşur.

decision tree
Kaynak: Decision Trees
from sklearn.ensemble import RandomForestRegressor

Rastgele orman, veri kümesinin çeşitli alt örnekleri üzerinde çok sayıda sınıflandırıcı karar ağacı uyduran ve tahmin doğruluğunu artırıp aşırı uyumu kontrol etmek için ortalama alan bir kestirimcidir. Alt örneklem boyutu her zaman orijinal giriş örneklemiyle aynıdır, ancak bootstrap=True ise örnekler tekrar koyularak çekilir. Bu tekniğin ardındaki fikir, ağaçları birbiriyle ilişkisiz hale getirmektir. Eğitim verisinden farklı bootstrap örnekleri (yani kendinden üretilen örnekler) oluşturur. Ardından ağaçlardaki varyansı ortalama alarak azaltırız. Böylece, bu yaklaşım Python veya R’da çok sayıda karar ağacı oluşturur. Rastgele orman modeli sayısal özelliklere sahip tablolu verileri veya yüzlerce kategoriden az kategorik özellikleri çok iyi işler. Rastgele ormanlar, özellikler ile hedef arasındaki doğrusal olmayan etkileşimleri yakalama yeteneğine sahiptir.

Not: Ağaç tabanlı modeller çok seyrek özelliklerle çalışmak üzere tasarlanmamıştır. Seyrek girdi verileriyle uğraşırken, seyrek özellikleri sayısal istatistikler üretmek üzere önceden işleyebilir ya da bu tür senaryolara daha uygun olan bir doğrusal modele geçebiliriz.

random forest simplified
Kaynak: William Koehrsen tarafından Rastgele Ormanların Basit Açıklaması
from sklearn.ensemble import GradientBoostingRegressor

Gradyan artırma, regresyon ve sınıflandırma problemleri için kullanılan ve zayıf kestirimcilerden (genellikle karar ağaçları) oluşan bir toplulukla (ensemble) tahmin modeli üreten bir makine öğrenimi tekniğidir. Modeli, diğer boosting yöntemlerinde olduğu gibi aşamalı olarak kurar ve keyfi bir türevlenebilir kayıp fonksiyonunun optimize edilmesine izin vererek onları genelleştirir. Boosting, uygun bir maliyet fonksiyonu üzerinde bir optimizasyon algoritması olarak yorumlanabilir. Son iki makale, boosting algoritmalarını yinelemeli fonksiyonel gradyan inişi algoritmaları olarak görme yaklaşımını tanıttı. Yani, fonksiyon uzayı üzerinde bir maliyet fonksiyonunu, negatif gradyan yönünü işaret eden bir fonksiyonu (zayıf hipotez) yinelemeli olarak seçerek optimize eden algoritmalar. Bu fonksiyonel gradyan bakışı, regresyon ve sınıflandırmanın ötesinde makine öğrenimi ve istatistiğin birçok alanında boosting algoritmalarının geliştirilmesine yol açtı. Gradyan artırma, zayıf “öğrenicileri” yinelemeli bir biçimde tek bir güçlü öğrenicide birleştirir. En kolay, en küçük kareler regresyonu bağlamında açıklanır; burada amaç, ortalama karesel hatayı en aza indirerek F modeline y ^ = F ( x ) biçimindeki değerleri “öğretmektir”.

gradient boosting simple version
Kaynak: Gradyan Artırma Bölüm 1 – Görsel Kavramsallaştırma
lr = LinearRegression()
dtr = DecisionTreeRegressor()
rfr = RandomForestRegressor()
gbr = GradientBoostingRegressor()
fit1 = lr.fit(X_train,y_train)#Burada eğitim verisini doğrusal regresyona uyduruyoruz
fit2 = dtr.fit(X_train,y_train)#Burada eğitim verisini Karar Ağacı Regresörüne uyduruyoruz
fit3 = rfr.fit(X_train,y_train)#Burada eğitim verisini Rastgele Orman Regresörüne uyduruyoruz
fit4 = gbr.fit(X_train,y_train)#Burada eğitim verisini Gradyan Artırma Regresörüne uyduruyoruz

Şimdiye kadar fit ve fit_transform gördünüz ama ne olduklarını anlamadınız mı? Hadi şimdi öğrenelim.

fit(): Eğitim verisinden öğrenme modeli parametrelerini üretmek için kullanılır

transform(): fit() yöntemiyle üretilen parametreler, modele uygulanarak dönüştürülmüş veri kümesini üretir.

fit_transform(): Aynı veri kümesi üzerinde fit() ve transform() API’lerinin birleşimidir

print("Accuracy Score of Linear regression on train set",fit1.score(X_train,y_train)*100)
print("Accuracy Score of Decision Tree on train set",fit2.score(X_train,y_train)*100)
print("Accuracy Score of Random Forests on train set",fit3.score(X_train,y_train)*100)
print("Accuracy Score of Gradient Boosting on train set",fit4.score(X_train,y_train)*100)
Accuracy Score of Linear regression on train set 11.829233894211866
Accuracy Score of Decision Tree on train set 100.0
Accuracy Score of Random Forests on train set 94.207451077798
Accuracy Score of Gradient Boosting on train set 65.49517152859553
print("Accuracy Score of Linear regression on test set",fit1.score(X_test,y_test)*100)
print("Accuracy Score of Decision Tree on test set",fit2.score(X_test,y_test)*100)
print("Accuracy Score of Random Forests on test set",fit3.score(X_test,y_test)*100)
print("Accuracy Score of Gradient Boosting on testset",fit4.score(X_test,y_test)*100)
Accuracy Score of Linear regression on test set 36.8210287243639
Accuracy Score of Decision Tree on test set 57.61911563230391
Accuracy Score of Random Forests on test set 74.71675935214292
Accuracy Score of Gradient Boosting on testset 72.43849411693184

Sonuç

Bu eğitim, boş değerleri nasıl dolduracağınıza dair hızlı bir fikir verir. Bunu yazmamın nedeni, gerçek verilerin çoğu zaman daha da dağınık olması; çünkü boş değerler, hatalı değerler ve temizlenmesi gereken birçok kırpıntı bulunur. Yaşasın! Bu eğitimi tamamladınız. Eğitimle ilgili herhangi bir sorunuz veya düşünceniz varsa, aşağıdaki yorumlarda bizimle paylaşmaktan çekinmeyin.

Python’da Makine Öğrenimi hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Introduction to Machine Learning in Python eğitimini ve Preprocessing for Machine Learning in Python kursunu inceleyin.

Konular

İlgili