728x90

의사결정나무는 회귀문제와 분류문제에 적용할 수 있습니다.

회귀문제는 회귀분석 같이 연속적인 변수에 대한 예측을 하는 것이고

분류문제는 판별분석 같이 어느 부류에 속하는 것인가를 예측하는 것입니다.

 

분류문제는 붓꽃(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 로 분류

     

패키지 rpart 를 이용한 의사결정나무

 

library(rpart)
model_rpa <- rpart(Species~.,data=iris)
model_rpa
summary(model_rpa)
plot(model_rpa,compress=T,margin=0.2)
text(model_rpa, cex=1.5)

 

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

패키지 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")
library(rpart.plot)

# 필요한 패키지를 로딩중입니다: rpart

rpart.plot(model_rpart,digits=3)

 

이렇게 패키지 rpart를 이용하여 분류나무와 회귀나무를 실습하였습니다.

 

참고문헌: R을 활용한 기계학습 등



+ Recent posts