Karar Ağacı ile Regresyon (Decision Tree Regression): R Örnek Uygulama
Merhaba. Bu yazımızda serinin 13’üncü yazısında Python ile yaptığımız Karar Ağacı Regresyon uygulamasını R ile yapacağız. Çalışma diznini ayarlayıp veri setini indirelim. Veriyi buradan indirebilirsiniz:
setwd('Sizin_Calisma_Dizniniz') dataset = read.csv('PozisyonSeviyeMaas.csv')
Burada rpart
paketini kullanacağız. Yüklü değil ise indirip yükleyelim:
install.packages('rpart') library(rpart)
Veri setinden Pozisyon açıklamasını çıkaralım:
dataset = dataset[2:3]
Modelimizi oluşturalım:
regressor = rpart(formula = Maas ~ ., data = dataset)
İlk parametremiz regresyon eşitliği, ikinci parametre kullanılacak veri seti. Modelimizi oluşturduk ve veri seti (dataset) ile eğittik. Şimdi bir tahmin yapalım:
y_pred = predict(regressor, data.frame(Seviye = 6.5)) y_pred 249500
Sonuç: 249500. Ne alaka? Grafiğini de çizelim. Bakalım sonuç niye böyle abuk?
library(ggplot2) ggplot() + geom_point(aes(x = dataset\$Seviye, y = dataset\$Maas), colour = 'red') + geom_line(aes(x = dataset\$Seviye, y = predict(regressor, newdata = dataset)), colour = 'blue') + ggtitle('Karar Ağacı Regresyonu') + xlab('Pozisyon Seviye') + ylab('Maas')
Evet grafikten de gördüğümüz gibi modelin veriyle hiç alakası yok. Makinemize bir daha bakalım. Çünkü yanlış sonuç üretiyor. Regressor makinemize opsiyonel bir parametre daha ekleyelim; control = rpart.control(minsplit = 1)
regressor = rpart(formula = Maas ~ ., data = dataset, control = rpart.control(minsplit = 1))
Aynı kodları çalıştırarak grafiği tekrar çizelim:
Şimdi model biraz daha gelişti. Ancak bir önceki yazıda Python ile yaptığımız uygulamada karar ağacı regresyonunun ideal grafiğini hatırlayacak olursak bu modelin de hala gelişmeye ihtiyacı olduğunu anlayabiliriz. Tekrar hatırlayacak olursak karar ağacı regresyonu bağımsız değişkenleri belirli aralıklara bölüp bu aralığa karşılık gelen bağımlı değişken kümesinin ortalama değerini hesaplıyordu. Dolayısıyla bizim her aralıkta merdiven gibi düz bir çizgi görmemiz gerekirdi. Ancak bu sıkıntı grafik çizimi ile mi alakalı yoksa hala modelde mi sorun var? Çözünürlüğü arttırarak grafiği tekrar çizdirelim:
x_grid = seq(min(dataset\$Seviye), max(dataset\$Seviye), 0.1) ggplot() + geom_point(aes(x = dataset\$Seviye, y = dataset\$Maas), colour = 'red') + geom_line(aes(x = x_grid, y = predict(regressor, newdata = data.frame(Seviye = x_grid))), colour = 'blue') + ggtitle('Karar Ağacı Regresyonu') + xlab('Pozisyon Seviye') + ylab('Maas')
Evet grafik biraz daha güzelleşti. Şimdi grafikten de gördüğümüz gibi aralıklar 0-6, 6-8, 8-9,9-10 şeklinde dörde bölünmüş. Biz ne tahmin değeri verirsek verelim model sadece bu dört aralığa denk gelen bağımsız değişken (Maas) dört ortalama değerden başka birşey söylemeyecektir isterseniz deneyelim:
predict(regressor, data.frame(Seviye = 1.0)) 82500 predict(regressor, data.frame(Seviye = 6.0)) 82500
Gördüğümüz gibi 1.0 ve 6.0 için aynı sonucu getirdi. Çok mantıklı değil. Ama karar ağacı regresyonu böyle basit bir veride değilde çok fazla niteliğin bulunduğu verilerde daha başarılı olmaktadır.