3층 뉴런수 8, 15, 10일 때 정확도 96.53%
# 1. 데이터를 로드합니다.
concrete <- read.csv("c:\\data\\concrete.csv")
head(concrete)
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:4))
C3_values <- as.matrix(10*(1:3))
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 ) )
}
}
}
threshold = 0.02:
cbind(1, pred) %*% weights[[num_hidden_layers + 1]]에서 다음과 같은 에러가 발생했습니다: 수치 또는 복소수형태의 행렬 혹은 벡터 인자가 요구됩니다 추가정보: 경고메시지(들): Algorithm did not converge in 1 of 1 repetition(s) within the stepmax.
오류 때문에 기본값 0.01에서 수정했습니다.
# 9. 모델 성능 평가
library(doBy)
orderBy(~ accuracy, results_3C)
> orderBy(~ accuracy, results_3C)
C1 C2 C3 accuracy
(생략)
34 6 20 10 0.9537813
35 6 20 20 0.9576098
32 6 15 20 0.9611268
43 8 15 10 0.9653210
> results_3C[order(results_3C$accuracy, decreasing=T)]
`[.data.frame`(results_3C, order(results_3C$accuracy, decreasing = T))에서 다음과 같은 에러가 발생했습니다:
정의하지 않은 열들이 선택되었습니다
데이터 프레임 벡터의 문제같은데 수정할 방법을 몰라서 다음에 해보겠습니다 ㅠㅠ 흑흑
시각화도 나중에 추가할게요!!! 그래디언트 3D 산점도를 그리고싶은데 컬러맵이 말을 안들어요! ㅠㅠ