R ile karar ağacı modelleri nasıl kurulur?

0 beğenilme 0 beğenilmeme
141 kez görüntülendi

Xgboost kütüphanesi ile karar ağaçları.

11, Temmuz, 11 Uygulamalı Bilgisayar Bilimi kategorisinde Salih Durhan (1,276 puan) tarafından  soruldu

1 cevap

0 beğenilme 0 beğenilmeme
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.

# 'mlbench' adli kutuphaneden 'PimaIndiansDiabetes2' adli veri setini yukle
data("PimaIndiansDiabetes2", package = "mlbench")

# Kolaylik icin veri setini adi `VeriSeti` olan bir tablo olarak kaydet
VeriSeti <-PimaIndiansDiabetes2

# Verinin yapisini gormek icin
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.

# Hedef degisken olan `diabetes` sutununda `pos` ve `neg` adli faktorleri 1 ve 0 olarak degistir

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.

# Egitim ve test kumelerini rastgele orneklem secimiyle olustur
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 degiskeni tanimla, diabetes 9 numaralı sütunda.
hedef <- egitim[,9]

# Karar agaci modelini olustur.
kararmodeli <- xgboost(data=egitim[,-9], objective="binary:logistic",
label=hedef,
nround=5)

# Karar agaci modeli ile test kumesinde tahminleri olustur
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))


11, Temmuz, 11 Salih Durhan (1,276 puan) tarafından  cevaplandı
...