# 1. 데이터를 로드합니다. concrete <- read.csv("c:\\data\\concrete.csv") head(concrete) # 맨 끝에 strength 가 종속변수 입니다.
nrow(concrete) # 1030 ncol(concrete) # 9
# 2. 결측치가 있는지 확인 colSums(is.na(concrete))
# 3. 데이터를 정규화 합니다. (0~1사이로 변경)
# 종속변수가 숫자형이어서 같이 정규화를 진행합니다.
normalize <- function(x) { return ( (x-min(x)) / ( max(x) - min(x) ) ) }
concrete_norm <- as.data.frame( lapply( concrete, normalize) ) head(concrete_norm) summary(concrete_norm)
# 4. 훈련 데이터와 테스트 데이터를 분리합니다.(8대2) library(caret) set.seed(1) k <- createDataPartition( concrete_norm$strength, p=0.8, list=F)
train_data <- concrete_norm[ k, ] test_data <- concrete_norm[ -k, ]
nrow(train_data) # 826 nrow(test_data) # 204
# 5. 모델을 설정 (p332) install.packages("neuralnet") library(neuralnet)
# 6. 훈련 데이터로 모델을 훈련시킵니다.
#6-1. 3층 모델 set.seed(1)
C1_values <- as.matrix(2*(1:5)) C2_values <- as.matrix(5*(1:6)) C3_values <- as.matrix(10*(1:5))
results_3C <- data.frame( C1=numeric(), C2=numeric(), C3=numeric(), accuracy=numeric())
for (C1 in C1_values) { for (C2 in C2_values) { for (C3 in C3_values) { concrete_model <- neuralnet( formula=strength ~ cement + slag + ash + water + superplastic + coarseagg + fineagg + age, data = train_data, hidden=c(C1,C2,C3), threshold = 0.02 ) result <- compute( concrete_model, test_data[ , 1:8] ) accuracy <- cor( result$net.result, test_data[ , 9] ) results_3C <- rbind( results_3C, data.frame(C1=C1, C2=C2, C3=C3, accuracy=accuracy)) print( paste( 'h1:' , C1, 'h2:',C2, 'h3:', C3, accuracy ) ) } } }
|