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.