Mevcut yapay zeka uygulamalarında en popüler araçlar "karar ağaçları" ve "yapay sinir ağları"dır. Karar ağaçlarını uygulaması yapay sinir ağlarına göre oldukça daha kolaydır. Bu kısa rehberde R'da xgboost kütüphanesi ile baştan sona bir karar ağacı uygulaması bulacaksınız.
Öncelikle gerekli kütüphaneleri yükleyin ve aktif hale getirin.
install.packages("mlbench")
install.packages("xgboost")
install.packages("pROC")
install.packages("DiagrammeR")
library(xgboost)
library(mlbench)
library(pROC)
library(DiagrammeR)
Kullanacağımız veri setini yükleyelim.
data("PimaIndiansDiabetes2", package = "mlbench")
VeriSeti <-PimaIndiansDiabetes2
str(VeriSeti)
Veri setimizde toplam 9 değişken var, ve bunlardan "diabetes" adlı değişkeni diğer sekiz değişkenin değerlerine bakarak tahmin etmeye çalışıyoruz. Buna "ikili sınıflandırma" (binary classification) denir ve en sıklıkla karşılaşılan yapay zeka sorularındandır. Bir takım özelliklere (feature) bakarak bir hedef (target) değişkeni tahmin edebilir miyiz? Bu tip sorularda hedef değişken 0 ya da 1 olarak kodlanır. Bizim veri setimizde hedef değişken "diabetes" ise 'pos' ve 'neg' olarak kodlanmış, ve bu sayısal (numeric) değil kategorik (factor) bir değişken olarak kaydedilmiş. Bunları yukarıdaki 'str()' komutunun çıktısından görebiliyoruz. Öncelikle hedef değişkenimizi sayısal olarak 0 (neg) ve 1 (pos) olarak değiştirelim.
VeriSeti$diabetes<- as.numeric(VeriSeti$diabetes)
VeriSeti[VeriSeti$diabetes==1,]$diabetes<-0
VeriSeti[VeriSeti$diabetes==2,]$diabetes<-1
Elimizdeki veri setinin %80'ini eğitim, geri kalan %20'sini ise eğittiğimiz modelin başarısını ölçmek üzere test kümesi olarak kullanacağız. Aşağıda bu amaçla rastgele örneklem ile eğitim ve test kümelerini oluşturuyoruz, sonuçları tekrarlayabilmek için 'set.seed()' komutuyla rastgele sayı üretimini kayıt altına alıyoruz. 123 sayısının bir önemi yok 142 de olabilirdi, fakat bu sayıyı değiştirirsek baştaki örneklemi kaybederiz. Sayıyı en baştan sabitlediğimiz sürece aşağıdaki kod kendi bilgisayarımızda hep aynı rastgele örneklemi yapacaktır.
set.seed(123)
orneklem <- sample.int(n = nrow(VeriSeti), size = floor(.8*nrow(VeriSeti)), replace = F)
egitim <- data.matrix(VeriSeti[orneklem, ])
test <- data.matrix(VeriSeti[-orneklem, ])
Yukarıdaki kodda 'data.matrix' veri formatını kullanmamızın sebebi "xgboost" paketinin veriyi bu formatta kabul etmesi. Şimdi karar ağacı modelini eğitip tahmin yapmaya hazırız.
hedef <- egitim[,9]
kararmodeli <- xgboost(data=egitim[,-9], objective="binary:logistic",
label=hedef,
nround=5)
tahmin <- predict(kararmodeli, test[,-9])
Eğer 'tahmin' ismiyle kaydettiğimiz değişkene bakarsanız bunun 0 ile 1 arasında sayılar olduğunu göreceksiniz. Bu tahminleri diyabet olma olasığı gibi değerlendirebiliriz ya da belli bir eşik değerin üstündekileri 1, altındakileri 0 olarak yorumlayabiliriz. Eşik değeri 0.5 alarak tahminlerimizi yaparsak ortaya çıkan hata matrisi:
# 0.5 esik degeri ile tahminlerin dogruluk matrisini olustur.
# Burada satirlar tahmin, sutunlar gercek degerler.
table(as.numeric(tahmin > 0.5), test[,9])
Modelimizde değişkenlerin önem matrisi:
# Degisken etkileri matrisini olustur
degisken_etkileri <- xgb.importance(feature_names =
colnames(egitim[,-9]), model = kararmodeli)
print(xgb.plot.importance(importance_matrix = degisken_etkileri))