예제가 포함된 R Random Forest 튜토리얼

R의 랜덤 포레스트(Random Forest)란 무엇입니까?

랜덤 포레스트는 '군중의 지혜'라는 단순한 아이디어를 기반으로 합니다. 여러 예측 변수의 결과를 집계하면 최상의 개별 예측 변수보다 더 나은 예측이 제공됩니다. 예측변수 그룹을 앙상블. 그래서 이 기술을 이렇게 부른다. 앙상블 학습.

이전 튜토리얼에서는 다음을 사용하는 방법을 배웠습니다. 의사 결정 트리 이진 예측을 하려고 합니다. 우리의 기술을 향상시키기 위해 우리는 한 그룹의 사람들을 훈련시킬 수 있습니다. 의사결정 트리 분류자, 각각은 기차 세트의 서로 다른 무작위 하위 집합에 있습니다. 예측을 하려면 모든 개인 트리의 예측을 얻은 다음 가장 많은 표를 얻은 클래스를 예측하면 됩니다. 이 기술을 랜덤 포레스트.

단계 1) 데이터 가져 오기

튜토리얼에서와 동일한 데이터 세트가 있는지 확인하려면 결정 트리, 열차 테스트 및 테스트 세트는 인터넷에 저장됩니다. 변경하지 않고 가져올 수 있습니다.

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)

2단계) 모델 학습

모델의 성능을 평가하는 한 가지 방법은 다양한 소규모 데이터세트로 모델을 훈련하고 다른 소규모 테스트 세트에 대해 평가하는 것입니다. 이것을 F-겹 교차 검증 기능. R 거의 동일한 크기의 데이터 세트 수를 무작위로 분할하는 기능이 있습니다. 예를 들어 k=9인 경우 모델은 XNUMX개 폴더에 대해 평가되고 나머지 테스트 세트에서 테스트됩니다. 이 프로세스는 모든 하위 집합이 평가될 때까지 반복됩니다. 이 기술은 특히 모델에 조정할 매개변수가 있는 경우 모델 선택에 널리 사용됩니다.

이제 모델을 평가할 수 있는 방법이 있으므로 데이터를 가장 잘 일반화하는 매개변수를 선택하는 방법을 알아내야 합니다.

랜덤 포레스트는 기능의 무작위 하위 집합을 선택하고 많은 의사결정 트리를 구축합니다. 모델은 의사결정 트리의 모든 예측을 평균화합니다.

랜덤 포레스트에는 예측의 일반화를 개선하기 위해 변경할 수 있는 몇 가지 매개변수가 있습니다. RandomForest() 함수를 사용하여 모델을 학습합니다.

Randon Forest의 구문은 다음과 같습니다.

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 candidates draw to feed the algorithm. By default, it is the square of the number of columns.
- maxnodes: Set the maximum amount of terminal nodes in the forest
- importance=TRUE: Whether independent variables importance in the random forest be assessed

주의 사항: 랜덤 포레스트는 더 많은 매개변수에 대해 훈련될 수 있습니다. 당신은 소품 다양한 매개변수를 확인하세요.

모델을 튜닝하는 것은 매우 지루한 작업입니다. 매개변수 간에는 다양한 조합이 가능합니다. 반드시 모든 것을 시도해 볼 시간이 있는 것은 아닙니다. 좋은 대안은 기계가 귀하에게 가장 적합한 조합을 찾도록 하는 것입니다. 다음 두 가지 방법을 사용할 수 있습니다.

  • 무작위 검색
  • 그리드 검색

두 가지 방법을 모두 정의할 것이지만 튜토리얼에서는 그리드 검색을 사용하여 모델을 훈련할 것입니다.

그리드 검색 정의

그리드 검색 방법은 간단합니다. 모델은 교차 검증을 사용하여 함수에 전달한 모든 조합에 대해 평가됩니다.

예를 들어, 10, 20, 30개의 나무로 모델을 시도하고 각 나무는 1, 2, 3, 4, 5와 동일한 mtry 수에 대해 테스트됩니다. 그런 다음 기계는 15개의 다른 모델을 테스트합니다.

    .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	

알고리즘은 다음을 평가합니다.

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

매번 Random Forest는 교차 검증을 실험합니다. 그리드 검색의 한 가지 단점은 실험 횟수입니다. 조합 수가 많으면 매우 쉽게 폭발할 수 있습니다. 이 문제를 극복하기 위해 무작위 검색을 사용할 수 있습니다.

무작위 검색 정의

랜덤 검색과 그리드 검색의 큰 차이점은 랜덤 검색은 검색 공간에서 하이퍼파라미터의 모든 조합을 평가하지 않는다는 것입니다. 대신, 모든 반복에서 조합을 무작위로 선택합니다. 장점은 계산 비용이 낮다는 것입니다.

제어 매개변수 설정

모델을 구성하고 평가하려면 다음과 같이 진행합니다.

  • 기본 설정으로 모델 평가
  • 최적의 mtry 횟수 찾기
  • 최적의 최대 노드 수 찾기
  • 최적의 ntree 수 찾기
  • 테스트 데이터 세트에서 모델을 평가합니다.

매개변수 탐색을 시작하기 전에 두 개의 라이브러리를 설치해야 합니다.

  • 캐럿: R 기계 학습 라이브러리. 당신이 가지고 있다면 설치 R r-essential과 함께. 이미 도서관에 있어요
  • e1071: R 기계 학습 라이브러리.

RandomForest와 함께 가져올 수 있습니다.

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

기본 설정

K-겹 교차 검증은 trainControl() 함수에 의해 제어됩니다.

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

기본 매개변수를 사용하여 모델을 실행하고 정확도 점수를 확인할 수 있습니다.

주의 사항: 튜토리얼 전체에서 동일한 컨트롤을 사용하게 됩니다.

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

캐럿 라이브러리를 사용하여 모델을 평가합니다. 라이브러리에는 거의 모든 것을 평가하는 train()이라는 함수가 하나 있습니다. 기계 학습 알고리즘. 다르게 말하면, 이 함수를 사용하여 다른 알고리즘을 훈련할 수 있습니다.

기본 구문은 다음과 같습니다.

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

기본값을 사용하여 모델을 빌드해 보겠습니다.

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)

코드 설명

  • trainControl(method=”cv”, number=10, search=”grid”): 10개 폴더의 그리드 검색으로 모델을 평가합니다.
  • train(…): 랜덤 포레스트 모델을 훈련합니다. 정확도 측정을 통해 가장 좋은 모델이 선택됩니다.

출력:

## 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.

이 알고리즘은 500개의 트리를 사용하고 mtry의 세 가지 다른 값인 2, 6, 10을 테스트했습니다.

모델에 사용된 최종 값은 mtry = 2였으며 정확도는 0.78이었습니다. 더 높은 점수를 받아보도록 합시다.

2단계) 최적의 mtry 검색

1부터 10까지의 mtry 값으로 모델을 테스트할 수 있습니다.

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)

코드 설명

  • tuneGrid <- Expand.grid(.mtry=c(3:10)): 3:10의 값으로 벡터를 구성합니다.

모델에 사용된 최종 값은 mtry = 4였습니다.

출력:

## 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의 최고 값은 다음 위치에 저장됩니다.

rf_mtry$bestTune$mtry

이를 저장했다가 다른 매개변수를 조정해야 할 때 사용할 수 있습니다.

max(rf_mtry$results$Accuracy)

출력:

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

출력:

## [1] 4

3단계) ​​최고의 최대 노드 검색

maxnodes의 다른 값을 평가하려면 루프를 만들어야 합니다. 다음 코드에서 다음을 수행합니다.

  • 목록 만들기
  • mtry 매개변수의 가장 좋은 값을 사용하여 변수를 만듭니다. 의무적 인
  • 루프 만들기
  • maxnode의 현재 값을 저장합니다.
  • 결과 요약
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)

코드 설명:

  • store_maxnode <- list(): 모델의 결과가 이 목록에 저장됩니다.
  • Expand.grid(.mtry=best_mtry): mtry의 최고 값을 사용합니다.
  • for (maxnodes in c(15:25)) { … }: 15에서 25까지 시작하는 maxnodes 값으로 모델을 계산합니다.
  • maxnodes=maxnodes: 각 반복에서 maxnodes는 maxnodes의 현재 값과 같습니다. 즉 15, 16, 17, …
  • key <- toString(maxnodes): maxnode의 값을 문자열 변수로 저장합니다.
  • store_maxnode[[key]] <- rf_maxnode: 모델의 결과를 목록에 저장합니다.
  • resamples(store_maxnode): 모델 결과 정렬
  • summary(results_mtry): 모든 조합의 요약을 인쇄합니다.

출력:

## 
## 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

maxnode의 마지막 값이 가장 높은 정확도를 갖습니다. 더 높은 값을 사용하여 더 높은 점수를 얻을 수 있는지 확인할 수 있습니다.

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)

출력:

## 
## 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

가장 높은 정확도 점수는 maxnode 값이 22와 같을 때 얻어집니다.

4단계) 최고의 ntree 검색

이제 mtry 및 maxnode의 최고 값을 얻었으므로 트리 수를 조정할 수 있습니다. 방법은 maxnode와 완전히 동일합니다.

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)

출력:

## 
## 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

최종 모델이 있습니다. 다음 매개변수로 랜덤 포레스트를 훈련할 수 있습니다.

  • ntree =800: 800그루의 나무가 훈련됩니다.
  • mtry=4: 각 반복마다 4개의 기능이 선택됩니다.
  • maxnodes = 24: 터미널 노드(리프)의 최대 24개 노드
fit_rf <- train(survived~.,
    data_train,
    method = "rf",
    metric = "Accuracy",
    tuneGrid = tuneGrid,
    trControl = trControl,
    importance = TRUE,
    nodesize = 14,
    ntree = 800,
    maxnodes = 24)

5단계) 모델 평가

라이브러리 캐럿에는 예측 기능이 있습니다.

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

예측을 사용하여 혼동 행렬을 계산하고 정확도 점수를 확인할 수 있습니다.

confusionMatrix(prediction, data_test$survived)

출력:

## 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             
## 

정확도는 0.7943%로 기본값보다 높습니다.

6단계) 결과 시각화

마지막으로 varImp() 함수를 사용하여 기능 중요도를 확인할 수 있습니다. 가장 중요한 특징은 성별과 나이인 것 같습니다. 중요한 특징은 트리의 루트에 더 가깝게 나타나는 반면, 덜 중요한 특징은 종종 잎에 가깝게 나타나기 때문에 이는 놀라운 일이 아닙니다.

varImpPlot(fit_rf)

출력:

varImp(fit_rf)
## 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		

요약

랜덤 포레스트를 훈련하고 평가하는 방법은 아래 표를 통해 요약할 수 있습니다.

도서관 목표 함수 매개 변수
랜덤 포레스트 랜덤 포레스트 생성 랜덤포레스트() 공식, ntree=n, mtry=FALSE, maxnodes = NULL
탈자 부호 K 폴더 교차 검증 생성 열차제어() 방법 = "cv", 숫자 = n, 검색 = "그리드"
탈자 부호 랜덤 포레스트 훈련 기차() 공식, df, 메소드 = “rf”, metric= “정확도”, trControl = trainControl(), tuneGrid = NULL
탈자 부호 표본 외부 예측 예측 모델, 새 데이터= df
탈자 부호 혼동 행렬 및 통계 혼란행렬() 모델, y 테스트
탈자 부호 가변 중요성 cvarImp() 모델

충수

캐럿에 사용된 모델 목록

names>(getModelInfo())

출력:

##   [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"