# 2025-06-17

# 의사결정나무
# 1. 패키지 설치 및 로드
# install.packages("rpart")
# install.packages("rpart.plot")  # 시각화를 위한 패키지
library(rpart)
library(rpart.plot)
# 2. 데이터 로드
data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
# 3. 의사결정나무 모델 생성
model <- rpart(Species ~ ., data = iris, method = "class")

# 4. 모델 요약 출력
summary(model)
## Call:
## rpart(formula = Species ~ ., data = iris, method = "class")
##   n= 150 
## 
##     CP nsplit rel error xerror       xstd
## 1 0.50      0      1.00   1.16 0.05127703
## 2 0.44      1      0.50   0.62 0.06031031
## 3 0.01      2      0.06   0.12 0.03322650
## 
## Variable importance
##  Petal.Width Petal.Length Sepal.Length  Sepal.Width 
##           34           31           21           14 
## 
## Node number 1: 150 observations,    complexity param=0.5
##   predicted class=setosa      expected loss=0.6666667  P(node) =1
##     class counts:    50    50    50
##    probabilities: 0.333 0.333 0.333 
##   left son=2 (50 obs) right son=3 (100 obs)
##   Primary splits:
##       Petal.Length < 2.45 to the left,  improve=50.00000, (0 missing)
##       Petal.Width  < 0.8  to the left,  improve=50.00000, (0 missing)
##       Sepal.Length < 5.45 to the left,  improve=34.16405, (0 missing)
##       Sepal.Width  < 3.35 to the right, improve=19.03851, (0 missing)
##   Surrogate splits:
##       Petal.Width  < 0.8  to the left,  agree=1.000, adj=1.00, (0 split)
##       Sepal.Length < 5.45 to the left,  agree=0.920, adj=0.76, (0 split)
##       Sepal.Width  < 3.35 to the right, agree=0.833, adj=0.50, (0 split)
## 
## Node number 2: 50 observations
##   predicted class=setosa      expected loss=0  P(node) =0.3333333
##     class counts:    50     0     0
##    probabilities: 1.000 0.000 0.000 
## 
## Node number 3: 100 observations,    complexity param=0.44
##   predicted class=versicolor  expected loss=0.5  P(node) =0.6666667
##     class counts:     0    50    50
##    probabilities: 0.000 0.500 0.500 
##   left son=6 (54 obs) right son=7 (46 obs)
##   Primary splits:
##       Petal.Width  < 1.75 to the left,  improve=38.969400, (0 missing)
##       Petal.Length < 4.75 to the left,  improve=37.353540, (0 missing)
##       Sepal.Length < 6.15 to the left,  improve=10.686870, (0 missing)
##       Sepal.Width  < 2.45 to the left,  improve= 3.555556, (0 missing)
##   Surrogate splits:
##       Petal.Length < 4.75 to the left,  agree=0.91, adj=0.804, (0 split)
##       Sepal.Length < 6.15 to the left,  agree=0.73, adj=0.413, (0 split)
##       Sepal.Width  < 2.95 to the left,  agree=0.67, adj=0.283, (0 split)
## 
## Node number 6: 54 observations
##   predicted class=versicolor  expected loss=0.09259259  P(node) =0.36
##     class counts:     0    49     5
##    probabilities: 0.000 0.907 0.093 
## 
## Node number 7: 46 observations
##   predicted class=virginica   expected loss=0.02173913  P(node) =0.3066667
##     class counts:     0     1    45
##    probabilities: 0.000 0.022 0.978
# 5. 트리 시각화
rpart.plot(model,
           type = 3,         
           extra = 104,      
           # 노드 정보 표시 형태
           # 분할 정보, 예측 클래스 등 추가 표시
           fallen.leaves = TRUE, # 리프 노드 아래로 정렬
           main = "Iris 데이터 기반 의사결정나무")

#  전체 트리 구조 해석
#  1. 루트 노드
# 분할 기준: Petal.Length < 2.5
# 역할: 데이터를 크게 두 그룹으로 나눔
#  → 꽃잎 길이가 짧은 Setosa vs 나머지 두 종(Versicolor, Virginica)
# 2. 왼쪽 자식 노드 (Setosa 분기)
# 조건: Petal.Length < 2.5
# 예측 클래스: setosa
# 클래스 비율: 1.00 0.00 0.00
# 전체 샘플 중 차지 비율: 33%
# ✅ 완벽히 순수한 노드 (100% Setosa)
# 해석: 꽃잎 길이 2.5cm 미만이면 모두 Setosa라는 아주 명확한 규칙이 있음
# 3. 오른쪽 서브트리 (Petal.Length ≥ 2.5)
# 추가 분기 기준: Petal.Width < 1.8
# 왼쪽 자식 노드 (Versicolor 중심)
# 조건: Petal.Length ≥ 2.5 AND Petal.Width < 1.8
# 예측 클래스: versicolor
# 클래스 비율: 0.00 0.91 0.09
# 전체 샘플 중 차지 비율: 36%
# ✅  당히 순수 (91%가 Versicolor)
# 해석: 꽃잎 길이가 길고, 너비가 좁으면 대부분 Versicolor
#▸ 오른쪽 자식 노드 (Virginica 중심)
# 조건: Petal.Length ≥ 2.5 AND Petal.Width ≥ 1.8
# 예측 클래스: virginica
# 클래스 비율: 0.00 0.02 0.98
# 전체 샘플 중 차지 비율: 31%
# 거의 완벽한 분류 (98%가 Virginica)
# 해석: 꽃잎 길이와 너비 모두 크면 거의 Virginic


# 앙상블 모형
# 패키지 설치
# install.packages(c("caret", "randomForest", "gbm", "ipred", "mlbench"))
# 로드
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(randomForest)
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
library(gbm)
## Loaded gbm 2.2.2
## This version of gbm is no longer under development. Consider transitioning to gbm3, https://github.com/gbm-developers/gbm3
library(ipred)
library(mlbench)
# 데이터 준비
data(iris)
set.seed(123)
index <- createDataPartition(iris$Species, p = 0.7, list = FALSE)
train <- iris[index, ]
test <- iris[-index, ]
# 1. 배깅 (Bagging)
# 배깅 (Bagged CART using ipred)
model_bag <- bagging(Species ~ ., data = train, nbagg = 25)
# nbagg = 25: 부트스트랩 샘플 수(=모델 수): 총 25개의 기본 모델을 만들어 앙상블함
# 서로 다른 데이터를 기반으로 학습된 CART 모델 25개입니다
pred_bag <- predict(model_bag, test)
# nbagg = 25로 만들어진 25개의 rpart 모델에 대해 각각 예측 수행
#각 모델이 예측한 클래스(Label)들을 집계
#각 데이터 포인트마다 25개 예측 중 가장 많이 나온 클래스를 선택
#→ 즉, 다수결(Majority Voting) 방식 사용
confusionMatrix(pred_bag, test$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         14         2
##   virginica       0          1        13
## 
## Overall Statistics
##                                          
##                Accuracy : 0.9333         
##                  95% CI : (0.8173, 0.986)
##     No Information Rate : 0.3333         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.9            
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9333           0.8667
## Specificity                 1.0000            0.9333           0.9667
## Pos Pred Value              1.0000            0.8750           0.9286
## Neg Pred Value              1.0000            0.9655           0.9355
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3111           0.2889
## Detection Prevalence        0.3333            0.3556           0.3111
## Balanced Accuracy           1.0000            0.9333           0.9167
# 2.부스팅 (Boosting with gbm)
model_gbm <- train(Species ~ ., data = train,
                   method = "gbm",
                   trControl = trainControl(method = "cv", number = 5))
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2673
##      2        0.9029             nan     0.1000    0.2073
##      3        0.7602             nan     0.1000    0.1383
##      4        0.6514             nan     0.1000    0.1341
##      5        0.5597             nan     0.1000    0.1104
##      6        0.4805             nan     0.1000    0.0759
##      7        0.4215             nan     0.1000    0.0633
##      8        0.3719             nan     0.1000    0.0610
##      9        0.3247             nan     0.1000    0.0507
##     10        0.2885             nan     0.1000    0.0378
##     20        0.1088             nan     0.1000    0.0067
##     40        0.0412             nan     0.1000   -0.0076
##     60        0.0228             nan     0.1000   -0.0070
##     80        0.0120             nan     0.1000   -0.0023
##    100        0.0087             nan     0.1000   -0.0008
##    120        0.0061             nan     0.1000   -0.0009
##    140        0.0033             nan     0.1000   -0.0002
##    150        0.0026             nan     0.1000   -0.0005
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3561
##      2        0.8562             nan     0.1000    0.1889
##      3        0.7088             nan     0.1000    0.1828
##      4        0.5848             nan     0.1000    0.1556
##      5        0.4847             nan     0.1000    0.0994
##      6        0.4101             nan     0.1000    0.1043
##      7        0.3361             nan     0.1000    0.0511
##      8        0.2924             nan     0.1000    0.0570
##      9        0.2529             nan     0.1000    0.0390
##     10        0.2221             nan     0.1000    0.0515
##     20        0.0957             nan     0.1000    0.0057
##     40        0.0232             nan     0.1000   -0.0024
##     60        0.0121             nan     0.1000    0.0001
##     80        0.0042             nan     0.1000   -0.0011
##    100        0.0027             nan     0.1000   -0.0004
##    120        0.0033             nan     0.1000    0.0002
##    140        0.0028             nan     0.1000   -0.0000
##    150        0.0026             nan     0.1000   -0.0011
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3607
##      2        0.8435             nan     0.1000    0.1817
##      3        0.7009             nan     0.1000    0.2050
##      4        0.5657             nan     0.1000    0.1393
##      5        0.4642             nan     0.1000    0.1128
##      6        0.3849             nan     0.1000    0.0736
##      7        0.3268             nan     0.1000    0.0577
##      8        0.2819             nan     0.1000    0.0547
##      9        0.2419             nan     0.1000    0.0212
##     10        0.2185             nan     0.1000    0.0378
##     20        0.0794             nan     0.1000    0.0054
##     40        0.0225             nan     0.1000   -0.0007
##     60        0.0107             nan     0.1000   -0.0033
##     80        0.0039             nan     0.1000   -0.0002
##    100        0.0025             nan     0.1000   -0.0010
##    120        0.0018             nan     0.1000    0.0004
##    140        0.0008             nan     0.1000   -0.0000
##    150        0.0004             nan     0.1000   -0.0000
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2931
##      2        0.8947             nan     0.1000    0.2055
##      3        0.7484             nan     0.1000    0.1474
##      4        0.6398             nan     0.1000    0.1391
##      5        0.5401             nan     0.1000    0.1046
##      6        0.4644             nan     0.1000    0.0998
##      7        0.3962             nan     0.1000    0.0701
##      8        0.3440             nan     0.1000    0.0698
##      9        0.2969             nan     0.1000    0.0545
##     10        0.2596             nan     0.1000    0.0422
##     20        0.0762             nan     0.1000    0.0084
##     40        0.0192             nan     0.1000   -0.0003
##     60        0.0070             nan     0.1000   -0.0017
##     80        0.0072             nan     0.1000   -0.0001
##    100        0.0023             nan     0.1000   -0.0000
##    120        0.0009             nan     0.1000   -0.0001
##    140        0.0005             nan     0.1000   -0.0002
##    150        0.0003             nan     0.1000    0.0000
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3896
##      2        0.8471             nan     0.1000    0.2537
##      3        0.6672             nan     0.1000    0.1910
##      4        0.5380             nan     0.1000    0.1052
##      5        0.4532             nan     0.1000    0.1179
##      6        0.3716             nan     0.1000    0.0975
##      7        0.3071             nan     0.1000    0.0857
##      8        0.2500             nan     0.1000    0.0408
##      9        0.2184             nan     0.1000    0.0517
##     10        0.1782             nan     0.1000    0.0392
##     20        0.0518             nan     0.1000    0.0004
##     40        0.0122             nan     0.1000   -0.0011
##     60        0.0021             nan     0.1000    0.0002
##     80        0.0009             nan     0.1000   -0.0000
##    100        0.0003             nan     0.1000    0.0000
##    120        0.0001             nan     0.1000    0.0000
##    140        0.0000             nan     0.1000    0.0000
##    150        0.0000             nan     0.1000   -0.0000
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3786
##      2        0.8382             nan     0.1000    0.2165
##      3        0.6665             nan     0.1000    0.1550
##      4        0.5453             nan     0.1000    0.1167
##      5        0.4592             nan     0.1000    0.1364
##      6        0.3695             nan     0.1000    0.0639
##      7        0.3186             nan     0.1000    0.0819
##      8        0.2630             nan     0.1000    0.0698
##      9        0.2169             nan     0.1000    0.0490
##     10        0.1822             nan     0.1000    0.0340
##     20        0.0440             nan     0.1000   -0.0006
##     40        0.0064             nan     0.1000   -0.0017
##     60        0.0038             nan     0.1000   -0.0003
##     80        0.0021             nan     0.1000   -0.0008
##    100        0.0017             nan     0.1000   -0.0000
##    120        0.0004             nan     0.1000    0.0002
##    140        0.0004             nan     0.1000   -0.0000
##    150        0.0005             nan     0.1000   -0.0003
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2755
##      2        0.9100             nan     0.1000    0.2104
##      3        0.7673             nan     0.1000    0.1658
##      4        0.6569             nan     0.1000    0.1393
##      5        0.5620             nan     0.1000    0.1053
##      6        0.4877             nan     0.1000    0.0858
##      7        0.4249             nan     0.1000    0.0787
##      8        0.3721             nan     0.1000    0.0597
##      9        0.3266             nan     0.1000    0.0490
##     10        0.2885             nan     0.1000    0.0389
##     20        0.1192             nan     0.1000    0.0123
##     40        0.0562             nan     0.1000   -0.0056
##     60        0.0224             nan     0.1000   -0.0027
##     80        0.0144             nan     0.1000   -0.0039
##    100        0.0094             nan     0.1000   -0.0005
##    120        0.0057             nan     0.1000   -0.0022
##    140        0.0039             nan     0.1000    0.0000
##    150        0.0027             nan     0.1000   -0.0001
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2864
##      2        0.8649             nan     0.1000    0.2764
##      3        0.6916             nan     0.1000    0.2070
##      4        0.5541             nan     0.1000    0.1529
##      5        0.4541             nan     0.1000    0.0820
##      6        0.3968             nan     0.1000    0.0979
##      7        0.3302             nan     0.1000    0.0550
##      8        0.2836             nan     0.1000    0.0604
##      9        0.2418             nan     0.1000    0.0427
##     10        0.2086             nan     0.1000    0.0283
##     20        0.0695             nan     0.1000    0.0080
##     40        0.0254             nan     0.1000   -0.0020
##     60        0.0167             nan     0.1000   -0.0017
##     80        0.0058             nan     0.1000    0.0000
##    100        0.0036             nan     0.1000   -0.0013
##    120        0.0027             nan     0.1000   -0.0011
##    140        0.0012             nan     0.1000   -0.0002
##    150        0.0013             nan     0.1000    0.0004
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2905
##      2        0.8888             nan     0.1000    0.2875
##      3        0.7006             nan     0.1000    0.1768
##      4        0.5707             nan     0.1000    0.1510
##      5        0.4687             nan     0.1000    0.0895
##      6        0.4051             nan     0.1000    0.1020
##      7        0.3381             nan     0.1000    0.0698
##      8        0.2891             nan     0.1000    0.0536
##      9        0.2478             nan     0.1000    0.0501
##     10        0.2056             nan     0.1000    0.0223
##     20        0.0727             nan     0.1000    0.0033
##     40        0.0235             nan     0.1000   -0.0011
##     60        0.0148             nan     0.1000   -0.0051
##     80        0.0115             nan     0.1000   -0.0020
##    100        0.0087             nan     0.1000   -0.0008
##    120        0.0049             nan     0.1000   -0.0013
##    140        0.0023             nan     0.1000   -0.0004
##    150        0.0013             nan     0.1000   -0.0002
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2605
##      2        0.9083             nan     0.1000    0.2030
##      3        0.7576             nan     0.1000    0.1710
##      4        0.6387             nan     0.1000    0.1353
##      5        0.5500             nan     0.1000    0.0694
##      6        0.4874             nan     0.1000    0.0891
##      7        0.4269             nan     0.1000    0.0665
##      8        0.3750             nan     0.1000    0.0680
##      9        0.3279             nan     0.1000    0.0477
##     10        0.2876             nan     0.1000    0.0445
##     20        0.1121             nan     0.1000    0.0070
##     40        0.0338             nan     0.1000   -0.0001
##     60        0.0177             nan     0.1000   -0.0035
##     80        0.0140             nan     0.1000   -0.0004
##    100        0.0111             nan     0.1000   -0.0023
##    120        0.0052             nan     0.1000   -0.0018
##    140        0.0048             nan     0.1000   -0.0010
##    150        0.0036             nan     0.1000   -0.0011
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3277
##      2        0.8742             nan     0.1000    0.2660
##      3        0.6955             nan     0.1000    0.2150
##      4        0.5636             nan     0.1000    0.1488
##      5        0.4636             nan     0.1000    0.1098
##      6        0.3849             nan     0.1000    0.0948
##      7        0.3188             nan     0.1000    0.0452
##      8        0.2775             nan     0.1000    0.0609
##      9        0.2314             nan     0.1000    0.0465
##     10        0.1988             nan     0.1000    0.0299
##     20        0.0701             nan     0.1000    0.0001
##     40        0.0189             nan     0.1000    0.0004
##     60        0.0100             nan     0.1000    0.0008
##     80        0.0060             nan     0.1000    0.0011
##    100        0.0032             nan     0.1000   -0.0005
##    120        0.0017             nan     0.1000    0.0000
##    140        0.0011             nan     0.1000    0.0002
##    150        0.0007             nan     0.1000   -0.0001
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3595
##      2        0.8554             nan     0.1000    0.2737
##      3        0.6743             nan     0.1000    0.1996
##      4        0.5410             nan     0.1000    0.1473
##      5        0.4380             nan     0.1000    0.0813
##      6        0.3786             nan     0.1000    0.0652
##      7        0.3306             nan     0.1000    0.0758
##      8        0.2773             nan     0.1000    0.0351
##      9        0.2465             nan     0.1000    0.0418
##     10        0.2126             nan     0.1000    0.0278
##     20        0.0691             nan     0.1000    0.0055
##     40        0.0161             nan     0.1000   -0.0020
##     60        0.0126             nan     0.1000   -0.0000
##     80        0.0066             nan     0.1000   -0.0012
##    100        0.0040             nan     0.1000   -0.0019
##    120        0.0027             nan     0.1000    0.0001
##    140        0.0011             nan     0.1000   -0.0004
##    150        0.0010             nan     0.1000   -0.0000
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.2945
##      2        0.8988             nan     0.1000    0.2053
##      3        0.7503             nan     0.1000    0.1650
##      4        0.6356             nan     0.1000    0.1313
##      5        0.5375             nan     0.1000    0.1227
##      6        0.4567             nan     0.1000    0.0937
##      7        0.3930             nan     0.1000    0.0817
##      8        0.3397             nan     0.1000    0.0525
##      9        0.2996             nan     0.1000    0.0455
##     10        0.2622             nan     0.1000    0.0392
##     20        0.0737             nan     0.1000    0.0028
##     40        0.0128             nan     0.1000   -0.0026
##     60        0.0036             nan     0.1000   -0.0011
##     80        0.0016             nan     0.1000    0.0000
##    100        0.0008             nan     0.1000    0.0001
##    120        0.0008             nan     0.1000   -0.0000
##    140        0.0003             nan     0.1000   -0.0000
##    150        0.0002             nan     0.1000   -0.0001
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3331
##      2        0.8707             nan     0.1000    0.2092
##      3        0.7128             nan     0.1000    0.1578
##      4        0.5823             nan     0.1000    0.1733
##      5        0.4631             nan     0.1000    0.1435
##      6        0.3708             nan     0.1000    0.0725
##      7        0.3146             nan     0.1000    0.0829
##      8        0.2583             nan     0.1000    0.0662
##      9        0.2139             nan     0.1000    0.0370
##     10        0.1845             nan     0.1000    0.0450
##     20        0.0396             nan     0.1000    0.0076
##     40        0.0050             nan     0.1000    0.0003
##     60        0.0011             nan     0.1000   -0.0002
##     80        0.0005             nan     0.1000   -0.0002
##    100        0.0002             nan     0.1000    0.0000
##    120        0.0001             nan     0.1000   -0.0000
##    140        0.0000             nan     0.1000    0.0000
##    150        0.0000             nan     0.1000   -0.0000
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.4081
##      2        0.8274             nan     0.1000    0.1905
##      3        0.6855             nan     0.1000    0.1985
##      4        0.5532             nan     0.1000    0.1509
##      5        0.4466             nan     0.1000    0.1093
##      6        0.3743             nan     0.1000    0.0834
##      7        0.3166             nan     0.1000    0.0932
##      8        0.2574             nan     0.1000    0.0695
##      9        0.2129             nan     0.1000    0.0502
##     10        0.1773             nan     0.1000    0.0396
##     20        0.0365             nan     0.1000    0.0018
##     40        0.0056             nan     0.1000    0.0000
##     60        0.0016             nan     0.1000   -0.0003
##     80        0.0008             nan     0.1000   -0.0000
##    100        0.0010             nan     0.1000    0.0004
##    120        0.0002             nan     0.1000    0.0000
##    140        0.0001             nan     0.1000   -0.0000
##    150        0.0000             nan     0.1000    0.0000
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.0986             nan     0.1000    0.3789
##      2        0.8487             nan     0.1000    0.2679
##      3        0.6774             nan     0.1000    0.1891
##      4        0.5455             nan     0.1000    0.0933
##      5        0.4667             nan     0.1000    0.1315
##      6        0.3824             nan     0.1000    0.0899
##      7        0.3197             nan     0.1000    0.0830
##      8        0.2648             nan     0.1000    0.0535
##      9        0.2274             nan     0.1000    0.0419
##     10        0.1930             nan     0.1000    0.0259
##     20        0.0706             nan     0.1000   -0.0049
##     40        0.0247             nan     0.1000   -0.0080
##     50        0.0177             nan     0.1000    0.0005
pred_gbm <- predict(model_gbm, test)
confusionMatrix(pred_gbm, test$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         14         2
##   virginica       0          1        13
## 
## Overall Statistics
##                                          
##                Accuracy : 0.9333         
##                  95% CI : (0.8173, 0.986)
##     No Information Rate : 0.3333         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.9            
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9333           0.8667
## Specificity                 1.0000            0.9333           0.9667
## Pos Pred Value              1.0000            0.8750           0.9286
## Neg Pred Value              1.0000            0.9655           0.9355
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3111           0.2889
## Detection Prevalence        0.3333            0.3556           0.3111
## Balanced Accuracy           1.0000            0.9333           0.9167
# Gradient Boosting Machine은 오류를 줄이는 방향으로 약한 모델을 
# 반복 학습하는 부스팅 알고리즘
# 3. 랜덤포레스트 (Random Forest)
model_rf <- randomForest(Species ~ ., data = train, ntree = 100)
pred_rf <- predict(model_rf, test)
model_rf
## 
## Call:
##  randomForest(formula = Species ~ ., data = train, ntree = 100) 
##                Type of random forest: classification
##                      Number of trees: 100
## No. of variables tried at each split: 2
## 
##         OOB estimate of  error rate: 4.76%
## Confusion matrix:
##            setosa versicolor virginica class.error
## setosa         35          0         0  0.00000000
## versicolor      0         33         2  0.05714286
## virginica       0          3        32  0.08571429
confusionMatrix(pred_rf, test$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         14         2
##   virginica       0          1        13
## 
## Overall Statistics
##                                          
##                Accuracy : 0.9333         
##                  95% CI : (0.8173, 0.986)
##     No Information Rate : 0.3333         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.9            
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9333           0.8667
## Specificity                 1.0000            0.9333           0.9667
## Pos Pred Value              1.0000            0.8750           0.9286
## Neg Pred Value              1.0000            0.9655           0.9355
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3111           0.2889
## Detection Prevalence        0.3333            0.3556           0.3111
## Balanced Accuracy           1.0000            0.9333           0.9167
# 변수 중요도 출력
importance(model_rf)
##              MeanDecreaseGini
## Sepal.Length         8.424375
## Sepal.Width          1.749385
## Petal.Length        29.602889
## Petal.Width         29.605256
varImpPlot(model_rf)