wine.csv
0.01MB

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 분류를 위한 nnet 신경망 패키지 설치
install.packages("nnet")
library(nnet)
 
# 이원교차표를 보기 위함
library(gmodels)
 
wine <- read.csv("c:/data/wine.csv",header=T,stringsAsFactors = T)
 
# 확인
head(wine)
str(wine)
 
# scale 함수를 사용한 정규화 (평균 0, 표존편차 1)
wine.scale <- cbind(wine[1], scale(wine[-1]))
summary(wine.scale)
 
size <- nrow(wine.scale) # 178
 
# shuffle
set.seed(100)
index <- c(sample(1:size, size * 0.7))
 
# train(70%) / test(30%)
train <- wine.scale[index, ]
test <- wine.scale[-index, ]
 
# 분류를 위한 신경망 모델 생성
model.nnet2 <- nnet(Type~., data = train, size = 2, decay = 5e-04, maxit = 200)
#                                         number of units in the hidden layer.
#                                                   parameter for weight decay. Default 0. (가중치 감소)
#                                                                  maximum number of iterations. Default 100 (반복)
 
# 분류결과 확인
predicted <- predict(model.nnet2, test, type = "class")
predicted
 
# 모델 평가를 위한 Confusion Matrix
# 참고 : https://yamalab.tistory.com/50
actual <- test$Type
model.confusion.matrix <- table(actual, predicted)
 
# 모델 평가
<- CrossTable(model.confusion.matrix)
x$prop.tbl[1]+x$prop.tbl[5]+x$prop.tbl[9# 0.9444444
 
cs

 

 

 

 

concrete.csv
0.04MB

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 신경망을 이용하여 콘크리트 강도 예측하기
concrete <- read.csv('c:/data/concrete.csv')
 
# 예측하고자 하는 결과가 정규분포를 띄는지 확인한다.
# 만약 정규분포를 띈다면 예측 결과가 좋게 나올 수 있다는 것을 알 수 있다.
hist(concrete$strength)
 
# 결측치 확인
colSums(is.na(concrete))
 
# 정규화 함수
normalize <- function(x) {
  return ( (x-min(x)) / (max(x) - min(x) ) )
}
 
# 데이터 정규화하기
concrete_norm <- as.data.frame(lapply(concrete,normalize))
 
# 0~1 사이로 데이터가 바꼈는지 확인
summary(concrete_norm$strength)
# 기존 데이터와 비교
summary(concrete$strength)
 
# train(75%) / test(27%)
nrow(concrete_norm) * 0.75 # 772.5
concrete_train <- concrete_norm[1:773, ]
concrete_test <- concrete_norm[774:1030, ]
 
# 신경망 패키지 설치
install.packages("neuralnet")
library(neuralnet)
 
# 모델 생성
concrete_model <- neuralnet(formula=strength ~ cement + slag + ash +water +superplastic + coarseagg + fineagg + age,
                            data =concrete_train)
 
# 신경망 모델 시각화
plot(concrete_model)
 
# 예측
model_results <- compute(concrete_model, concrete_test[1:8])
predicted_strength <- model_results$net.result
 
# 상관관계 확인
cor(predicted_strength, concrete_test$strength) # 0.806285848
cs

 

 

시각화

 

 

 

 

 

 

모델 성능 개선

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 모델 성능 개선 은닉층(hidden) 생성
concrete_model2 <- neuralnet(formula=strength ~ cement + slag + ash +
                               water +superplastic + coarseagg + fineagg + age,
                             data =concrete_train , hidden=c(5,2))
 
# 은닉층을 설정해 생성한 신경망 모델 시각화
plot(concrete_model2)
 
# 예측
model_results <- compute(concrete_model2, concrete_test[1:8])
predicted_strength2 <- model_results$net.result
 
# 상관관계 확인
cor(predicted_strength2, concrete_test$strength)
cs

 

hidden=c(5,2) 첫번째 은닉층 5개 / 두번째 은닉층 2개

 

 

+ Recent posts