의사결정나무는 회귀문제와 분류문제에 적용할 수 있습니다.
회귀문제는 회귀분석 같이 연속적인 변수에 대한 예측을 하는 것이고
분류문제는 판별분석 같이 어느 부류에 속하는 것인가를 예측하는 것입니다.
분류문제는 붓꽃(iris)의 데이터를 이용하여 진행하겠습니다.
붓꽃(iris) 데이터는 이름 그대로 붓꽃의 데이터인데 3종류(species)가 있습니다.
Setosa, VIrginica, Versicolor 세 종류입니다.
각 종류마다 50개의 데이터가 있으니 전체 데이터 갯수는 150개 입니다.
각 관측치(붓꽃)마다
꽃받침(Sepal)의 길이와 폭
꽃잎(Petal)의 길이와 폭
4개의 변수가 있습니다.
즉 4개의 변수와 분류를 나타낸는 1개의 변수, 모두 5개의 변수로 구성됩니다.
분류트리의 예
다음은 분류트리의 예입니다.
(1) Petal.Length < 2.45 즉 2.45 작으면 붓꽃은 전부 setosa 로 분류됩니다.
(2) Peatl.Length >= 2.45(오른쪽 가지) 인 경우
Petal.Width < 1.75 이면 Versicolor 로
Petal.Width >= 1.75 이면 Virginica 로 분류

library(rpart) |
다음은 rpart.plot 패키지를 이용하여 보다 세련된 형태로 그린 의사결정나무입니다.

회귀트리의 예
다음은 의사결정나무를 이용하여 회귀분석을 한 것입니다.
물론 회귀분석같이수식으로 나타내는 것이 아니고 의사결정나무 같은 형태로 표시합니다.
wine 데이터를 이용하여 wine의 품질을 평가하는 모형입니다.
분석에 사용된 데이터는 winequality-white.csv 는 UCI 에서 구할 수 있습니다.
구글에서 "wine uci" 검색하면 UCI Machine Learning Repository 에 들어가서
다운로드 할 수 있습니다.
와인데이터
4998가지의 와인표본으로, 11가지의 화학적 특성(feature)를 갖고 있습니다.
acidity 신맛
sugar content 당도
chrolides 염화문
sulfur 황
alcohol 알코홀
PH 산성도
density 농도
3명의 감정위원이 블라인드테스트을 통해 0~10까지 점수를 매김
wine <- read.csv("winequality-white.csv",header=T,sep=";") names(wine) head(wine) str(wine) dim(wine) # [1] 4898 12 |

훈련데이터와 테스트데이터를 구분합니다.
train과 test 데이터를 만드는 방법으로는 여러가지 있지만 여기서는
4898개 중 3750는 훈련데이터, 나머지는 테스트데이터로 만듭니다.
의사결정나무에 기본적으로 많이 사용되는 패키지 rpart를 이용하여
모델객체를 만드는데 model_rpart 라고 이름을 붙임
wine_train <- wine[1:3750,] wine_test <- wine[3751:4898,] model_rpart <- rpart::rpart(quality~.,data=wine_train) model_rpart |
모델의 내용을 보이고 있습니다.

[설명]
이 3750개가 루트노드가 되어 의사결정나무의 시작점이 됩니다.
4898개의 데이터에서 train 데이터로 3750개를 추출합니다.???
(1) alcohol < 10.85 => 2373개
alcohol >= 10.85 => 1277개
첫번째로 가장 중요한 예측변수가 alcohol < 10.85 됩니다.
이를 패키지 rpart.plot 를 이용하여 시각화를 해 봅니다.
install.packages("rpart.plot") # 필요한 패키지를 로딩중입니다: rpart rpart.plot(model_rpart,digits=3) |

이렇게 패키지 rpart를 이용하여 분류나무와 회귀나무를 실습하였습니다.
참고문헌: R을 활용한 기계학습 등
'머신러닝 > 6. 의사결정나무' 카테고리의 다른 글
(R3)제04강(1.1) 의사결정나무 - iris, rpart, caret (0) | 2020.12.29 |
---|---|
(p3)제04강_01 파이썬으로 해 보는 의사결정나무 (3) | 2020.11.10 |
4.3 엔트로피(entrophy)가 뭔가요? 볼 때마다 헷갈려 ^^^ (0) | 2020.07.11 |