Makine Öğrenmesi - I-Doğrusal İlişkiler (Linear Relationships)

Kısmi En Küçük Kareler Regresyonu (PLS)

Yayın tarihi :03-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

Kısmi En Küçük Kareler Regresyonu (Partial Least Squares Regression - PLS), yakın kızılötesi spektroskopi verilerini analiz etmek için kullanılan yaygın bir regresyon tekniğidir.

Bir önceki dersimizde Temel Bileşen Regresyonu (PCR) konusundan bahsedilmişti. PCR, PCA kullanılarak türetilen bir dizi temel bileşen kullanılarak oluşturulmuş oldukça basit bir regresyon modelidir. PCR'ın tahmin (hedef) değişkeni hakkında herhangi bir bilgi kullanmadığı, sadece değişkenlerin kuvvet değerlerine göre işlem yaptığından dolayı da denetemisiz olduğundan bahsedilmişti.

PLS ise PCR ile aynı işlemi yapar ama hedef değişkenini de dikkate alarak denetimli olarak çalışır.

Söz dizimi: PLSRegression(n_components=2, *, scale=True, max_iter=500, tol=1e-06, copy=True)

  • n_components, tutlacak değişkenlerin sayısını ifade eder. Default olarak değeri 2 dir.
  • scale, ölçeklendirme yapılıp yapılmayacağını temsil eder.

Örnek-1: "Cars" veri seti üzerinden, Price sütununa PLSRegression algoritmasını uygulayalım. Veri setimiz araba özelliklerini ve bu özelliklere göre fiyatının ortaya çıktığı 804 satırlık bir veri setidir.

import pandas as pd
import seaborn as sns

from sklearn.model_selection import train_test_split
from sklearn.cross_decomposition import PLSRegression
from sklearn.metrics import mean_squared_error,r2_score, mean_absolute_error
df=pd.read_excel("cars.xls")
df.head()

Çıktı:

#veri setinde object değerler olduğu için get_dummies işlemi yapalım
df=pd.get_dummies(df,drop_first=True)
df.shape

Çıktı:

(804, 94)
#bağımsız(x) ve bağımlı(y) değişkenlerini ayıralım
x,y=df.drop("Price",axis=1),df[["Price"]]
x.head()

Çıktı:

y.head()

Çıktı:

x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=13,test_size=.2)
x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((643, 93), (161, 93), (643, 1), (161, 1))
pls=PLSRegression(n_components=2)
#Makine öğrenmesi ve x_test verileri üzerinden tahminleme 
pls.fit(x_train,y_train)
predict_pls=pls.predict(x_test)
predict_pls[0:5]

Çıktı:

array([[13647.36561701],
       [18690.0063761 ],
       [16686.1844918 ],
       [ 9840.61922449],
       [15300.57562844]])
y_test[0:5]

Çıktı:

(mean_squared_error(y_test,predict_pls))**.5

Çıktı:

2183.5023625082276
r2_score(y_test,predict_pls)*100

Çıktı:

95.96496991592409

PLS Regresyonunda n_components (tutulacak değişken sayısı) değeri 2 seçildiğinde veri setimizdeki Price sütununun değerini, %95.96 doğrulukla tahmin etmiş olduk. n_components değerini 3 olarak seçerek tekrar tahminleme işlemi yapalım.

pls=PLSRegression(n_components=3)
pls.fit(x_train,y_train)
predict_pls=pls.predict(x_test)
(mean_squared_error(y_test,predict_pls))**.5

Çıktı:

1754.7516696252633
r2_score(y_test,predict_pls)*100

Çıktı:

97.39402182996429

PLS Regresyonunda n_components değeri 3 seçildiğinde veri setimizdeki Price sütununun değerini, %97.39 doğrulukla tahmin etmiş olduk. Bu veri setimizde n_components değeri artırıldığında tahmin edilen doğruluk değerinin de artacağını gözlemlemiş olduk. n_components değeri 4 yapıldığında da %98.85 doğruluk değeri elde edilecektir.

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.