Ridge, Lasso ve Elastic Net

Buse Köseoğlu
3 min readOct 26, 2020

--

Ridge Regresyon (L2 regularization)

Çok değişkenli regresyon verilerini analiz etmede kullanılır. Amaç hata kareler toplamını minimize eden katsayıları, bu katsayılara bir ceza uygulayarak bulmaktır. Over-fittinge karşı dirençlidir. Çok boyutluluğa çözüm sunar. Tüm değişkenler ile model kurar, ilgisiz değişkenleri çıkarmaz sadece katsayılarını sıfıra yaklaştırır. Modeli kurarken alpha (ceza) için iyi bir değer bulmak gerekir.

Lasso Regresyon (L1 regularization)

Ürettiği modelin tahmin doğruluğunu ve yorumlanabilirliğini arttırmak için hem değişken seçimi hem de regularization yapar. Aynı ridge regresyonda olduğu gibi amaç hata kareler toplamını minimize eden katsayıları, katsayılara ceza uygularayarak bulmaktır. Fakat ridge regresyondan farklı olarak ilgisiz değişkenlerin katsayılarını sıfıra eşitler.

Elastic Net

Amaç ridge ve lasso regresyon ile aynıdır ama elastic net, ridge ve lasso regresyonu birleştirir. Ridge regresyon tarzı cezalandırma ve lasso regresyon tarzında değişken seçimi yapar.

Uygulama

Hepsinin kısaca ne olduğunu öğrendiğimize göre artık uygulama kısmına geçebiliriz. Uygulamamız için “Hitters.csv” veri setini kullanacağız. Öncelikle gerekli olan kütüphaneleri dahil ederek başlayalım.

Gerekli kütüphaneleri dahil ettiğimize göre veri setini incelemeye geçebiliriz.

df.info() ile veri setimiz hakkında daha geniş bir bilgiye sahip olabiliriz.

Yukarıdaki çıktıyı incelediğimizde veri setinin boyutunun (322,20) olduğunu görüyoruz. Üç tane kategorik değişkenimiz var bunlar object olarak belirtilmiş ve aynı zamanda Salary değişkeninin içinde eksik veri mevcut. Bu eksik verilerin sayısını görmek için;

Bunun sonucunda Salary değişkeni içinde 59 tane eksik veri olduğunu görüyoruz. Bu eksik verileri Salary değişkeninin ortalaması ile dolduracağız.

Yukarıdaki “inplace=True” parametresi yaptığımız değişikliğin kalıcı bir şekilde uygulanmasını sağlar.

Sıra geldi kategorik değişkenleri numerik değişkenlere dönüştürmeye. Bunun için pandas içindeki “get_dummies()”i kullanacağız.

“get_dummies()” içinde numerik değişkenlere dönüşücek kategorik değişkenleri yazıyoruz. Daha sonra veri setinden bu kategorik değişkenleri ve tahmin etmek istediğimiz değişkeni düşürüyoruz ve bunu X_’ye eşitliyoruz.

dms’i incelediğimizde kategorik değişkenlerin 1 ve 0'lar ile numerik değişkenlere dönüştüğünü görüyoruz. Veri setinde her bir değişkenin bir tanesini kullanmamız yeterli olacaktır.

Dönüştürülen değişkenler ve X_’yi birleştirerek X’i elde ediyoruz. X, y’yi tahmin etmek için kullanacağımız bağımsız değişkenleri içeriyor. y’yi de tahmin etmek istediğimiz değişkene eşitliyoruz.

Bunları yaptıktan sonra artık veriyi train ve test olarak bölebiliriz.

X_train ve y_train modeli geliştirmek için X_test ve y_test ise modeli test etmek için kullanılacak bağımlı ve bağımsız değişkenleri gösteriyor. Test_size verilerin % kaçını test için kullanılacağını (%30) belirtir. Burada herhangi bir değer belirtmezsek defaultta gelen 0.25 değeri kullanılır. Random_state ise programı her çalıştırdığımızda aynı ayrımı görmek için kullanılır.

StandartScaler verileri, ortalaması 0, standart sapması 1 olacak şekilde dönüştürür. Kısacası verileri standartlaştırır.

RIDGE REGRESYON

İlk başta “ridge” adında bir model yaratıyoruz ve modele hiçbir parametre vermeden X_train ve y_train ile eğitiyoruz. Bunun sonucunda aldığımız hata 331.527 oluyor. Daha sonra RidgeCV yi kullanarak bir cross validation işlemi uyguluyoruz. Bu işlem veri setimiz için en uygun parametreleri elde etmemizi sağlıyor. İşlem tamamlandıktan sonra elde ettiğimiz en iyi alpha değeri ile yeni bir model (ridge_tuned) kuruyoruz ve eğitiyoruz. Buradan elde ettiğimiz hata ise 331.299 oluyor.

LASSO REGRESYON

“lasso” adındaki modelimizi oluşturup, eğittikten sonra elde ettiğimiz hata 331.238 oluyor. Daha sonra en iyi parametreleri bulmak için LassoCV yani cross validation uyguluyoruz. Son olarak da elde ettiğimiz parametrelerle yeni bir model kurup eğittiğimiz zaman hata 331.135 oluyor.

ELASTIC NET

Burada da aynı yukarıdaki işlemleri uyguluyoruz. İlk oluşturduğumuz modelde elde ettiğimiz hata 356.537 oluyor. Tune edildikten sonra elde ettiğimiz hata ise 353.737 oluyor.

--

--