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