R'da Rastgele Orman Algoritması Eğitimi: Örnekli Algoritma

⚡ Akıllı Özet

R'deki Random Forest, önyüklemeli örnekler üzerinde yüzlerce karar ağacı oluşturur ve oylarını ortalamasını alarak sağlam bir tahmin oluşturur. Bu kılavuz, caret ile mtry, maxnodes ve ntree parametrelerini ayarlayarak nihai modeli Titanic hayatta kalma verileri üzerinde değerlendirir.

  • ???? Temel İlke: Bagging yöntemi, her bir ağacı önyükleme örneği ve rastgele seçilmiş tahmin edici alt kümesi üzerinde eğitir; böylece çoğunluk oylaması sırasında bireysel hatalar birbirini götürür.
  • 🧪 Doğrulama Kurulumu: trainControl(method = “cv”, number = 10, search = “grid”) her ayarlama adımında yeniden kullanılan on katlı bir ızgara aramasını sabitler.
  • 🎯 Akort Sırası: Önce mtry'yi, sonra maxnodes'u, en son da ntree'yi optimize edin ve her aşamada kazanan değeri bir sonraki aşamaya taşıyın.
  • 📈 En İyi Yapılandırma: Bu veri kümesinde en yüksek çapraz doğrulanmış doğruluk oranı mtry = 4, maxnodes = 24 ve ntree = 800 değerleriyle elde edildi.
  • 🧮 Test sonucu: confusionMatrix() fonksiyonu, ayrılmış veriler üzerinde %79.43 doğruluk, 0.9091 duyarlılık ve 0.6364 özgüllük bildirmektedir.

R'de Rastgele Orman

R'deki Rastgele Orman nedir?

Rastgele ormanlar basit bir fikre dayanır: 'kalabalığın bilgeliği'. Birden fazla tahmincinin sonuçlarının toplamı, en iyi bireysel tahminciden daha iyi bir tahmin verir. Bir grup tahminciye denir topluluk. Bu nedenle bu tekniğe denir Topluluk Öğrenimi.

Önceki bir eğitimde, nasıl kullanacağınızı öğrendiniz. Karar ağaçları ikili bir tahmin yapmak için. Tekniğimizi geliştirmek için bir grup kişiyi eğitebiliriz. Karar Ağacı sınıflandırıcılarıHer biri eğitim veri setinin farklı bir rastgele alt kümesi üzerinde olmak üzere, farklı ağaçların tahminlerini toplayıp en çok oy alan sınıfı döndürerek bir tahmin yapabilirsiniz. Bu tekniğe "ağaç tabanlı tahmin" denir. Rastgele Orman.

Herhangi bir kod yazmadan önce, ormanın bu ayrı ayrı ağaçlardan nasıl bir araya geldiğini tam olarak görmek faydalı olur.

R programlama dilinde Rastgele Orman algoritması nasıl çalışır?

Mekanizmayı anlamak, her ayar parametresini daha kolay yorumlamayı sağlar. Rastgele orman algoritması dört aşamada oluşturulur.

  1. Bootstrap örnekleme. Algoritma, satırlardan rastgele bir örneklem alır. değiştirme ile Her ağaç için eğitim setinden. Her örnekten satırların yaklaşık üçte biri dışarıda bırakılır; bunlar torba dışı (OOB) gözlemlerdir.
  2. Rastgele özellik seçimi. Her bölmede, tahmin edicilerin yalnızca rastgele bir alt kümesi dikkate alınır. Bu alt kümenin boyutu şudur: mtry Parametre. Seçimi kısıtlamak, tüm ağaçların birbirine benzemesini engeller.
  3. Budanmamış ağaç büyümesi. Her ağaç bir durma noktasına ulaşana kadar büyür.ping kural gibi maksimum düğümler or düğüm boyutuBireysel ağaçların aşırı uyum göstermesine bilerek izin verilir, çünkü hataları birbiriyle ilişkili değildir.
  4. Toplama. Sınıflandırma için orman algoritması en çok oy alan sınıfı döndürür; regresyon için ise ortalama tahmini döndürür. Bu ortalama alma adımı, "orman algoritması" teriminin anlamını açıklamaktadır. sarkık (bootstrap toplama) açıklıyor.

Satır örneklemesi ve sütun örneklemesinin birleşimi işin püf noktası. Tek bir derin ağacın sapması düşük, varyansı ise çok yüksektir; yüzlerce ağacın ortalamasını almak, sapmayı düşük tutarken varyansı da düşürür.

Çanta dışı hatası. Her gözlem ağaçların yaklaşık üçte birinden dışlandığı için, R her satırı yalnızca onu hiç görmemiş ağaçları kullanarak puanlayabilir. Ortaya çıkan OOB hatası, randomForest() tarafından yazdırılan ücretsiz, yerleşik bir doğrulama tahminidir:

rf_oob <- randomForest(survived~., data = data_train, ntree = 800, mtry = 4)
print(rf_oob)   # reports the OOB estimate of error rate

OOB hatası kullanışlı ve hızlı bir kontrol yöntemidir, ancak bu eğitimde caret aracılığıyla on katlı çapraz doğrulama kullanıldığı için her ayar ızgarası aynı katmanlarda karşılaştırılır.

R'de Rastgele Orman ve Karar Ağacı Karşılaştırması

Rastgele orman, aynı türden algoritmaların bir araya getirilmesiyle oluşturulmuş bir topluluktur. Karar ağaçları Önceki eğitimde ele alındığı için, aralarındaki farkları seçim yapmadan önce açıkça belirtmekte fayda var.

Kriterler Karar ağacı Rastgele Orman
Structure Bir ağaç Yüzlerce ağaç oylama yoluyla bir araya getirildi.
Varyans Yüksek, eğitim örneğine karşı çok hassas. Düşük değerde, ortalama alma işlemi bireysel hataları ortadan kaldırır.
Aşırı uyum riski Budanmadığı takdirde uzun Budanmamış ağaçlarda bile düşük
yorumlanabilir Akış şeması olarak tamamen okunabilir. Sadece değişken önemi okunabilir.
Eğitim maliyeti Çok hızlı ntree ile orantılı
Yerleşik doğrulama Hayır Torba dışı hata tahmini
R işlevi rpart() rastgeleOrman()

Teknik bilgisi olmayan bir kitleye karar yolunu açıklamanız gerektiğinde tek bir ağaç diyagramı seçin. Okunabilir bir diyagramdan ziyade tahmin doğruluğunun daha önemli olduğu durumlarda ise orman diyagramı seçin.

Rastgele Ormanın Avantajları ve Dezavantajları

Algoritmanın güçlü ve zayıf yönlerini bilmek, ileride yapılacak ayarlama çalışmalarının ne zaman değerli olduğunu gösterir.

Avantajlar

  • Budama yapmadan doğruluk: Birbirleriyle ilişkisiz birçok ağacın ortalaması, çok az manuel ayarlama ile güçlü sonuçlar verir.
  • Aşırı dikilmeye karşı dayanıklı: Daha fazla ağaç eklemek genelleme hatasını asla artırmaz, bu nedenle ntree güvenle artırılabilir.
  • Karmaşık verileri işler: Sayısal ve faktör tahmincileri yan yana çalışır ve ölçeklendirmeye gerek yoktur.
  • Ücretsiz doğrulama ve sıralama: OOB hatası ve varImp() ek bir hesaplama maliyeti gerektirmez.

Dezavantajlar

  • Belirsiz tahminler: yapamazsın tracDüzenlemeye tabi ortamlarda önem taşıyan tek bir karar yolu.
  • Büyük ormanlarda yavaş ilerler: Eğitim ve tahmin süreleri, ağaç sayısıyla doğrusal olarak ölçeklenir.
  • Önyargılı önem puanları: Birden fazla seviyeye sahip kategorik değişkenler, gerçekte olduklarından daha önemli görünebilirler.
  • Zayıf ekstrapolasyon: Regresyon için, orman modeli eğitimde görülen aralığın dışında hiçbir zaman tahmin yapamaz.

Teori ve ödünleşmeler belirlendikten sonra, sonraki altı adımda Titanic hayatta kalma veri kümesi üzerinde uçtan uca bir rastgele orman modeli oluşturulacak, ayarlanacak ve değerlendirilecektir.

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

Eğitimdekiyle aynı veri kümesine sahip olduğunuzdan emin olmak için Karar ağaçlarıEğitim seti ve test seti çevrimiçi olarak barındırılmaktadır. Herhangi bir değişiklik yapmadan bunları içe aktarabilirsiniz.

library(dplyr)
data_train <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/train.csv")
glimpse(data_train)
data_test <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv") 
glimpse(data_test)

Adım 2) Modeli eğitin

Bir modelin performansını değerlendirmenin bir yolu, onu çeşitli küçük veri kümeleri üzerinde eğitmek ve daha küçük test kümeleri üzerinde değerlendirmektir. Buna "test modeli" denir. k-kat çapraz doğrulama. R Bu yöntem, verileri rastgele olarak neredeyse aynı boyutta k alt kümeye bölen bir fonksiyona sahiptir. Örneğin, k = 10 ise, model dokuz katman üzerinde eğitilir ve kalan katman üzerinde değerlendirilir. Bu işlem, tüm alt kümeler değerlendirilene kadar tekrarlanır. Bu teknik, özellikle modelin ayarlanması gereken parametreleri olduğunda, model seçimi için yaygın olarak kullanılır.

Modelimizi değerlendirmenin bir yolunu bulduğumuza göre, şimdi hangi parametrelerin görünmeyen verilere en iyi şekilde genelleme yapacağına karar vermemiz gerekiyor.

Rastgele orman, rastgele bir özellik alt kümesi seçer ve birçok Karar Ağacı oluşturur. Model, Karar ağaçlarının tüm tahminlerinin ortalamasını alır.

Rastgele orman algoritmasının, tahminin genelleme yeteneğini geliştirmek için değiştirilebilen bazı parametreleri vardır. Modeli eğitmek için randomForest() fonksiyonunu kullanacaksınız.

randomForest() fonksiyonunun sözdizimi şu şekildedir:

randomForest(formula, ntree=n, mtry=FALSE, maxnodes = NULL)
Arguments:
- Formula: Formula of the fitted model
- ntree: number of trees in the forest
- mtry: Number of candidate variables drawn at each split. By default, it is the square root of the number of predictors for classification.
- maxnodes: Set the maximum number of terminal nodes each tree can have
- importance=TRUE: Whether independent variables importance in the random forest be assessed

not: Rastgele orman daha fazla parametre üzerinde eğitilebilir. Şuraya başvurabilirsiniz: skeç Farklı parametreleri görmek için

Bir modeli ayarlamak zahmetli bir iştir. Birçok olası parametre kombinasyonu vardır. Hepsini denemek için mutlaka zamanınız olmayabilir. İyi bir alternatif, makinenin sizin için en iyi kombinasyonu bulmasına izin vermektir. İki yöntem mevcuttur:

  • Rastgele Arama
  • Izgara Arama

Her iki yöntem de aşağıda tanımlanmıştır, ancak bu eğitimde model ızgara arama yöntemi kullanılarak eğitilecektir.

Izgara Arama tanımı

Izgara arama yöntemi basittir; model, çapraz doğrulama kullanılarak işlevde ilettiğiniz tüm kombinasyonlar üzerinden değerlendirilecektir.

Örneğin 10, 20, 30 ağaçlı bir model denemek istiyorsunuz ve her ağaç 1, 2, 3, 4, 5'e eşit mtry sayısı üzerinden test edilecek. Daha sonra makine 15 farklı modeli test edecek:

    .mtry ntrees
 1      1     10
 2      2     10
 3      3     10
 4      4     10
 5      5     10
 6      1     20
 7      2     20
 8      3     20
 9      4     20
 10     5     20
 11     1     30
 12     2     30
 13     3     30
 14     4     30
 15     5     30	

Algoritma şunları değerlendirecektir:

randomForest(formula, ntree=10, mtry=1)
randomForest(formula, ntree=10, mtry=2)
randomForest(formula, ntree=10, mtry=3)
randomForest(formula, ntree=20, mtry=2)
...

Her kombinasyon çapraz doğrulama ile değerlendirilir. Izgara aramanın dezavantajı deney sayısının yüksek olmasıdır: kombinasyon sayısı arttıkça bu sayı hızla artar. Bu sorunun üstesinden gelmek için rastgele arama kullanabilirsiniz.

Rastgele Arama tanımı

Rastgele arama ile ızgara arama arasındaki en büyük fark, rastgele aramanın arama alanındaki tüm hiperparametre kombinasyonlarını değerlendirmemesidir. Bunun yerine, her yinelemede rastgele bir kombinasyon seçer. Avantajı ise çok daha düşük hesaplama maliyetidir.

Kontrol parametresini ayarlayın

Modeli oluşturmak ve değerlendirmek için aşağıdaki şekilde ilerleyeceksiniz:

  • Modeli varsayılan ayarla değerlendirin
  • En iyi mtry sayısını bulun
  • En iyi maxnode sayısını bulun
  • En iyi ntree sayısını bulun
  • Test veri kümesindeki modeli değerlendirin

Parametre incelemesine başlamadan önce iki kitaplık yüklemeniz gerekir.

  • caret: R makine öğrenimi kütüphanesi. eğer varsa R'yi yükle r-esansiyel ile. Zaten kütüphanede var
  • e1071: R makine öğrenimi kitaplığı.

Bunları randomForest ile birlikte içe aktarabilirsiniz:

library(randomForest)
library(caret)
library(e1071)

Varsayılan ayarlar

K-katlı çapraz doğrulama trainControl() işlevi tarafından kontrol edilir

trainControl(method = "cv", number = n, search ="grid")
arguments
- method = "cv": The method used to resample the dataset. 
- number = n: Number of folds to create
- search = "grid": Use the grid search method. For the randomized method, use "random"
Note: You can refer to the vignette to see the other arguments of the function.

Modeli varsayılan parametrelerle çalıştırmayı deneyebilir ve doğruluk puanını görebilirsiniz.

not: Tüm eğitim boyunca aynı kontrolleri kullanacaksınız.

# Define the control
trControl <- trainControl(method = "cv",
    number = 10,
    search = "grid")

Modelinizi değerlendirmek için düzeltme kütüphanesini kullanacaksınız. Kütüphanenin hemen hemen tüm öğeleri değerlendirmek için train() adında bir işlevi vardır. makine öğrenme algoritma. Başka bir deyişle, bu işlevi diğer algoritmaları eğitmek için kullanabilirsiniz.

Temel sözdizimi şöyledir:

train(formula, df, method = "rf", metric= "Accuracy", trControl = trainControl(), tuneGrid = NULL)
argument
- `formula`: Define the formula of the algorithm
- `method`: Define which model to train. Note, at the end of the tutorial, there is a list of all the models that can be trained
- `metric` = "Accuracy": Define how to select the optimal model
- `trControl = trainControl()`: Define the control parameters
- `tuneGrid = NULL`: Return a data frame with all the possible combination

Varsayılan değerlerle modeli oluşturalım.

set.seed(1234)
# Run the model
rf_default <- train(survived~.,
    data = data_train,
    method = "rf",
    metric = "Accuracy",
    trControl = trControl)
# Print the results
print(rf_default)

Code açıklama

  • trainControl(method=”cv”, number=10, search=”grid”): Modeli 10 katlı bir ızgara arama yöntemiyle değerlendirin.
  • train(…): Rastgele bir orman modeli eğitin. Doğruluk ölçüsü ile en iyi model seçilir.

Çıktı:

## Random Forest 
## 
## 836 samples
##   7 predictor
##   2 classes: 'No', 'Yes' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 753, 752, 753, 752, 752, 752, ... 
## Resampling results across tuning parameters:
## 
##   mtry  Accuracy   Kappa    
##    2    0.7919248  0.5536486
##    6    0.7811245  0.5391611
##   10    0.7572002  0.4939620
## 
## Accuracy was used to select the optimal model using  the largest value.
## The final value used for the model was mtry = 2.

Algoritma 500 ağaç kullanıyor ve üç farklı mtry değerini test ediyor: 2, 6, 10.

Model için kullanılan nihai değer mtry = 2 oldu ve çapraz doğrulama ile elde edilen doğruluk oranı 0.792'dir. Daha yüksek bir puan almaya çalışalım.

En iyi mtry'yi arayın

Modeli 1'den 10'a kadar mtry değerleriyle test edebilirsiniz.

set.seed(1234)
tuneGrid <- expand.grid(.mtry = c(1: 10))
rf_mtry <- train(survived~.,
    data = data_train,
    method = "rf",
    metric = "Accuracy",
    tuneGrid = tuneGrid,
    trControl = trControl,
    importance = TRUE,
    nodesize = 14,
    ntree = 300)
print(rf_mtry)

Code açıklama

  • tuneGrid <- expand.grid(.mtry = c(1:10)): 1'den 10'a kadar değerler içeren bir vektör oluşturun

Çıktı:

## Random Forest 
## 
## 836 samples
##   7 predictor
##   2 classes: 'No', 'Yes' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 753, 752, 753, 752, 752, 752, ... 
## Resampling results across tuning parameters:
## 
##   mtry  Accuracy   Kappa    
##    1    0.7572576  0.4647368
##    2    0.7979346  0.5662364
##    3    0.8075158  0.5884815
##    4    0.8110729  0.5970664
##    5    0.8074727  0.5900030
##    6    0.8099111  0.5949342
##    7    0.8050918  0.5866415
##    8    0.8050918  0.5855399
##    9    0.8050631  0.5855035
##   10    0.7978916  0.5707336
## 
## Accuracy was used to select the optimal model using  the largest value.
## The final value used for the model was mtry = 4.

mtry'nin en iyi değeri 4'tür. Bu değer şu konumda saklanır:

rf_mtry$bestTune$mtry

Bunu saklayabilir ve diğer parametreleri ayarlamanız gerektiğinde kullanabilirsiniz.

max(rf_mtry$results$Accuracy)

Çıktı:

## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry 
best_mtry

Çıktı:

## [1] 4

Adım 3) En iyi maxnode’ları arayın

Maxnode'ların farklı değerlerini değerlendirmek için bir döngü oluşturmanız gerekir. Aşağıdaki kodda şunları yapacaksınız:

  • Liste oluştur
  • mtry parametresinin en iyi değerine sahip bir değişken oluşturun; Zorunlu
  • Döngüyü oluştur
  • Maxnode'un mevcut değerini saklayın
  • Sonuçları özetle
store_maxnode <- list()
tuneGrid <- expand.grid(.mtry = best_mtry)
for (maxnodes in c(5: 15)) {
    set.seed(1234)
    rf_maxnode <- train(survived~.,
        data = data_train,
        method = "rf",
        metric = "Accuracy",
        tuneGrid = tuneGrid,
        trControl = trControl,
        importance = TRUE,
        nodesize = 14,
        maxnodes = maxnodes,
        ntree = 300)
    current_iteration <- toString(maxnodes)
    store_maxnode[[current_iteration]] <- rf_maxnode
}
results_mtry <- resamples(store_maxnode)
summary(results_mtry)

Code açıklama:

  • Store_maxnode <- list(): Modelin sonuçları bu listede saklanacaktır.
  • extend.grid(.mtry=best_mtry): En iyi mtry değerini kullan
  • for (maxnodes in c(5:15)) { … }: maxnodes değerleri 5 ile 15 arasında olacak şekilde modeli hesaplayın.
  • maxnodes = maxnodes: Her yinelemede, maxnodes mevcut döngü değerine eşittir, yani 5, 6, 7, …
  • current_iteration <- toString(maxnodes): maxnodes değerini bir dize olarak saklayın.
  • store_maxnode[[current_iteration]] <- rf_maxnode: Modelin sonucunu listeye kaydet.
  • resamples(store_maxnode): Modelin sonuçlarını düzenleyin
  • Summary(results_mtry): Tüm kombinasyonun özetini yazdırır.

Çıktı:

## 
## Call:
## summary.resamples(object = results_mtry)
## 
## Models: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 
## Number of resamples: 10 
## 
## Accuracy 
##         Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## 5  0.6785714 0.7529762 0.7903758 0.7799771 0.8168388 0.8433735    0
## 6  0.6904762 0.7648810 0.7784710 0.7811962 0.8125000 0.8313253    0
## 7  0.6904762 0.7619048 0.7738095 0.7788009 0.8102410 0.8333333    0
## 8  0.6904762 0.7627295 0.7844234 0.7847820 0.8184524 0.8433735    0
## 9  0.7261905 0.7747418 0.8083764 0.7955250 0.8258749 0.8333333    0
## 10 0.6904762 0.7837780 0.7904475 0.7895869 0.8214286 0.8433735    0
## 11 0.7023810 0.7791523 0.8024240 0.7943775 0.8184524 0.8433735    0
## 12 0.7380952 0.7910929 0.8144005 0.8051205 0.8288511 0.8452381    0
## 13 0.7142857 0.8005952 0.8192771 0.8075158 0.8403614 0.8452381    0
## 14 0.7380952 0.7941050 0.8203528 0.8098967 0.8403614 0.8452381    0
## 15 0.7142857 0.8000215 0.8203528 0.8075301 0.8378873 0.8554217    0
## 
## Kappa 
##         Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## 5  0.3297872 0.4640436 0.5459706 0.5270773 0.6068751 0.6717371    0
## 6  0.3576471 0.4981484 0.5248805 0.5366310 0.6031287 0.6480921    0
## 7  0.3576471 0.4927448 0.5192771 0.5297159 0.5996437 0.6508314    0
## 8  0.3576471 0.4848320 0.5408159 0.5427127 0.6200253 0.6717371    0
## 9  0.4236277 0.5074421 0.5859472 0.5601687 0.6228626 0.6480921    0
## 10 0.3576471 0.5255698 0.5527057 0.5497490 0.6204819 0.6717371    0
## 11 0.3794326 0.5235007 0.5783191 0.5600467 0.6126720 0.6717371    0
## 12 0.4460432 0.5480930 0.5999072 0.5808134 0.6296780 0.6717371    0
## 13 0.4014252 0.5725752 0.6087279 0.5875305 0.6576219 0.6678832    0
## 14 0.4460432 0.5585005 0.6117973 0.5911995 0.6590982 0.6717371    0
## 15 0.4014252 0.5689401 0.6117973 0.5867010 0.6507194 0.6955990    0

Bu aralıktaki en yüksek ortalama doğruluk (0.8099), test edilen aralığın en üstünde yer alan maxnodes = 14 değerine aittir. En iyi değer ızgaranın kenarında bulunduğu için, aramayı yukarı doğru genişletmelisiniz.

store_maxnode <- list()
tuneGrid <- expand.grid(.mtry = best_mtry)
for (maxnodes in c(20: 30)) {
    set.seed(1234)
    rf_maxnode <- train(survived~.,
        data = data_train,
        method = "rf",
        metric = "Accuracy",
        tuneGrid = tuneGrid,
        trControl = trControl,
        importance = TRUE,
        nodesize = 14,
        maxnodes = maxnodes,
        ntree = 300)
    key <- toString(maxnodes)
    store_maxnode[[key]] <- rf_maxnode
}
results_node <- resamples(store_maxnode)
summary(results_node)

Çıktı:

## 
## Call:
## summary.resamples(object = results_node)
## 
## Models: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 
## Number of resamples: 10 
## 
## Accuracy 
##         Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## 20 0.7142857 0.7821644 0.8144005 0.8075301 0.8447719 0.8571429    0
## 21 0.7142857 0.8000215 0.8144005 0.8075014 0.8403614 0.8571429    0
## 22 0.7023810 0.7941050 0.8263769 0.8099254 0.8328313 0.8690476    0
## 23 0.7023810 0.7941050 0.8263769 0.8111302 0.8447719 0.8571429    0
## 24 0.7142857 0.7946429 0.8313253 0.8135112 0.8417599 0.8690476    0
## 25 0.7142857 0.7916667 0.8313253 0.8099398 0.8408635 0.8690476    0
## 26 0.7142857 0.7941050 0.8203528 0.8123207 0.8528758 0.8571429    0
## 27 0.7023810 0.8060456 0.8313253 0.8135112 0.8333333 0.8690476    0
## 28 0.7261905 0.7941050 0.8203528 0.8111015 0.8328313 0.8690476    0
## 29 0.7142857 0.7910929 0.8313253 0.8087063 0.8333333 0.8571429    0
## 30 0.6785714 0.7910929 0.8263769 0.8063253 0.8403614 0.8690476    0
## 
## Kappa 
##         Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## 20 0.3956835 0.5316120 0.5961830 0.5854366 0.6661120 0.6955990    0
## 21 0.3956835 0.5699332 0.5960343 0.5853247 0.6590982 0.6919315    0
## 22 0.3735084 0.5560661 0.6221836 0.5914492 0.6422128 0.7189781    0
## 23 0.3735084 0.5594228 0.6228827 0.5939786 0.6657372 0.6955990    0
## 24 0.3956835 0.5600352 0.6337821 0.5992188 0.6604703 0.7189781    0
## 25 0.3956835 0.5530760 0.6354875 0.5912239 0.6554912 0.7189781    0
## 26 0.3956835 0.5589331 0.6136074 0.5969142 0.6822128 0.6955990    0
## 27 0.3735084 0.5852459 0.6368425 0.5998148 0.6426088 0.7189781    0
## 28 0.4290780 0.5589331 0.6154905 0.5946859 0.6356141 0.7189781    0
## 29 0.4070588 0.5534173 0.6337821 0.5901173 0.6423101 0.6919315    0
## 30 0.3297872 0.5534173 0.6202632 0.5843432 0.6590982 0.7189781    0

En yüksek ortalama doğruluk değeri olan 0.8135, maxnodes = 24 ile elde edilmiştir (maxnodes = 27 ortalama değerle aynıdır ancak üçüncü çeyrek değeri daha düşüktür). Bu nedenle, kalan adımlar için maxnodes = 24 değerini kullanacaksınız.

Adım 4) En iyi ağaçları arayın

Artık mtry ve maxnode'un en iyi değerine sahip olduğunuza göre ağaç sayısını ayarlayabilirsiniz. Yöntem maxnode ile tamamen aynıdır.

store_maxtrees <- list()
for (ntree in c(250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000)) {
    set.seed(5678)
    rf_maxtrees <- train(survived~.,
        data = data_train,
        method = "rf",
        metric = "Accuracy",
        tuneGrid = tuneGrid,
        trControl = trControl,
        importance = TRUE,
        nodesize = 14,
        maxnodes = 24,
        ntree = ntree)
    key <- toString(ntree)
    store_maxtrees[[key]] <- rf_maxtrees
}
results_tree <- resamples(store_maxtrees)
summary(results_tree)

Çıktı:

## 
## Call:
## summary.resamples(object = results_tree)
## 
## Models: 250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000 
## Number of resamples: 10 
## 
## Accuracy 
##           Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## 250  0.7380952 0.7976190 0.8083764 0.8087010 0.8292683 0.8674699    0
## 300  0.7500000 0.7886905 0.8024240 0.8027199 0.8203397 0.8452381    0
## 350  0.7500000 0.7886905 0.8024240 0.8027056 0.8277623 0.8452381    0
## 400  0.7500000 0.7886905 0.8083764 0.8051009 0.8292683 0.8452381    0
## 450  0.7500000 0.7886905 0.8024240 0.8039104 0.8292683 0.8452381    0
## 500  0.7619048 0.7886905 0.8024240 0.8062914 0.8292683 0.8571429    0
## 550  0.7619048 0.7886905 0.8083764 0.8099062 0.8323171 0.8571429    0
## 600  0.7619048 0.7886905 0.8083764 0.8099205 0.8323171 0.8674699    0
## 800  0.7619048 0.7976190 0.8083764 0.8110820 0.8292683 0.8674699    0
## 1000 0.7619048 0.7976190 0.8121510 0.8086723 0.8303571 0.8452381    0
## 2000 0.7619048 0.7886905 0.8121510 0.8086723 0.8333333 0.8452381    0
## 
## Kappa 
##           Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## 250  0.4061697 0.5667400 0.5836013 0.5856103 0.6335363 0.7196807    0
## 300  0.4302326 0.5449376 0.5780349 0.5723307 0.6130767 0.6710843    0
## 350  0.4302326 0.5449376 0.5780349 0.5723185 0.6291592 0.6710843    0
## 400  0.4302326 0.5482030 0.5836013 0.5774782 0.6335363 0.6710843    0
## 450  0.4302326 0.5449376 0.5780349 0.5750587 0.6335363 0.6710843    0
## 500  0.4601542 0.5449376 0.5780349 0.5804340 0.6335363 0.6949153    0
## 550  0.4601542 0.5482030 0.5857118 0.5884507 0.6396872 0.6949153    0
## 600  0.4601542 0.5482030 0.5857118 0.5884374 0.6396872 0.7196807    0
## 800  0.4601542 0.5667400 0.5836013 0.5910088 0.6335363 0.7196807    0
## 1000 0.4601542 0.5667400 0.5961590 0.5857446 0.6343666 0.6678832    0
## 2000 0.4601542 0.5482030 0.5961590 0.5862151 0.6440678 0.6656337    0

Son modeliniz hazır. Rastgele ormanı aşağıdaki parametrelerle eğitebilirsiniz:

  • ntree = 800: 800 ağaç eğitilecek.
  • mtry = 4: Her bölmede 4 aday özellik seçilir.
  • maxnodes = 24: Her ağaç 24 uç düğüm (yaprak) ile sınırlıdır.
fit_rf <- train(survived~.,
    data_train,
    method = "rf",
    metric = "Accuracy",
    tuneGrid = tuneGrid,
    trControl = trControl,
    importance = TRUE,
    nodesize = 14,
    ntree = 800,
    maxnodes = 24)

Adım 5) Modeli değerlendirin

Kütüphane düzeltme işaretinin tahmin yapma işlevi vardır.

predict(model, newdata= df)
argument
- `model`: Define the model evaluated before. 
- `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)

Karışıklık matrisini hesaplamak ve doğruluk puanını görmek için tahmini kullanabilirsiniz.

confusionMatrix(prediction, data_test$survived)

Çıktı:

## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  No Yes
##        No  110  32
##        Yes  11  56
##                                          
##                Accuracy : 0.7943         
##                  95% CI : (0.733, 0.8469)
##     No Information Rate : 0.5789         
##     P-Value [Acc > NIR] : 3.959e-11      
##                                          
##                   Kappa : 0.5638         
##  Mcnemar's Test P-Value : 0.002289       
##                                          
##             Sensitivity : 0.9091         
##             Specificity : 0.6364         
##          Pos Pred Value : 0.7746         
##          Neg Pred Value : 0.8358         
##              Prevalence : 0.5789         
##          Detection Rate : 0.5263         
##    Detection Prevalence : 0.6794         
##       Balanced Accuracy : 0.7727         
##                                          
##        'Positive' Class : No             
## 

Model, daha önce görülmemiş test setinde %79.43'lük bir doğruluk oranı olan 0.7943'e ulaşmaktadır ki bu, varsayılan yapılandırmadan daha yüksektir. Duyarlılık 0.9091 ve özgüllük 0.6364'tür, bu nedenle model hayatta kalanlardan çok daha güvenilir bir şekilde hayatta kalmayanları tanımaktadır.

Adım 6) Sonucu Görselleştirin

Son olarak, varImp() fonksiyonu ile özellik önemine bakabilirsiniz. En önemli özellikler cinsiyet ve yaştır. Bu şaşırtıcı değil çünkü önemli özelliklerin ağacın köküne daha yakın, daha az önemli özelliklerin ise yapraklara daha yakın görünmesi muhtemeldir.

varImp(fit_rf)

Çıktı:

## rf variable importance
## 
##              Importance
## sexmale         100.000
## age              28.014
## pclassMiddle     27.016
## fare             21.557
## pclassUpper      16.324
## sibsp            11.246
## parch             5.522
## embarkedC         4.908
## embarkedQ         1.420
## embarkedS         0.000		

R'da Rastgele Orman: Hızlı Fonksiyon Referansı

Aşağıdaki tabloda altı adım boyunca kullanılan her fonksiyon, onu sağlayan paket ve beklediği parametreler listelenmiştir.

Kütüphane Hedef İşlev Parametre
rastgeleOrman Rastgele bir orman oluşturun rastgeleOrman() formül, ntree=n, mtry=FALSE, maxnodes = NULL
şapka k-katlı çapraz doğrulama oluşturun trenKontrol() yöntem = “cv”, sayı = n, arama =”grid”
şapka Rastgele Orman Eğit tren() formül, df, yöntem = “rf”, metrik= “Doğruluk”, trControl = trainControl(), tuneGrid = NULL
şapka Örnekten tahmin etme tahmin model, yeniveri=df
şapka Karışıklık Matrisi ve İstatistik karışıklık Matrisi() model, y testi
şapka Değişken önem varImp() model

Ek: Caret'te Mevcut Modeller

`train()` fonksiyonu rastgele ormanlardan çok daha fazlasını eğitebilir. `caret`'in desteklediği her model tanımlayıcısını yazdırmak için aşağıdaki komutu çalıştırın, ardından bunlardan herhangi birini `method` argümanına iletin.

names(getModelInfo())

Çıktı:

##   [1] "ada"                 "AdaBag"              "AdaBoost.M1"        ##   [4] "adaboost"            "amdai"               "ANFIS"              ##   [7] "avNNet"              "awnb"                "awtan"              ##  [10] "bag"                 "bagEarth"            "bagEarthGCV"        ##  [13] "bagFDA"              "bagFDAGCV"           "bam"                ##  [16] "bartMachine"         "bayesglm"            "binda"              ##  [19] "blackboost"          "blasso"              "blassoAveraged"     ##  [22] "bridge"              "brnn"                "BstLm"              ##  [25] "bstSm"               "bstTree"             "C5.0"               ##  [28] "C5.0Cost"            "C5.0Rules"           "C5.0Tree"           ##  [31] "cforest"             "chaid"               "CSimca"             ##  [34] "ctree"               "ctree2"              "cubist"             ##  [37] "dda"                 "deepboost"           "DENFIS"             ##  [40] "dnn"                 "dwdLinear"           "dwdPoly"            ##  [43] "dwdRadial"           "earth"               "elm"                ##  [46] "enet"                "evtree"              "extraTrees"         ##  [49] "fda"                 "FH.GBML"             "FIR.DM"             ##  [52] "foba"                "FRBCS.CHI"           "FRBCS.W"            ##  [55] "FS.HGD"              "gam"                 "gamboost"           ##  [58] "gamLoess"            "gamSpline"           "gaussprLinear"      ##  [61] "gaussprPoly"         "gaussprRadial"       "gbm_h3o"            ##  [64] "gbm"                 "gcvEarth"            "GFS.FR.MOGUL"       ##  [67] "GFS.GCCL"            "GFS.LT.RS"           "GFS.THRIFT"         ##  [70] "glm.nb"              "glm"                 "glmboost"           ##  [73] "glmnet_h3o"          "glmnet"              "glmStepAIC"         ##  [76] "gpls"                "hda"                 "hdda"               ##  [79] "hdrda"               "HYFIS"               "icr"                ##  [82] "J48"                 "JRip"                "kernelpls"          ##  [85] "kknn"                "knn"                 "krlsPoly"           ##  [88] "krlsRadial"          "lars"                "lars2"              ##  [91] "lasso"               "lda"                 "lda2"               ##  [94] "leapBackward"        "leapForward"         "leapSeq"            ##  [97] "Linda"               "lm"                  "lmStepAIC"          ## [100] "LMT"                 "loclda"              "logicBag"           ## [103] "LogitBoost"          "logreg"              "lssvmLinear"        ## [106] "lssvmPoly"           "lssvmRadial"         "lvq"                ## [109] "M5"                  "M5Rules"             "manb"               ## [112] "mda"                 "Mlda"                "mlp"                ## [115] "mlpKerasDecay"       "mlpKerasDecayCost"   "mlpKerasDropout"    ## [118] "mlpKerasDropoutCost" "mlpML"               "mlpSGD"             ## [121] "mlpWeightDecay"      "mlpWeightDecayML"    "monmlp"             ## [124] "msaenet"             "multinom"            "mxnet"              ## [127] "mxnetAdam"           "naive_bayes"         "nb"                 ## [130] "nbDiscrete"          "nbSearch"            "neuralnet"          ## [133] "nnet"                "nnls"                "nodeHarvest"        ## [136] "null"                "OneR"                "ordinalNet"         ## [139] "ORFlog"              "ORFpls"              "ORFridge"           ## [142] "ORFsvm"              "ownn"                "pam"                ## [145] "parRF"               "PART"                "partDSA"            ## [148] "pcaNNet"             "pcr"                 "pda"                ## [151] "pda2"                "penalized"           "PenalizedLDA"       ## [154] "plr"                 "pls"                 "plsRglm"            ## [157] "polr"                "ppr"                 "PRIM"               ## [160] "protoclass"          "pythonKnnReg"        "qda"                ## [163] "QdaCov"              "qrf"                 "qrnn"               ## [166] "randomGLM"           "ranger"              "rbf"                ## [169] "rbfDDA"              "Rborist"             "rda"                ## [172] "regLogistic"         "relaxo"              "rf"                 ## [175] "rFerns"              "RFlda"               "rfRules"            ## [178] "ridge"               "rlda"                "rlm"                ## [181] "rmda"                "rocc"                "rotationForest"     ## [184] "rotationForestCp"    "rpart"               "rpart1SE"           ## [187] "rpart2"              "rpartCost"           "rpartScore"         ## [190] "rqlasso"             "rqnc"                "RRF"                ## [193] "RRFglobal"           "rrlda"               "RSimca"             ## [196] "rvmLinear"           "rvmPoly"             "rvmRadial"          ## [199] "SBC"                 "sda"                 "sdwd"               ## [202] "simpls"              "SLAVE"               "slda"               ## [205] "smda"                "snn"                 "sparseLDA"          ## [208] "spikeslab"           "spls"                "stepLDA"            ## [211] "stepQDA"             "superpc"             "svmBoundrangeString"## [214] "svmExpoString"       "svmLinear"           "svmLinear2"         ## [217] "svmLinear3"          "svmLinearWeights"    "svmLinearWeights2"  ## [220] "svmPoly"             "svmRadial"           "svmRadialCost"      ## [223] "svmRadialSigma"      "svmRadialWeights"    "svmSpectrumString"  ## [226] "tan"                 "tanSearch"           "treebag"            ## [229] "vbmpRadial"          "vglmAdjCat"          "vglmContRatio"      ## [232] "vglmCumulative"      "widekernelpls"       "WM"                 ## [235] "wsrf"                "xgbLinear"           "xgbTree"            ## [238] "xyf"

SSS

500 ile başlayın, bu randomForest() fonksiyonunun varsayılan değeridir. Doğruluk genellikle 300 ile 1000 ağaç arasında sabitlenir. ntree'yi artırmak doğruluğa zarar vermez, sadece çalışma süresini uzatır, bu nedenle hata eğrisi düzleşene kadar artırın.

Torba dışı hata puanları, yalnızca bu yöntem kullanılmadan eğitilmiş ağaçları kullanarak her bir gözlemi hesaplar. Hızlı ve tarafsız bir tahmindir ve genellikle çapraz doğrulamanın yerini alır, ancak aynı katmanlardaki ayar ızgaralarını karşılaştırırken k-katlı doğrulama tercih edilir.

Evet. Sayısal bir yanıt verin ve randomForest() oylama yapmak yerine ağaç tahminlerinin ortalamasını alır. caret'te method = “rf” olarak bırakın ve metric argümanını Accuracy'den RMSE'ye değiştirin.

Rastgele ormanlar, müşteri kaybı, dolandırıcılık ve risk puanlaması gibi tablo tabanlı yapay zeka problemlerinde standart bir temel olmaya devam etmektedir. Ekipler genellikle gradyan artırma veya sinir ağlarına geçmeden önce bir ormanın performansını değerlendirirler.

Evet. Yapay zeka asistanları ayar ızgaraları oluşturabilir, yeniden örnekleme çıktısını açıklayabilir ve mantıklı mtry aralıkları önerebilir. Bildirilen doğruluğun tekrarlanabilir olması için oluşturulan kodu her zaman sabit bir başlangıç ​​değeriyle yeniden çalıştırın.

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