# 1. 데이터 불러오기
concrete <- read.csv("c:\\data\\concrete.csv", header = T)
head(concrete)
# strength <- 종속변수
# 2. 데이터 살펴보기
colSums(is.na(concrete))
# 3. 훈련과 테스트 분리
library(caret)
set.seed(1)
train_num <- createDataPartition( concrete$strength, p=0.9, list = F)
train_data <- concrete[train_num, ]
test_data <- concrete[ -train_num, ]
nrow(train_data) # 930
nrow(test_data) # 100
# 4. 모델 생성
library(rpart)
library(rpart.plot)
library(Cubist)
library(randomForest)
model <- rpart( strength ~., data=train_data) # 회귀트리
model2 <- cubist(x=train_data[ ,-9],y=train_data[ , 9]) # 모델트리
model_rf <- randomForest(strength ~., data = train_data, ntree=500, mtry=3) #랜덤포레스트
rpart.plot( model, digits=3)
# 5. 모델 예측
result <- predict(model, test_data[ , -9])
result2 <- predict(model2, test_data[ ,-9])
result_rf <- predict(model_rf, test_data[ ,-9])
# 7. 모델 평가
cor(result, test_data[ , 9])
cor(result2, test_data[ , 9])
cor(result_rf, test_data[ ,9])
# 오차 구하기
mae <- function( actual, predicted) { mean( abs(actual - predicted))}
mae( test_data[,9],result)
mae( test_data[,9],result2)
mae( test_data[,9],result_rf)