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.

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.
- 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.
- 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.
- 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.
- 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
- Dev piton: conda install -cr r-caret
- e1071: R makine öğrenimi kitaplığı.
- Dev piton: conda kurulumu -cr r-e1071
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"
