R 결정트리학습

1 개요[ | ]

R 트리 분석
R 결정트리 분석
R 의사결정나무 분석

2 rpart[ | ]

2.1 예시: 공부시간과 합격확률[ | ]

df = data.frame(
  Hours = c(0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50),
  Pass = c(0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1)
)
library(caret, quietly=T)
idx = createDataPartition(df$Pass, list=F, p=0.8)
Train = df[ idx,]
Test  = df[-idx,]

library(rpart)
model = rpart(Pass ~ ., data=Train)

options(echo=T)
# 모델 정보
model

# 테스트
Test$Pass_predicted = ifelse(predict(model,Test)>0.5,1,0)
Test

# 정분류율(accuracy)
sum(Test$Pass==Test$Pass_predicted)/nrow(Test)

2.2 예시: iris 자료[ | ]

df = iris
library(caret, quietly=T)
idx = createDataPartition(df$Species, list=F, p=0.8)
Train = df[ idx,]
Test  = df[-idx,]

library(rpart)
model = rpart(Species ~ ., data=Train)

options(echo=T)
# 모델 정보
model

# 시각화 1
plot(model, margin=0.1)
text(model)

# 시각화 2
library(rpart.plot)
prp(model, type=4, extra=2)

3 ctree[ | ]

3.1 예시: iris 자료[ | ]

set.seed(42) # 랜덤값 고정
df = iris
library(caret, quietly=T)
idx = createDataPartition(df$Species, p=0.7, list=F)
Train = df[ idx,]
Test  = df[-idx,]

library(partykit, quietly=T)
model = ctree(Species ~ ., Train)

options(echo=T)
# 모델 정보
model

# 시각화
plot(model)

# 테스트
predicted = predict(model, newdata=Test)
table(predicted, Test$Species)

3.2 예시: stagec 자료[ | ]

data(stagec, package='rpart')
df = stagec
df = na.omit(df) # 결측치 제거
library(caret, quietly=T)
idx = createDataPartition(df$ploidy, p=0.7, list=FALSE)
Train = df[ idx,]
Test  = df[-idx,]

library(partykit, quietly=T)
model = ctree(ploidy ~ ., Train)

options(echo=T)
# 모델 정보
model

# 시각화
plot(model)

# 테스트
predicted = predict(model, newdata=Test)
table(predicted, Test$ploidy)

3.3 예시: airquality 자료[ | ]

  • 목표변수가 범주형변수가 아니고 연속형변수라서 정분류율을 따지기 어려움
  • 데이터 분할하지 않고 자가 테스트로 MSE만 계산하였음
set.seed(42) # 랜덤값 고정
df = airquality
df = df[!is.na(df$Ozone),]
library(partykit, quietly=T)
model = ctree(Ozone ~ ., df)
options(echo=T)

# 모델 정보
model

# 시각화
png(width=800)
plot(model)

# 자가 테스트
df$NodeMean   = predict(model, df)
df$NodeNumber = predict(model, df, type="node")
head(df)
# 평균제곱오차(MSE)
mean((df$Ozone - predict(model))^2)

4 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}