R'deki Karar Ağacı: Örnekli Sınıflandırma Ağacı

⚡ Akıllı Özet

R'deki karar ağaçları, her yaprak tek bir baskın sınıfa sahip olana kadar basit evet veya hayır kuralları kullanarak verileri dallara ayırır. Bu kılavuz, Titanic hayatta kalma veri kümesi üzerinde bir rpart sınıflandırma ağacının oluşturulmasını, grafiğinin çizilmesini, değerlendirilmesini ve ayarlanmasını ele almaktadır.

  • ???? Temel Tanım: Bir ağaç, tahmin edici uzayını özyinelemeli olarak bölümlere ayırır ve her düğümde sınıf kirliliğini en çok azaltan bölmeyi seçer.
  • 🔄 Veri Hazırlama: Sıralı Titanic dosyasını sample() fonksiyonuyla karıştırın, tanımlayıcı sütunları silin, faktörleri dönüştürün, ardından NA satırlarını kaldırın.
  • Model Sözdizimi: `rpart(survived~., data = data_train, method = 'class')` komutunu çağırın ve sonucu `rpart.plot(fit, extra = 106)` ile çizin.
  • ⚙️ Ayarlama: rpart.control() fonksiyonu minsplit, minbucket, maxdepth ve cp değerlerini kullanıma sunarak doğruluğu %79.90'a çıkarıyor.
  • 📊 Değerlendirme: table() fonksiyonunu kullanarak bir karışıklık matrisi oluşturun, ardından köşegeni toplam değere bölün; bu şekilde %78.47 test doğruluğu elde edersiniz.

R'deki Karar Ağacı

Karar Ağaçları Nedir?

Karar ağaçları Karar ağaçları, hem sınıflandırma hem de regresyon görevlerini gerçekleştirebilen çok yönlü bir makine öğrenimi algoritmasıdır. Karmaşık veri kümelerine uyum sağlayabilen çok güçlü algoritmalardır. Ayrıca, karar ağaçları, günümüzde mevcut en güçlü makine öğrenimi algoritmaları arasında yer alan rastgele ormanların temel bileşenleridir.

Kodda bir ağaç yapısı oluşturmadan önce, ağacın nerede bölüneceğine nasıl karar verdiğini bilmek faydalı olur.

Karar Ağacı Nasıl Çalışır?

Karar ağacı, bir veri kümesini üç tür düğümden oluşan evet veya hayır sorularından oluşan bir akış şemasına dönüştürür: kök her eğitim gözlemini gerçekleştirir, bir iç düğüm Bir tahminleyici hakkında bir soru sorar ve verileri ikiye böler, ve bir Yaprak Bölmeyi durdurur ve çoğunluk sınıfını döndürür.

Büyüme, açgözlü bir prosedür izler. özyinelemeli ikili bölümleme:

  1. Her aday bölümünü değerlendirin. Her bir tahminleyici ve kesme noktası için, ortaya çıkan iki grubun ne kadar saf olmayacağını ölçün.
  2. En iyisini saklayın. En fazla safsızlığı azaltan ayrıştırma yöntemi, o düğümde sorulan soru haline gelir.
  3. Her çocuk için aynı işlemi tekrarlayın. ta ki bir kontrol kuralı onu durdurana kadar: minsplit, minbucket, maxdepth veya cp.
  4. Kuru erik. Ardından cp, kendi masraflarını karşılamayan dalları budar ve bu da ağacın eğitim setini ezberlemesini engeller.

Her soruda bir değişken bir eşik değerle karşılaştırıldığı için, algoritmanın ölçeklendirmeye veya kukla kodlamaya ihtiyacı yoktur.

Karar Ağaçlarında Gini İndeksi ve Entropi Karşılaştırması

Bu safsızlık iki şekilde ölçülebilir ve rpart size seçim yapma olanağı sunar.

Kriterler Gini Endeksi Entropi (Bilgi Kazancı)
formül 1 – sınıf oranlarının karelerinin toplamı -p çarpı log2(p)'nin toplamı
Aralık (iki sınıf) 0 için 0.5 0 için 1
Hesaplama Daha hızlı, logaritma yok Daha yavaş, logaritma kullanıyor.
rpart ayarı Varsayılan parms = list(split = “information”)
fit_entropy <- rpart(survived~., data = data_train, method = 'class',
    parms = list(split = "information"))

Pratikte her iki kriter de çoğu zaman aynı dağılımı seçer, bu nedenle varsayılan Gini endeksi güvenli bir seçimdir.

Karar Ağaçlarının Avantajları ve Dezavantajları

Bu ödünleşmeler, tek bir ağacın ne zaman yeterli olduğunu ve ne zaman bir topluluğa geçmeniz gerektiğini size gösterir.

Avantajlar

  • Tamamen yorumlanabilir: Uyumlu model, tüm paydaşların okuyabileceği bir diyagramdır.
  • Minimum ön işleme: Ölçeklendirme veya normalleştirme gerekmez ve faktörler doğal olarak çalışır.
  • Her iki görevi de yerine getirir: `method = 'class'` bir sınıflandırıcıyı, `method = 'anova'` ise bir regresyon ağacını eğitir.
  • Hızlıca eğitilebilir: Büyük veri kümeleri saniyeler içinde işlenebilir, bu nedenle ağaçlar kullanışlı bir ilk temel oluşturur.

Dezavantajlar

  • Yüksek varyans: Eğitim verilerindeki küçük bir değişiklik, tamamen farklı bir ağaç ortaya çıkarabilir.
  • Aşırı uyum eğilimi: Sınırsız bir şekilde büyüyen bir ağaç, cp ve maxdepth onu kısıtlamadığı sürece her yaprağı saf olana kadar büyümeye devam eder.
  • Yalnızca eksen paralel bölünmeler: Çapraz sınırlar, merdiven şeklinde birçok kesim gerektirir.

İlk iki zayıflığın çözümü, birçok ağacın ortalamasını almaktır; bu da tam olarak budur. rastgele orman yapar.

R'de Karar Ağacı Nasıl Eğitilir ve Görselleştirilir?

R'da ilk karar ağacınızı oluşturmak için yedi adımı izleyeceksiniz:

  • 1. Adım: Verileri içe aktarın
  • 2. Adım: Veri kümesini temizleyin
  • 3. Adım: Eğitim/test seti oluşturun
  • 4. Adım: Modeli oluşturun
  • 5. Adım: Tahminde bulunun
  • 6. Adım: Performansı ölçün
  • Adım 7: Hiper parametreleri ayarlayın

Adım 1) Verileri içe aktarın

Titanik'in akıbetini merak ediyorsanız bu videoyu izleyebilirsiniz. Youtube. Bu veri setinin amacı, buzdağıyla çarpışma sonrasında hangi insanların hayatta kalma olasılığının daha yüksek olduğunu tahmin etmektir. Veri seti 13 değişken ve 1309 gözlem içermektedir. Veri seti X değişkenine göre sıralanır.

set.seed(678)
path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/titanic_data.csv'
titanic <-read.csv(path)
head(titanic)

Çıktı:

##   X pclass survived                                            name    sex
## 1 1      1        1                   Allen, Miss. Elisabeth Walton female
## 2 2      1        1                  Allison, Master. Hudson Trevor   male
## 3 3      1        0                    Allison, Miss. Helen Loraine female
## 4 4      1        0            Allison, Mr. Hudson Joshua Creighton   male
## 5 5      1        0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female
## 6 6      1        1                             Anderson, Mr. Harry   male
##       age sibsp parch ticket     fare   cabin embarked
## 1 29.0000     0     0  24160 211.3375      B5        S
## 2  0.9167     1     2 113781 151.5500 C22 C26        S
## 3  2.0000     1     2 113781 151.5500 C22 C26        S
## 4 30.0000     1     2 113781 151.5500 C22 C26        S
## 5 25.0000     1     2 113781 151.5500 C22 C26        S
## 6 48.0000     0     0  19952  26.5500     E12        S
##                         home.dest
## 1                    St Louis, MO
## 2 Montreal, PQ / Chesterville, ON
## 3 Montreal, PQ / Chesterville, ON
## 4 Montreal, PQ / Chesterville, ON
## 5 Montreal, PQ / Chesterville, ON
## 6                    New York, NY
tail(titanic)

Çıktı:

##         X pclass survived                      name    sex  age sibsp
## 1304 1304      3        0     Yousseff, Mr. Gerious   male   NA     0
## 1305 1305      3        0      Zabour, Miss. Hileni female 14.5     1
## 1306 1306      3        0     Zabour, Miss. Thamine female   NA     1
## 1307 1307      3        0 Zakarian, Mr. Mapriededer   male 26.5     0
## 1308 1308      3        0       Zakarian, Mr. Ortin   male 27.0     0
## 1309 1309      3        0        Zimmerman, Mr. Leo   male 29.0     0
##      parch ticket    fare cabin embarked home.dest
## 1304     0   2627 14.4583              C          
## 1305     0   2665 14.4542              C          
## 1306     0   2665 14.4542              C          
## 1307     0   2656  7.2250              C          
## 1308     0   2670  7.2250              C          
## 1309     0 315082  7.8750              S

Baş ve kuyruk çıktısından verilerin karıştırılmadığını fark edebilirsiniz. Bu büyük bir sorun! Verilerinizi bir tren seti ve test seti arasında böleceğinizde, bir tek 1. ve 2. sınıftan yolcu (gözlemlerin en üst yüzde 3'inde 80. sınıftan hiçbir yolcu yok), bu da algoritmanın 3. sınıftaki yolcunun özelliklerini hiçbir zaman göremeyeceği anlamına geliyor. Bu hata kötü tahmin yapılmasına yol açacaktır.

Bu sorunun üstesinden gelmek için sample() fonksiyonunu kullanabilirsiniz.

shuffle_index <- sample(1:nrow(titanic))
head(shuffle_index)

Karar ağacı R kodu Açıklama

  • sample(1:nrow(titanic)): 1'den 1309'a kadar (yani maksimum satır sayısı) rastgele bir dizin listesi oluşturun.

Çıktı:

## [1]  288  874 1078  633  887  992

Titanik veri kümesini karıştırmak için bu dizini kullanacaksınız.

titanic <- titanic[shuffle_index, ]
head(titanic)

Çıktı:

##         X pclass survived
## 288   288      1        0
## 874   874      3        0
## 1078 1078      3        1
## 633   633      3        0
## 887   887      3        1
## 992   992      3        1
##                                                           name    sex age
## 288                                      Sutton, Mr. Frederick   male  61
## 874                   Humblen, Mr. Adolf Mathias Nicolai Olsen   male  42
## 1078                                 O'Driscoll, Miss. Bridget female  NA
## 633  Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren) female  39
## 887                                        Jermyn, Miss. Annie female  NA
## 992                                           Mamee, Mr. Hanna   male  NA
##      sibsp parch ticket    fare cabin embarked           home.dest## 288      0     0  36963 32.3208   D50        S     Haddenfield, NJ
## 874      0     0 348121  7.6500 F G63        S                    
## 1078     0     0  14311  7.7500              Q                    
## 633      1     5 347082 31.2750              S Sweden Winnipeg, MN
## 887      0     0  14313  7.7500              Q                    
## 992      0     0   2677  7.2292              C	

Adım 2) Veri kümesini temizleyin

Birkaç değişken NA değerleri içeriyor. Temizleme işlemi üç aşamada gerçekleştirilir:

  • home.dest, cabin, name, X ve ticket değişkenlerini silin.
  • Pclass için faktör değişkenleri oluşturun ve hayatta kalın
  • NA'yı bırak
library(dplyr)
# Drop variables
clean_titanic <- titanic %>%
select(-c(home.dest, cabin, name, X, ticket)) %>% 
#Convert to factor level
	mutate(pclass = factor(pclass, levels = c(1, 2, 3), labels = c('Upper', 'Middle', 'Lower')),
	survived = factor(survived, levels = c(0, 1), labels = c('No', 'Yes'))) %>%
na.omit()
glimpse(clean_titanic)

Code açıklama

  • select(-c(home.dest, kabin, isim, X, bilet))): Gereksiz değişkenleri bırakın
  • pclass = factor(pclass, levels = c(1,2,3), labels= c('Upper', 'Middle', 'Lower')): pclass değişkenine etiket ekleyin. 1, Upper olur; 2, Middle olur; 3 ise Lower olur.
  • faktör(hayatta kaldı, seviyeler = c(0,1), etiketler = c('Hayır', 'Evet')): Hayatta kaldı değişkenine etiketler ekler. 0, Hayır; 1 ise Evet olur.
  • na.omit(): NA gözlemlerini kaldırır

Çıktı:

## Observations: 1,045
## Variables: 8
## $ pclass   <fctr> Upper, Lower, Lower, Upper, Middle, Upper, Middle, U...
## $ survived <fctr> No, No, No, Yes, No, Yes, Yes, No, No, No, No, No, Y...
## $ sex      <fctr> male, male, female, female, male, male, female, male...
## $ age      <dbl> 61.0, 42.0, 39.0, 49.0, 29.0, 37.0, 20.0, 54.0, 2.0, ...
## $ sibsp    <int> 0, 0, 1, 0, 0, 1, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 1, 1,...
## $ parch    <int> 0, 0, 5, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 2, 0, 4, 0,...
## $ fare     <dbl> 32.3208, 7.6500, 31.2750, 25.9292, 10.5000, 52.5542, ...
## $ embarked <fctr> S, S, S, S, S, S, S, S, S, C, S, S, S, Q, C, S, S, C...		

Adım 3) Eğitim/test seti oluşturun

Modelinizi eğitmeden önce iki adımı uygulamanız gerekir:

  • Bir eğitim ve test seti oluşturun: Modeli tren setinde eğitirsiniz ve tahminleri test setinde (yani görünmeyen veriler) test edersiniz.
  • Rpart.plot'u konsoldan yükleyin

Yaygın uygulama, verileri 80/20'ye bölmektir; verilerin yüzde 80'i modeli eğitmeye ve yüzde 20'si tahminlerde bulunmaya hizmet eder. İki ayrı veri çerçevesi oluşturmanız gerekir. Modelinizi oluşturmayı bitirene kadar test setine dokunmak istemezsiniz. Üç bağımsız değişken alan create_train_test() işlev adını oluşturabilirsiniz.

create_train_test(df, size = 0.8, train = TRUE)
arguments:
-df: Dataset used to train the model.
-size: Size of the split. By default, 0.8. Numerical value
-train: If set to `TRUE`, the function creates the train set, otherwise the test set. Default value sets to `TRUE`. Boolean value.You need to add a Boolean parameter because R does not allow to return two data frames simultaneously.
create_train_test <- function(data, size = 0.8, train = TRUE) {
    n_row = nrow(data)
    total_row = size * n_row
    train_sample <- 1: total_row
    if (train == TRUE) {
        return (data[train_sample, ])
    } else {
        return (data[-train_sample, ])
    }
}

Code açıklama

  • function(data, size=0.8, train = TRUE): Fonksiyondaki argümanları ekleyin
  • n_row = dar(veri): Veri kümesindeki satır sayısını sayın
  • total_row = size*n_row: Tren setini oluşturmak için n'inci satırı döndürür
  • train_sample <- 1:total_row: İlk satırdan n'inci satıra kadar seç
  • if (train ==TRUE){ } else { }: Koşul doğru olarak ayarlanırsa tren setini, aksi takdirde test setini döndürün.

Fonksiyonunuzu test edebilir ve boyutu kontrol edebilirsiniz.

data_train <- create_train_test(clean_titanic, 0.8, train = TRUE)
data_test <- create_train_test(clean_titanic, 0.8, train = FALSE)
dim(data_train)

Çıktı:

## [1] 836   8
dim(data_test)

Çıktı:

## [1] 209   8

Eğitim veri seti 836 satır ve 8 sütundan oluşurken, test veri seti 209 satır ve aynı 8 sütundan oluşmaktadır.

Rastgeleleştirme işleminin doğru olup olmadığını doğrulamak için prop.table() işlevini table() ile birlikte kullanırsınız.

prop.table(table(data_train$survived))

Çıktı:

##
##        No       Yes 
## 0.5944976 0.4055024
prop.table(table(data_test$survived))

Çıktı:

## 
##        No       Yes 
## 0.5789474 0.4210526

Her iki veri setinde de hayatta kalanların sayısı aynı, yaklaşık yüzde 40.

rpart.plot'u yükleyin

rpart.plot conda kitaplıklarında mevcut değildir. Konsoldan yükleyebilirsiniz:

install.packages("rpart.plot")

Adım 4) Modeli oluşturun

Modeli oluşturmaya hazırsınız. rpart() karar ağacı fonksiyonunun sözdizimi şu şekildedir:

rpart(formula, data=, method='')
arguments:			
- formula: The function to predict
- data: Specifies the data frame
- method:			
- "class" for a classification tree 			
- "anova" for a regression tree	

Bir sınıfı tahmin ettiğiniz için sınıf yöntemini kullanırsınız.

library(rpart)
library(rpart.plot)
fit <- rpart(survived~., data = data_train, method = 'class')
rpart.plot(fit, extra = 106)

Code açıklama

  • rpart(): Modele uyacak işlev. Argümanlar şunlardır:
    • hayatta kaldı ~.: Karar Ağaçlarının Formülü
    • veri = data_train: Veri kümesi
    • method = 'sınıf': İkili bir modele uyun
  • rpart.plot(fit, extra= 106): Ağacı çizer. extra argümanı 106 olarak ayarlanmıştır ve bu, ikinci sınıfın olasılığını ve her düğümdeki gözlem yüzdesini gösterir. Daha fazla bilgi için şuraya bakabilirsiniz: skeç Diğer seçenekler hakkında daha fazla bilgi için.

Çıktı:

 R'de Karar Ağaçları Modeli Oluşturma

Grafın en tepesindeki kök düğümden ve 3 derinliğin 0. noktasından başlıyorsunuz:

  1. En üstte genel hayatta kalma olasılığı yer alır. Kazadan sağ kurtulan yolcuların oranını gösteriyor. Yolcuların yüzde 41'i hayatta kaldı.
  2. Bu düğüm, yolcunun cinsiyetinin erkek olup olmadığını sorar. Eğer evet ise, kökün sol çocuğuna (derinlik 1) inilir. Yolcuların %63'ü erkektir ve hayatta kalma olasılıkları %21'dir.
  3. İkinci düğümde erkek yolcunun 3.5 yaş üstü olup olmadığını soruyorsunuz. Eğer evet ise, hayatta kalma şansı yüzde 19'dur.
  4. Hangi özelliklerin hayatta kalma olasılığını etkilediğini anlamak için böyle devam edersiniz.

Karar Ağaçlarının birçok özelliğinden birinin çok az veri hazırlığı gerektirmesi olduğunu unutmayın. Özellikle özellik ölçeklendirme veya ortalama gerektirmezler.

Varsayılan olarak, rpart() fonksiyonu şunu kullanır: Gini Her bir bölmeyi seçmek için kirlilik ölçüsü kullanılır. Gini değeri ne kadar yüksekse, o düğüm içindeki sınıflar o kadar karışıktır; bu nedenle algoritma her zaman Gini değerini en çok düşüren bölmeyi seçer.

Adım 5) Bir tahminde bulunun

Test veri kümenizi tahmin edebilirsiniz. Tahmin yapmak için tahmin() fonksiyonunu kullanabilirsiniz. R karar ağacı için tahminin temel sözdizimi şöyledir:

predict(fitted_model, df, type = 'class')
arguments:
- fitted_model: This is the object stored after model estimation. 
- df: Data frame used to make the prediction
- type: Type of prediction			
    - 'class': for classification			
    - 'prob': to compute the probability of each class			
    - 'vector': Predict the mean response at the node level	

Şimdi, test grubundaki 209 yolcunun her biri için, modelin çarpışmadan sağ kurtulmalarını bekleyip beklemediğini tahmin ediyorsunuz.

predict_unseen <-predict(fit, data_test, type = 'class')

Code açıklama

  • tahmin(fit, data_test, type = 'sınıf'): Test kümesinin sınıfını (0/1) tahmin edin

Şimdi tahmin edilen sınıfları gerçek sonuçlarla karşılaştırın.

table_mat <- table(data_test$survived, predict_unseen)
table_mat

Code açıklama

  • table(data_test$survived, predict_unseen): Tahmin edilen sınıfların gerçek sonuca karşı olasılık tablosunu oluşturun.

Çıktı:

##      predict_unseen
##        No Yes
##   No  106  15
##   Yes  30  58

Satırlar gerçek değerleri, sütunlar ise tahminleri göstermektedir. Model, 106 hayatta kalmayan ve 58 hayatta kalan kişiyi doğru bir şekilde belirlemiş, ancak 15 hayatta kalmayan kişiyi hayatta kalan, 30 hayatta kalan kişiyi ise ölmüş olarak etiketlemiştir.

Adım 6) Performansı ölçün

Sınıflandırma görevi için bir doğruluk ölçüsünü şu şekilde hesaplayabilirsiniz: karışıklık matrisi:

MKS karışıklık matrisi sınıflandırma performansını değerlendirmek için daha iyi bir seçimdir. Genel fikir, True örneklerinin kaç kez Yanlış olarak sınıflandırıldığını saymaktır.

R'de Karar Ağaçlarının Performansını Ölçme

Bir karışıklık matrisindeki her satır gerçek bir hedefi, her sütun ise tahmin edilen bir hedefi temsil eder. Bu matrisin ilk satırı ölen yolcuları (negatif sınıf) dikkate alır: 106 kişi doğru şekilde ölü olarak sınıflandırılmıştır (Gerçek negatif15 kişi ise yanlışlıkla hayatta kalanlar olarak sınıflandırılmıştı (Yanlış pozitifİkinci satırda hayatta kalanlar ele alınıyor: 58'i doğru şekilde tanımlandı (gerçek pozitif), 30'ü ise gözden kaçırıldı (Yanlış negatif).

Hesaplayabilirsiniz doğruluk testi karışıklık matrisinden:

R'de Karar Ağaçlarının Performansını Ölçme

Matris toplamına göre gerçek pozitif ve gerçek negatifin oranıdır. R ile aşağıdaki gibi kodlayabilirsiniz:

accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)

Code açıklama

  • toplam(diag(table_mat))): Köşegenin toplamı
  • sum(table_mat): Matrisin toplamı.

Test setinin doğruluğunu yazdırabilirsiniz:

print(paste('Accuracy for test', accuracy_Test))

Çıktı:

## [1] "Accuracy for test 0.784688995215311"

Test veri setindeki doğruluk oranı 0.7847'dir, yani %78.47'dir. Modelin ne kadar aşırı uyum sağladığını görmek için aynı işlemi eğitim veri seti üzerinde tekrarlayın.

Adım 7) Hiper parametreleri ayarlayın

R'deki karar ağacı, uyumun yönlerini kontrol eden çeşitli parametrelere sahiptir. Rpart karar ağacı kütüphanesinde, rpart.control() işlevini kullanarak parametreleri kontrol edebilirsiniz. Aşağıdaki kodda, ayarlayacağınız parametreleri tanıtıyorsunuz. Şuraya başvurabilirsiniz: skeç diğer parametreler için.

rpart.control(minsplit = 20, minbucket = round(minsplit/3), maxdepth = 30)
Arguments:
-minsplit: Set the minimum number of observations in the node before the algorithm perform a split
-minbucket: Set the minimum number of observations in a terminal node, i.e. the leaf
-maxdepth: Set the maximum depth of any node of the final tree. The root node is treated as depth 0

Aşağıdaki gibi ilerleyeceğiz:

  • Doğruluğu döndürmek için işlev oluşturun
  • Maksimum derinliği ayarlayın
  • Bir düğümün bölünebilmesi için sahip olması gereken minimum örnek sayısını ayarlayın
  • Bir yaprak düğümün sahip olması gereken minimum örnek sayısını ayarlayın

Doğruluğu görüntülemek için bir fonksiyon yazabilirsiniz. Daha önce kullandığınız kodu kaydırmanız yeterlidir:

  1. tahmin: tahmin_unseen <- tahmin(uygun, veri_testi, tür = 'sınıf')
  2. Tablo üretin: table_mat <- table(data_test$survived, tahmin_unseen)
  3. Hesaplama doğruluğu: doğruluk_Test <- toplam(diag(table_mat))/sum(table_mat)
accuracy_tune <- function(fit) {
    predict_unseen <- predict(fit, data_test, type = 'class')
    table_mat <- table(data_test$survived, predict_unseen)
    accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)
    accuracy_Test
}

Şimdi parametreleri ayarlayın ve varsayılan modele göre bir iyileşme sağlayıp sağlayamayacağınıza bakın. Hatırlatmak gerekirse, 0.7847'lik bir doğruluk oranını geçmeniz gerekiyor.

control <- rpart.control(minsplit = 4,
    minbucket = round(5 / 3),
    maxdepth = 3,
    cp = 0)
tune_fit <- rpart(survived~., data = data_train, method = 'class', control = control)
accuracy_tune(tune_fit)

Çıktı:

## [1] 0.7990431

Aşağıdaki parametre ile:

minsplit = 4
minbucket = round(5/3)
maxdepth = 3
cp = 0

Doğruluk oranı 0.7847'den 0.7990'a yükseliyor, bu nedenle optimize edilmiş ağaç, varsayılan yapılandırmayı yaklaşık 1.4 puan geride bırakıyor.

R'de Karar Ağaçları: Hızlı Fonksiyon Referansı

Aşağıdaki tabloda, yukarıdaki yedi adımda kullanılan her fonksiyon, bu fonksiyonu sağlayan paket ve beklediği parametrelerle birlikte listelenmiştir. R.

Kütüphane Hedef İşlev Sınıf Parametreler Detaylar
bölüm R'deki tren sınıflandırma ağacı rpart() sınıf formül, df, yöntem
bölüm Tren regresyon ağacı rpart() anova formül, df, yöntem
bölüm Ağaçların grafiğini çizin rpart.plot() takılı model
baz tahmin ) (Tahmin sınıf takılı model, tip
baz tahmin ) (Tahmin prob takılı model, tip
baz tahmin ) (Tahmin vektör takılı model, tip
bölüm kontrol parametreleri rpart.control() minimum bölünmüş Algoritma bölme işlemini gerçekleştirmeden önce düğümdeki minimum gözlem sayısını ayarlayın
küçük kova Uç düğümdeki (yani yaprak düğümdeki) minimum gözlem sayısını ayarlayın.
Maksimum derinlik Son ağacın herhangi bir düğümünün maksimum derinliğini ayarlayın. Kök düğüm 0 derinliğinde kabul edilir.
bölüm Kontrol parametreli tren modeli rpart() formül, df, yöntem, kontrol

Not: Modeli bir eğitim verisi üzerinde eğitin ve performansı görünmeyen bir veri kümesinde, yani test kümesinde test edin.

SSS

Hem sınıflandırma hem de regresyon ağaçlarına uygundur. rpart() fonksiyonu, cp aracılığıyla yerleşik çapraz doğrulamalı budama özelliğine sahip CART algoritmasını uygular ve net diyagramlar için rpart.plot ile birlikte kullanılır, bu da onu daha yaygın bir tercih haline getirir.

`cp` parametresi, bir bölmenin korunması için sağlaması gereken minimum iyileştirmeyi belirler. Daha büyük değerler agresif bir şekilde budama yapar ve daha küçük ağaçlar üretir. Çapraz doğrulama hatası en düşük olan değeri bulmak için `printcp()` ve `plotcp()` fonksiyonlarını kullanın.

Evet. `rpart()` fonksiyonu, eksik tahmin edicilere sahip gözlemleri en benzer dala yönlendirmek için vekil bölmeler kullanır. Bu eğitimde, örnek veri setini basit tutmak amacıyla bunun yerine `na.omit()` fonksiyonu çağrılıyor.

Karar ağaçları, düzenleyici kurumların bir kararın ardındaki kesin gerekçeyi talep edebileceği kredi, sigorta ve sağlık hizmetleri gibi alanlarda açıklanabilir yapay zekâya güç katmaktadır. Ayrıca, gradyan artırma ve rastgele orman modellerinin temel öğrenme algoritmalarını oluştururlar.

Evet. Yapay zeka asistanları, bölme kurallarını sade bir dile çevirebilir, test edilecek cp değerleri önerebilir ve printcp() çıktısında aşırı uyum (overfitting) durumunu işaretleyebilir. Her öneriyi, uygulamadan önce kendi çapraz doğrulanmış sonuçlarınızla karşılaştırarak doğrulayın.

Bu yazıyı şu şekilde özetleyin: