| 회귀트리 모델 | 모델트리 모델 | 랜덤포레스트 모델 |
상관 계수 | 0.745415 | 0.9338277 | 0.969229 |
오차 | 8.979734 | 4.518774 | 3.194636 |
상관 계수도 랜덤포레스트 모델이 가장 높고, 오차도 가장 작다.
conc <- read.csv("concrete.csv", header=T)
set.seed(1)
train_num <- createDataPartition(conc$strength, p=0.9, list=F)
train_conc <- conc[train_num, ]
test_conc <- conc[-train_num, ]
nrow(train_conc) # 930개
nrow(test_conc) # 100개
# 회귀 트리 모델 생성
library(rpart)
model1 <- rpart( strength ~. , data=train_conc)
model1
result1 <- predict(model1, test_conc[ , -9])
result1
cor(result1, test_conc[ , 9]) # 상관계수 0.745415
# 모델 트리 모델 생성
# install.packages("Cubist")
library(Cubist)
set.seed(1)
model2 <- cubist(x=train_conc[ , -9], y=train_conc[ , 9])
model2
# 모델 예측
result2 <- predict(model2, test_conc[ , -9])
result2
# 성능 확인
cor(result2, test_conc[ , 9]) # 0.9338277 로 상승
# 랜덤 포레스트 모델 생성
library(randomForest)
set.seed(1)
model_rf <- randomForest(strength ~. , data=train_conc, ntree=800, mtry=5)
model_rf
result_rf <- predict(model_rf, test_conc[ , -9])
cor(result_rf, test_conc[ , 9]) # 상관 계수 0.969229
# 오차 계산하기
mae <- function(actual, predicted) {
mean(abs(actual - predicted))
}
# 회귀 트리 오차 = 8.979734
mae(test_conc[ , 9], result1)
# 모델 트리 오차 = 4.518774
mae(test_conc[ , 9], result2)
# 랜덤 포레스트 오차 = 3.194636
mae(test_conc[ , 9], result_rf)