< 회귀 트리 >
# 1. 데이터 생성
con <- read.csv("c:\\data\\concrete.csv", header=T)
head(con)
# 2. 결측치 확인
colSums( is.na(con) )
# 3. 훈련 데이터와 테스트 데이터 분리
library(caret)
set.seed(1)
train_num <- createDataPartition( con$strength, p=0.9, list=F )
train_data <- con[ train_num, ]
test_data <- con[ train_num, ]
nrow( train_data )
nrow( test_data )
# 4. 훈련 데이터로 모델 생성
install.packages("rpart")
library(rpart)
model <- rpart( strength ~ ., data=train_data )
model
# 5. 훈련 된 모델로 테스트 데이터 예측
result <- predict( model, test_data[ , -9 ] )
result
# 6. 모델 성능 평가
cor( result, test_data[ , 9] )
< 모델 트리 >
# 1. 모델 성능 향상 (회귀 트리 -> 모델 트리)
install.packages("Cubist")
library(Cubist)
model2 <- cubist( x=train_data[ , -9 ], y=train_data[ , 9 ])
model2
# 2. 모델 예측
result2 <- predict( model2, test_data[ , -9 ])
result2
# 3. 성능 확인
cor( result2, test_data[ , 9 ])
< 랜덤 포레스트 >
# 1. 랜덤 포레스트 모델 생성
library(randomForest)
set.seed(1)
model_rf <- randomForest( strength ~ ., data=train_data,
ntree=500, mtry=3 )
# 2. 테스트 데이터를 예측
result_rf <- predict ( model_rf, test_data[ , -9 ])
# 3. 모델 평가
cor( result_rf, test_data[ , 9])
< 오차 >
회귀 트리
mae <- function( actual, predicted ) { mean( abs( actural - predicted) ) }
mae( test_data[ , 9], result )
모델 트리
mae <- function( actual, predicted ) { mean( abs( actural - predicted) ) }
mae( test_data[ , 9], result2 )
랜덤 포레스트
mae <- function( actual, predicted ) { mean( abs( actural - predicted) ) }
mae( test_data[ , 9], result_rf )