CAFE

Re: 문제202. (오늘의 마지막 문제) for loop문을 더 사용해서 여러층으로 해도 되고..

작성자19기_김진경|작성시간24.07.24|조회수201 목록 댓글 0

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 산점도를 그리고싶은데 컬러맵이 말을 안들어요! ㅠㅠ 

ㅠㅠ

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼