Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

류동균의 R 공부방입니다.

뉴럴 네트워크(Neural Network) 본문

Machine Learning

뉴럴 네트워크(Neural Network)

R쟁이 2019. 9. 24. 19:34

뉴럴 네트워크에 대해 공부해 보려고 한다. 뉴럴 네트워크란 인간의 뇌를 모방하여 만든

 

인공지능 신경망 이라고 할 수 있다.

 

뉴럴 네트워크의 역사에 대해 한번 살펴보자.

 

1943년 신경샐리학자 워런 맥컬록과 수학자 월터 피츠에 의해서 소개 되었음.

 

1957년 프랑크 로젠 블라트에 의해 퍼셉트론 이라는 선형 분류를 수행할 수 있는 뉴럴 네트워크를 제안

 

1969년 단순 선형 분류를 제외한 XOR 분류 조차 불가능하다는 수학적 증명제시. 

 

(이후 인공 신경망은 장기간 외면  받고 침체기를 겪음)

 

1986년 다층 퍼셉트론, 역전파 알고리즘 등장. 기존의 퍼셉트론의 한계를 극복 하기 위해 히든 레이어를 추가 함으로써 XOR 문제 해결 가능

 

뉴럴 네트워크는 위와 같이 43년 처음 소개됬고 장기간 침체기를 겪었다. 은닉층(Hidden Layer)

 

을 추가함으로써 그 가치가 매우 높아졌다고 볼 수 있다.

 

뉴럴 네트워크는 다음과 같이 입력층, 은닉층, 출력층으로 구분되어 있다.

 

 

뉴럴 네트워크의 목표는 입력층의 데이터를 가중치를 통해 학습하여 출력층의 값에 가깝게

 

만드는 것이라고 할 수 있다.

 

뉴럴 네트워크의 강점은 은닉층에서 입력값이 조합이 되기 때문에 비선형적인 문제를 해결할

 

수 있다는 점이다.

 

뉴럴 네트워크의 구조에 대해 좀더 알아보려면 다음의 웹사이트를 참고하기 바란다.

 

뉴럴네트워크

 

Simple forward pass

 

ml4a.github.io

역전파데모

 

역전파 데모

$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{RGB}{219, 68, 55} \definecolor{dinput}{RGB}{244, 180, 0} \definecolor{doutput}{RGB}{15, 157, 88} \definecolor{dweight}{RGB}{102, 0, 255} $$ 역전파 알고리즘 역전파 알고리즘은 대규모 신경망을 빠르게 교육하는 데 필수적입니다. 이 문서는

google-developers.appspot.com

 

그럼 뉴럴 네트워크를 이용해 분석모델을 만들어보자.

 

패키지 로드

#필요한 패키지
library(nnet)
library(caret)

 

분석에 데이터한 데이터를 Traning/Test set으로 나누어주자. 비율은 7:3 으로 한다.

# data 생성
df <- iris

# 데이터 탐색
plot(iris)
str(iris)
summary(iris)
sum(is.na(iris))

# train/test sampling
training_sampling <- sort(sample(1:nrow(df), nrow(df) * 0.7 ))
test_sampling <- setdiff(1:nrow(df),training_sampling)

# traning_set, test_set
training_set <- df[training_sampling,]
test_set <- df[test_sampling,]

 

모델생성

nnet_m <- nnet(Species ~. , data = training_set, size = 3)

모델의 생성할때 size라는 옵션을 설정하게 되는데 이는 은닉층의 개수를 의미한다.

 

모델을 test_set에 적용

nnet_p <- predict(nnet_m, newdata = test_set, type = "class")


정확도확인

#Neural Network 모델의 경우 factor가 아니기때문에 confusionMatrix를 확인하기 위해 factor로 바꾸어준다.
nnet_p <- as.factor(nnet_p)

#ConfusionMatrix
confusionMatrix(nnet_p, test_set$Species)

 

training_set으로 Neural Network 모델을 만들고 test_set에 적용시켜본 결과 이번 모델은

 

training_set과 test_set이 운이좋게 적절하게 나뉘었는지 100퍼센트의 신뢰도를 보여줬다.

 

하지만 100퍼센트란 마냥 좋아하기만 할 수치는 아니다.

 

이세상에는 100퍼센트라는 것은 있기 힘들다. 특히나 데이터 분석에서 또한 중요한 분야 특히

 

사람의 생명과 연관이 되어있는 의료분야에서는 모델의 신뢰도가 운좋게 100퍼센트가 나올지라

 

도 좋아할 것이 아니라 여러개의 트레이닝 데이터를 통해 여러번의 모델을 만들어 100퍼센트를

 

만드는 것이 아닌 정확한 신뢰수준을 찾아내는 것이 중요하다고 생각한다.