본문 바로가기

DATA

DATA.ANN(Artificial Neural Network)

안녕하세요 쌍심지입니다.

제가 기존에 워드프레스 블로그를 했었는데 개인적 사정으로 티스토리로 이사중입니다.

생각보다 번거로움이 많네요...

 

 

각설하고 주제로 돌아가겠습니다.

오늘의 포스팅은 ANN, Artifitial Neural Network, 인공신경망 기법입니다.

^ 우선 ANN이 속한 블랙박스 기법에 대한 간략한 설명입니다.

블랙박스는 소프트웨어 내부에 특허가 있는 알고리즘을 숨기거나,

주요한 모델이 복잡한 수학에 바탕을 둬서 결과를 해석하기 힘들 떄 사용합니다.

 

 

^ 인공신경망은 이름에서 유추할 수 있듯이 실제 신경, 즉 뉴런에서 착안한 방법입니다.

수식을 자세히 보면, 각각의 INPUT 값에 대하여 가중치가 존재하고,

가중치에 곱해진 입력 값들의 합을 뉴런이 정보를 처리하는 내부 작동인 활성함수를 거쳐 출력하는 것입니다.

이렇게 하나하나의 노드들이 모여 인공신경망을 이룹니다.

 

 

^ 앞서 언급한 활성 함수입니다.

필요에 따라 다양하게 사용할 수 있습니다. 

계단함수는 생물학으로 보았을 때 가장 유사하나, 인공신경망에서는 거의 사용되진 않습니다.

가장 일반적인 방법은 시그모이드 활성함수입니다. 

그래프에서 볼 수 있듯이 시그모이드 함수는 미분이 가능하고 입력 범위 전체에 걸쳐 도함수를 계산할 수 있습니다.

 

^ 층은 입력 노드와 출력 노드로 구성되어 있습니다.

입력 노드는 데이터를 가공하지 않은 신호를 직접 받고,  각각 가중치를 부여합니다(w1~w3)

출력 노드는 활성 함수를 가진 노드입니다.

상기 슬라이드의 경우에는 하나의 입력 노드, 하나의 출력 ㄴ드가 있기에 하나의 층을 가지고 있고

이는 단층망이라고 부릅니다.

 

^ 더 복잡한 구조가 필요한 경우에는 층을 추가하는 방법으로 쉽게 망을 만들 수 있습니다.

한 개 이상의 층이 있기에 다중망이라고 불리고,

출력 노드에 도달하기 전 입력 노드에서 보낸 신호를 처리하는 하나 이상의 은닉층(hidden layer)를 추가합니다.

전방향 망은 각 층의 개수와 노드의 개수를 변경해 다중 결과를 동시에 모델화하거나, 다중 은닉층을 적용할 수도 있습니다.

재귀망은 loop를 통해 지연을 줌으로서 사건 순서를 이해하는 능력을 가집니다.

이런 재귀망은 증권시장 예측이나, 음성 이해, 날씨 예보 등에서 사용됩니다.

신경망은 각 층의 노드 개수에 따라 복잡성이 다양해집니다.

큰 망은 훈련이 느리고 비용이 많이 들고, 지나치게 많은 노드는 과적합의 위험이 있습니다.

그래서 적당한 개수의 노드를 사용하는 것이 현명한 전략입니다.

 

복붙하기 유용하시라고 코드도 첨부합니다.

근데 티스토리 코드블록은 R언어를 지원 안하네요..?

복붙만 하실 수 있다면 무관하겠죠 ㅎㅎ 

concrete <- read.csv("concrete.csv")

str(concrete)

normalize <- function(x) {

  return((x - min(x)) / (max(x) - min(x)))

}

concrete_norm <- as.data.frame(lapply(concrete, normalize))

summary(concrete_norm$strength)

summary(concrete$strength)

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)

 



concrete_model2 <- neuralnet(strength ~ cement + slag +

                               ash + water + superplastic +

                               coarseagg + fineagg + age,

                               data = concrete_train, hidden = 5)

plot(concrete_model2)

model_results2 <- compute(concrete_model2, concrete_test[1:8])

predicted_strength2 <- model_results2$net.result

cor(predicted_strength2, concrete_test$strength)

 

'DATA' 카테고리의 다른 글

01.Python Numpy  (0) 2020.01.07
DATA.게임 회사 데이터 직무 취업 수기 - 자기소개 편  (1) 2019.09.01