[Python] 인공신경망
programming/python

[Python] 인공신경망

30. 인공신경망

 

30.1 인공신경망의 개요

30.1.1 개요

30.1.1.1 인공지능의 한 분야

30.1.1.2 인간 두뇌의 생물학적 작동 형태를 모방하여 컴퓨터로 하여금 지적인 능력을 갖추게 하는 방법론

30.1.1.3 공학 부문에서 시작되어 재무 관리 등에 도입되기 시작

 

30.1.2 선형분류와 비선형분류

2) 추정 : 회귀식, 회귀계수

3) 검정 : 독립변수의 영향력, 모형의 적합성(R2) 등

 

 

3) 인공신경망의 구조

4) 학습결과의 예

 

30.2 기본 개념

30.2.1 처리요소(PE)

30.2.1.1 각자의 인자(neuron)를 의미

30.2.1.2 노드(node) 또는 유니트(unit)라고 함

30.2.2 층(layer)

30.2.2.1 보통 세 개의 층(three-layered)

30.2.2.2 은닉(hidden) 층

입력값과 출력값을 연결시켜 주는 매개변수값으로 채워지게 되는데 전체 신경망의 성공여부가 바로 이 은닉층의 역할에 달려 있다고 할 수 있음

30.2.3 가중치(weight)

30.2.3.1 i번째 PE와 j번째 PE와의 결합정도

30.2.3.2 Wij: 층과 층 사이의 연결이 i에서 j로 갈 때의 연결강도

 

30.4 인공신경망 추론과정

30.4.1 1단계: 초기 연결가중치 결정

연결가중치를 임의의 아주 작은 값(보통 -1 ~ 1 사이)으로 초기화

 

30.4.2 2단계: 전방향 계산

30.4.2.1 은닉층 및 출력층에서 입력값에 연결가중치를 곱하여 각 처리요소들의 출력값을 계산

30.4.2.2 전이함수를 사용하여 출력값 결정

 

30.4.3 3단계: 역방향 계산

30.4.3.1 출력층의 출력값과 목표출력값 사이의 오류치 계산

30.4.3.2 출력층과 은닉층 사이의 연결 가중치를 수정

30.4.3.3 은닉층과 입력층 사이의 연결 가중치를 수정

 

30.4.4 4단계: Epoch (2, 3 단계)의 반복

 

 

30.5 인공신경망 학습절차

30.5.1 1단계: 자료의 수집

정확하고 충분한 자료의 수집이 중요

 

30.5.2 2단계: 자료의 준비

30.5.2.1 비계량 자료의 계량화

30.5.2.2 Outlier 제거

30.5.2.3 학습용 자료와 검증용 자료의 정의 (training, test, validation set)

30.5.2.4 전처리과정

 

30.5.3 3단계: 신경망의 구조와 학습모수의 결정

30.5.3.1 은닉층의 수와 은닉노드의 수

30.5.3.1 학습률, 학습중지점 등

 

30.5.4 4단계: 학습과 검증

30.5.4.1 검증 방법의 결정

30.5.4.2 검증 결과의 해석

 

30.6 실습예제

%matplotlib inline
from matplotlib import pyplot as plt
import mglearn
import pandas as pd
import numpy as np
from matplotlib import font_manager, rc
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC

# 한글 처리를 위해 폰트 설정
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)

 

# pip install graphviz
# graphviz를 설치해야 함, 홈페이지에서 2.38 msi 버전 다운로드 및 설치
# http://www.graphviz.org/download/
# 환경변수에 path 추가 C:\Program Files (x86)\Graphviz2.38\bin
# 왼쪽 노드 : 입력 특성
# 연결선 : 학습된 계수
# 오른쪽 노드 : 입력의 가중치 합, 즉 출력
import os
os.environ["PATH"] += os.pathsep + 'c:/Program Files (x86)/Graphviz2.38/bin/'

mglearn.plots.plot_logistic_regression_graph()

 

# 은닉층 1개를 가지는 인공신경망 그래프
mglearn.plots.plot_single_hidden_layer_graph()

 

# 사이킷런 패키지의 인공신경망 함수 로딩
from sklearn.neural_network import MLPClassifier

# 임의의 데이터셋
from sklearn.datasets import make_moons

# noise 표준편차
x, y = make_moons(n_samples=100, noise=0.25, random_state=3)
print(x)
print(y)

 

# 테스트 데이터 사이즈 20%
# random_state : 매번 동일한 샘플이 테스트 데이터로 분리되도록 함
# stratify=y : 학습용 데이터와 테스트용 데이터에서 각각의 타겟값들이 동일한 ~?
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2~?)
print(len(X_train), len(X_test))

 

# 학습용 데이터로 인공신경망 학습
# 1bfgs 최적화 알고리즘의 종류
mlp = MLPClassifier(solver='1bfgs', random_state=0).fit(X_train, y_train??)
mglearn.