R'de kement regresyon (adım adım)
Kement regresyonu, verilerde çoklu bağlantı mevcut olduğunda regresyon modeline uyum sağlamak için kullanabileceğimiz bir yöntemdir.
Özetle, en küçük kareler regresyonu, kalan kareler toplamını (RSS) en aza indiren katsayı tahminlerini bulmaya çalışır:
RSS = Σ(y ben – ŷ ben )2
Altın:
- Σ : Toplam anlamına gelen bir Yunan sembolü
- y i : i’inci gözlem için gerçek yanıt değeri
- ŷ i : Çoklu doğrusal regresyon modeline dayalı olarak tahmin edilen yanıt değeri
Tersine, kement regresyonu aşağıdakileri en aza indirmeyi amaçlar:
RSS + λΣ|β j |
burada j 1’den p öngörücü değişkenlere gider ve λ ≥ 0’dır.
Denklemdeki bu ikinci terim çekilme cezası olarak bilinir. Kement regresyonunda, λ için mümkün olan en düşük MSE (ortalama kare hatası) testini üreten bir değer seçeriz.
Bu eğitimde R’de kement regresyonunun nasıl gerçekleştirileceğine ilişkin adım adım bir örnek sunulmaktadır.
1. Adım: Verileri yükleyin
Bu örnek için R’nin mtcars adı verilen yerleşik veri kümesini kullanacağız. Yanıt değişkeni olarak hp’yi ve yordayıcılar olarak aşağıdaki değişkenleri kullanacağız:
- mpg
- ağırlık
- bok
- qsec
Kement regresyonunu gerçekleştirmek için glmnet paketindeki fonksiyonları kullanacağız. Bu paket, yanıt değişkeninin bir vektör olmasını ve tahmin değişkenleri kümesinin data.matrix sınıfından olmasını gerektirir.
Aşağıdaki kod verilerimizi nasıl tanımlayacağımızı gösterir:
#define response variable
y <- mtcars$hp
#define matrix of predictor variables
x <- data.matrix(mtcars[, c('mpg', 'wt', 'drat', 'qsec')])
Adım 2: Kement Regresyon Modelini Yerleştirin
Daha sonra, kement regresyon modeline uyum sağlamak ve alpha=1 belirtmek için glmnet() işlevini kullanacağız.
Alfayı 0’a eşitlemenin sırt regresyonunu kullanmaya eşdeğer olduğunu ve alfayı 0 ile 1 arasında bir değere ayarlamanın elastik ağ kullanmaya eşdeğer olduğunu unutmayın.
Lambda için hangi değerin kullanılacağını belirlemek için k-katlı çapraz doğrulama gerçekleştireceğiz ve en düşük test ortalama kare hatasını (MSE) üreten lambda değerini belirleyeceğiz.
cv.glmnet() fonksiyonunun, k = 10 kez kullanılarak k-katlı çapraz doğrulamayı otomatik olarak gerçekleştirdiğini unutmayın.
library (glmnet)
#perform k-fold cross-validation to find optimal lambda value
cv_model <- cv. glmnet (x, y, alpha = 1 )
#find optimal lambda value that minimizes test MSE
best_lambda <- cv_model$ lambda . min
best_lambda
[1] 5.616345
#produce plot of test MSE by lambda value
plot(cv_model)
MSE testini minimuma indiren lambda değeri ise 5,616345 olarak çıkıyor.
3. Adım: Nihai modeli analiz edin
Son olarak optimal lambda değerinin ürettiği son modeli analiz edebiliriz.
Bu model için katsayı tahminlerini elde etmek için aşağıdaki kodu kullanabiliriz:
#find coefficients of best model
best_model <- glmnet(x, y, alpha = 1 , lambda = best_lambda)
coef(best_model)
5 x 1 sparse Matrix of class "dgCMatrix"
s0
(Intercept) 484.20742
mpg -2.95796
wt 21.37988
drat.
qsec -19.43425
Drat tahmincisi için herhangi bir katsayı gösterilmemiştir çünkü kement regresyonu katsayıyı sıfıra indirmiştir. Bu, yeterli etkiye sahip olmadığı için modelden tamamen çıkarıldığı anlamına geliyor.
Bunun ridge regresyonu ile kement regresyonu arasındaki önemli bir fark olduğunu unutmayın. Ridge regresyonu tüm katsayıları sıfıra doğru azaltır, ancak kement regresyonu katsayıları tamamen sıfıra indirerek tahmin edicileri modelden çıkarma potansiyeline sahiptir.
Yeni gözlemler hakkında tahminlerde bulunmak için son kement regresyon modelini de kullanabiliriz. Örneğin, aşağıdaki özelliklere sahip yeni bir arabamız olduğunu varsayalım:
- mpg: 24
- ağırlık: 2,5
- fiyat: 3,5
- qsn: 18,5
Aşağıdaki kod, bu yeni gözlemin hp değerini tahmin etmek için uygun kement regresyon modelinin nasıl kullanılacağını gösterir:
#define new observation
new = matrix(c(24, 2.5, 3.5, 18.5), nrow= 1 , ncol= 4 )
#use lasso regression model to predict response value
predict(best_model, s = best_lambda, newx = new)
[1,] 109.0842
Model, girilen değerlere göre bu otomobilin 109.0842 hp değerine sahip olacağını öngörüyor.
Son olarak modelin R-karesini eğitim verileri üzerinden hesaplayabiliriz:
#use fitted best model to make predictions
y_predicted <- predict (best_model, s = best_lambda, newx = x)
#find OHS and SSE
sst <- sum ((y - mean (y))^2)
sse <- sum ((y_predicted - y)^2)
#find R-Squared
rsq <- 1 - sse/sst
rsq
[1] 0.8047064
R kare 0,8047064 olarak çıkıyor. Yani en iyi model, eğitim verilerinin yanıt değerlerindeki varyasyonun %80,47’sini açıklayabilmiştir.
Bu örnekte kullanılan R kodunun tamamını burada bulabilirsiniz.