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

I. Ridge Regresyon

Yayın tarihi :25-Ara-21
Bölüm kodlarını ve/veya veri setlerini indir.

Ridge Regresyonu Nedir?

Ridge regresyonu, makine öğrenimi alanında uygulanan düzenlileştirme yönteminin en yaygın tekniklerinden biridir. Bu regresyon tekniği; veriler arasında çoklu etkileşim gibi olumsuz sonuçların meydana gelmesine neden olabilecek durumlarda, herhangi bir verinin analizlenebilmesi için kullanılan model iyileştirici bir teknik olarak ifade edilebilir. Kısaca çoklu etkileşim terimimi ifade etmek gerekirse; veri içerisinde bu tür etkileşimlerin meydana gelmesine bağlı olarak en küçük kareler yöntemi yansızlaşır ve varyans değerlerinde aşırı büyümeler desteklenir. Bunun sonucunda ise çalışmalarda beklenilen normal tahmin değerleri aşırı sapmalara uğrar ve gerçeklikten ayrılır. Böylelikle yapılan veya yapılacak çalışmalar gerçeği yansıtamaz.

Düzenlileştirme sürecinde bu regresyon tekniğin kullanımına bağlı olarak, çoklu etkileşim gibi olumsuzluklar ile başarılı bir mücadele ve oldukça uzun süreler boyunca başarılı tahmin sonuçlarının elde edilmesi için meydana gelebilecek sapmaların minimum düzeyde tutulması sağlanılır. Bu bilgilerden hareketle, kısaca ridge regresyonun genel kullanım tercihi; çalışmada kullanılan karmaşık formlardaki model yapılarının basitleştirilmesine dayanmaktadır. 

Bu düzenlileştirme regresyon tekniği İstatistik bilimi alanında L2 normu olarak bilinmektedir ve düzenlileştirme süreci "L2 düzenlemesi" olarak ifade edilebilir. Bu düzenleme sürecinde RSS'yi, katsayıların büyüklüğünün karesine eşdeğer cezayı (büzülme miktarı) ekleyerek değiştirir.

L2 düzenlemesinde; katsayıların büyüklüğünün karesine eşit bir L2 cezası eklenir ve modele eklenen sapma oranı "Ridge Regresyon Cezası " olarak ifade edilir. L2 seyrek modeller vermez ve tüm katsayılar aynı faktör tarafından küçültülür (hiçbirini listeden çıkarmaz sadece değerlerini küçültür). 

Evrensel olarak Ridge regresyon denklemi;

Bu denklemde ifade edilen ceza terimi, çalışmada kullanılan modelin katsayılarının düzenlenmesini sağlar ve böylelikle model içi karmaşıklığın azalması için katsayıların genlik değerleri azaltılır. Ayrıca, denklemde belirtilen "λ(lambda) ", "α(alpha) " parametresi olarak ifade edilebilir. Bu bilgiden harektele α değeri üzerindeki değişiklik yapma imkanı sayesinde ceza terimi kontrol altına alınabilinmektedir. 

Sonuç olarak α değeri ne kadar yüksek olursa, ceza terimi oranı doğru orantılı olarak yükselir. Bunun sonucunda ise katsayıların genliklerinde azalmalar meydana gelmektedir. 

Ridge Regresyonu Neden Kullanılır?

Ridge regresyonu en basit ifadesiyle tahminleme sonuçlarını gerçeğe en yakın değerlerde analizleyebilmek için kullanılmaktadır. Bu durumu genişletmek gerekirse;

  • Veri kümesi içerisinde bulunan bağımsız değişkenler arasında yüksek doğrusallık gözlendiğinde, meydana gelebilecek karmaşıklıklarla etkili mücadele edebilmek için kullanılmaktadır. Çünkü bu gibi durumlarla doğrusal regresyon gibi teknikler mücadele edemez.
  • Gözlemlenen verilerden daha yüksek oranlarda farklı parametreler mevcut ise meydana gelebilecek problemlerin başarılı bir şekilde çözümlenmesinde kullanılır. 
  • Katsayıların genlik oranlarında azaltılarak model karmaşıklıkları minimum düzeye indirgenir. 

Ridge Regresyonu Limitleri Nelerdir?

Ridge regresyonunun temel olarak 2 farklı limiti olduğu söylenebilir. Bunlar;

  1. Özellik seçiminde rol oynamaz: Yukarıda bahsedildiği üzere ridge regresyonu kullanılarak modellerin karmaşıklıkları minimum düzeye indirgenir. Bu indirgenme sürecinde veri kümesinde bulunan bağımsız değişkenlerin sayısal oranlarında herhangi bir değişim(azalma) sağlanmaz. Bu durumdan dolayı ridge regresyonu, özellik seçimi açısından etkin bir rol oynayamaz.
  2. Modeli yorumlanması: Bu regresyon tekniği kullanılarak düzenlenen modelin son hali bütün bağımsız değişkenleri içerdiğinden dolayı modelin yorumlanabilmesi düşük olmaktadır. 

Ridge regresyonunun kullanımı yukarıda verilen özellikler açısından sınırlandırılmaktadır. Bu sınırlandırmaların altında yatan en temel durumların başında, "katsayıların hiçbir zaman sıfır olmaması(sadece sıfıra minimum düzeyde küçültülür)" yer almaktadır. 

Ridge Regresyonunda Varsayımlar Nelerdir?

Genel olarak ridge regresyonunda sabit varsayımlar;

  • Doğrusallık,
  • Varyansın sabit olması,
  • Bağımsızlık,

olarak ifade edilebilir. Ayrıca, bilindiği üzere bu regresyon tekniğinin kullanımına bağlı olarak herhangi bir belirlenmiş güven aralığı bulunmamaktadır. Bunun sonucunda ise meydana gelebilecek hata oran dağılımlarının, normal bir dağılım göstermesini varsaymaya gerek yoktur.

Ridge Regresyonunda Nasıl kullanılır?

Kullanım için "Ridge" regresyon algoritmasının içe aktarılması gerekmektedir.

from sklearn.linear_model import Ridge

Söz dizimi: Ridge(alpha=1.0, *, fit_intercept=True, normalize='deprecated', copy_X=True, max_iter=None, tol=0.001, solver='auto', positive=False, random_state=None)

  • alpha, düzenleyicinin gücünü temsil etmektedir (||y - Xw||^2_2 + alpha * ||w||^2_2). Değerin büyük olması daha güçlü düzenlendirmeyi sağlayacaktır.

Örnek-1: "Cars" veri seti üzerinden, Price sütununa Ridge regresyon 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.

# Kütüphaneler içe aktarılır.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error,r2_score, mean_absolute_error

from sklearn.linear_model import Ridge
# Veri seti okunur
df=pd.read_excel("cars.xls")

EDA (Exploratory Data Analysis-Keşfedici veri analizi)

Not: Veri seti hakkında genel bir bilgi almak için EDA işlemi yapılır.

#İlk 5 satır listelendi
df.head()

Çıktı:

#Son 5 satır listelendi
df.tail()

Çıktı:

#rasgele 3 satır
df.sample(3)

Çıktı:

#Veri seti boyutu
df.shape

Çıktı:

(804, 12)
#Veri seti hakkında genel bilgi
df.info()

Çıktı:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 804 entries, 0 to 803
Data columns (total 12 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   Price     804 non-null    float64
 1   Mileage   804 non-null    int64  
 2   Make      804 non-null    object 
 3   Model     804 non-null    object 
 4   Trim      804 non-null    object 
 5   Type      804 non-null    object 
 6   Cylinder  804 non-null    int64  
 7   Liter     804 non-null    float64
 8   Doors     804 non-null    int64  
 9   Cruise    804 non-null    int64  
 10  Sound     804 non-null    int64  
 11  Leather   804 non-null    int64  
dtypes: float64(2), int64(6), object(4)
memory usage: 75.5+ KB
#Veri seti içinde boş değerlerin toplamı
df.isnull().sum()

Çıktı:

Price       0
Mileage     0
Make        0
Model       0
Trim        0
Type        0
Cylinder    0
Liter       0
Doors       0
Cruise      0
Sound       0
Leather     0
dtype: int64
#Veri seti sütunlarının(değişkenlerinin) istatistiksel değerleri
df.describe()

Çıktı:

#sütunların birbirleri ile korelasyonu
df.corr()

Çıktı:


!! Sütunlar arasındaki korelasyon işlemleri detaylarına buradan ulaşabilirsiniz.


#Korelasyon görüntülenmesi.
sns.heatmap(df.corr(),annot=True,linewidths=2)

Çıktı:

#aykırı değerler var mı?
fig, axs = plt.subplots(ncols=8,figsize=(20,5))
i=0
for item in df.corr().index:
    sns.boxplot(x=item,data=df,ax=axs[i])
    i+=1
#Grafikler incelendiğinde aykırı değerlerin fazla olmadığını görüyoruz.

Çıktı:

sns.scatterplot(data=df,y="Price",x="Mileage")

Çıktı:


sns.countplot(data=df,x="Cylinder")

Çıktı:

sns.countplot(data=df,x="Type",hue="Doors")

Çıktı:


Model Oluşturma

Veri setinde object değerler olduğundan dolayı get_dummies işlemi uygulanır.

df=pd.get_dummies(data=df,drop_first=True)
df.sample(4)

Çıktı:

 

#get_dummies() işlemi sonucunda (804,12) olan veri seti boyutumuz (804,94) olarak güncellenmiş oldu. 94 sütunluk bir veri seti haline geldi.
df.shape

Çıktı:

(804, 94)

Bağımsız değişkenler (x) ve bağımlı (tahmin/hedef) değişkenler(y) ayrımı yapılır.

x,y=df.drop("Price",axis=1),df[["Price"]]
x.head()

Çıktı:

y.head()

Çıktı:


#Test ve Train verileri ayrılır.
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=13)

#satır sayılarının eşit olduğuna(x_train ile y_train, x_test ile y_test) dikkat ediniz
x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((643, 93), (161, 93), (643, 1), (161, 1))
#Ridge modülünü R değerine eşitlenir.
R=Ridge()
#Makine eğitimi
R.fit(x_train,y_train)
#test için ayrılan x_test verilerinin hedef değerlerinin ne olabileceğini tahmin etti.
predict_R=R.predict(x_test)
predict_R[0:5]

Çıktı:

array([[12220.04924909],
       [21084.12366065],
       [16353.39604608],
       [11062.28844522],
       [15778.84324519]])
#gerçekte olan değerlerin İlk 5 satır listelendiı
y_test[0:5]

Çıktı:


Ridge Regrasyon modülü ile x_test verilerine karşılık tahmin edilen değerler (predict_R) ve gerçekte olması gereken değerler (y_test) yukardıda listelenmiş oldu. Makine öğrenmesi modelinin (Ridge Regresyon) performansını ölçmek için MSERMSEMAER2_Score değerlerine bakalım. 

#MSE
(mean_squared_error(y_test,predict_R))

Çıktı:

1288579.5974814885
#RMSE
(mean_squared_error(y_test,predict_R))**.5

Çıktı:

1135.1561995961122
#MAE
mean_absolute_error(y_test,predict_R)

Çıktı:

759.3429104438924
#r2_score
r2_score(y_test,predict_R)*100

Çıktı:

98.9094371597919

Price ve diğer sütunlar arasında Ridge Regrasyonu kullanarak %98.909 doğrulukla sonuç elde etmiş olduk. Artık yapacağımız tahminlerde %98.909 oranında doğrulukla bize araba fiyatını verecektir.

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.