IT Log

1. 인공신경망(ANN) 본문

카테고리 없음

1. 인공신경망(ANN)

newly0513 2019. 4. 25. 14:47
728x90
반응형

인공신경망이란?

  • 기계학습과 인지과학에서 생물학의 신경망(동물의 중추신경계중 특히 뇌)에서 영감을 얻은 통계학적 학습 알고리즘
  • 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킴

 

 

학습방법

  • 지도 학습(Supervised Learning) : 훈련 데이터로부터 하나의함수를 유추해내기 위한 기계학습의 한 방법
  • 비 지도 학습(Unsupervised Learning) : 기계학습의 일종으로 데이터가 어떻게 구성되었는지를 알아내는 문제의 범주에 속한다. 입력값에 대한 목표치가 주어지지 않는다

 

인공신경망 구조

  1. 입력값 x가 3차원 벡터 h로 변환

  2. 3차원 벡터 h가 2차원 벡터 g로 변환
  3. 2차원 벡터 g가 최종적으로 출력값 f로 변환

 

구성요소

  • neuron : 위의 그림에서 동그라미들이 뉴런 ( input, hidden, output )
  • weight : 위의 그림에서 화살표로 그어진 선이 가중치(weight)
  • bias : 실제값에서 멀어진 척도 ( 데이터에 추가되는 일종의 '오차' )
  • variance : 예측된 값들이 떨어져 있는 정도
  • learning rule : 네트워크의 파라미터를 수정하는 규칙 or 알고리즘
  • activation function : 입력을 받아 활성, 비활성을 결정하는 함수

 

 

동작

  1. input에 값을 입력한다.
  2. 입력값(x)과 가중치(weight)를 곱한 값을 더한다.
  3. 편향치(bias)를 더한다.
  4. output에서 활성화함수에 따라 결과를 나타낸다.
  5. output에서 계산된 오류를 '오류역전파'에 의해서 역방향으로 보낸다.
  6. 가중치를 조정하여 다시 1~5를 진행한다.
  7. 정해진 주기가 종료되면 최종 output 출력

실습

데이터 파악하기

head(iris)

summary(iris)

plot(iris)​

산점도 행렬


표준화 작업

iris.scaled = cbind(scale(iris[-5]),iris[5])
head(iris.scaled)

scale 함수는 표준정규화를 해주는 함수로 문자형 데이터인 5열을 제외한 1:4열을 정규화 시키고
cbind를 통해 정규화된 값과 제외했던 Species열을 다시 합쳐준다.
summary(iris.scaled)

scale 하기 전과 비교하면 Min과 Max 차이가 많이 줄어듬

apply(iris.scaled[-5],2,sd)

apply 함수는 apply(array, margin, function)으로 해석하자면,
iris.scaled에서 5번째 열을 제외하고 세로방향으로 표준편차가 어떻게 되는지 나타내준다.
위와 같은 결과를 보면 정규화가 잘 된것을 알수 있다.
set.seed(1111)
samp = c(sample(1:50,35), sample(51:100,35),sample(101:150, 35))
data.tr = iris.scaled[samp,]
data.test = iris.scaled[-samp,]
summary(data.tr)
summary(data.test)

set.seed는 랜던값을 고정시켜주기 위함으로 sample로 뽑아낸 랜던값을 일정하게 실험하려면 랜던값을 고정시켜주는 것이 좋다.
sample함수는 sample(범위, 개수)로 sample(1:50, 35)는 1에서 50사이에서 35개에 랜덤값을 뽑는 것이다
data.tr과 data.test에 각각 samp값을 따로 적용해서 35:15로 나누었다.

인공신경망 학습

library(nnet)
model.nnet = nnet(Species~., data=data.tr, size=3)

nnet은 R에 있는 딥러닝 관련 패키지 중 하나이고, ~ 앞에 오는것이 종속변수 ~ 뒤가 독립변수이고, .은 종속변수를 제외한 전부를 의미한다. data는 nnet함수에 활용할 데이터이고, size는 히든레이아웃의 숫자를 지정

※ 종속변수 : 두 변수 중 한 변수의 값이 결정되는 데 따라 그 값이 결정되는 다른 변수

   독립변수 : 함수 관계에서, 다른 변수의 변화와는 관계없이 독립적으로 변화할 수 있는 변수

summary(model.nnet)

앞에 4-3-3은 입력층-은닉층-출력층의 갯수를 의미한다. 
names(model.nnet)

  • model.nnet의 컬럼명
model.nnet$wts

  • model.nnet의 컬럼중 wts라는 열값 확인

학습용 데이터 예측해보기

predicted = predict(model.nnet, data.tr, type = "class")
actual = data.tr$Species
table(actual, predicted)

예측값이 1개 빗나간 것을 알 수 있다.

예측값과 실제값이 얼마나 맞는지 확인하는 과정으로
predicted에는 predict함수를 통해 nnet함수를 통해 data.tr을 학습한 model.nnet의 결과와 data.tr를 보고 예측한 결과 값과 실제 data.tr의 Species값이 담긴 actual 값에 빈도를 table함수로 비교한다.
mean(predicted ==actual)

최종적으로 실제값과 예측값이 99% 일치하는 것을 볼 수 있다. 학습용 데이터이기에 잘 나올수 있었다.

TEST

predicted = predict(model.nnet, data.test, type = "class")
actual = data.test$Species
table(actual, predicted)
mean(predicted ==actual)

data.tr로 학습시킨 model.nnet으로 data.test값을 예측(predicted)하고 실제(actual)값을 비교(table)해 본 결과
setosa와 wersicolor 는 정확히 예측했지만 virginica에서 1개를 예측실패하여, 최종결과 97% 일치

※ 위의 결과와 비교하자면 위의 결과는 학습된 자료를 예측한 것이기 때문에 잘 나오는 것이 당연하나 아래의 결과는 다른 자료를 예측한대에 비해서 %는 비교적 낮지만 잘 예측했다고 볼 수 있다.

728x90
반응형
Comments