본문 바로가기
IT

[모두의 딥러닝] 딥러닝 공부 1일차 - 머신러닝이란? 기존 프로그래밍과 차이점 / 딥러닝 코드 분석

by 배애앰이 좋아 2021. 3. 21.
반응형

 

안녕하세요 오늘부터 기존에 하던 프로젝트 외 새로운 공부를 하고자 책 한권을 선정해 관련 책을 진행하면서 얻은 배움의 글귀와 프로젝트 내용을 정리하고자 합니다. 

 

요즘 AI가 뜨는 세상인만큼 관련된 책으로 "모두의 딥러닝"이라는 책을 선정하게 되었고 딥러닝에 대해 공부해볼까 합니다. 

 

머신러닝은 무엇을 할 수 있는가? 기존의 프로그래밍과 무엇이 다른가?

 

기존의 프로그래밍은 데이터를 입력해서 답을 구하는 데 초점이 맞추어져 있다면, 머신러닝은 데이터 안에서 규칙을 발견하고 그 규칙을 새로운 데이터에 적용해서 새로운 결과를 도출하는 데에서 부터 차이가 납니다. 즉, 머신러닝은 기존의 데이터를 이용해 아직 일어나지 않은 미지의 일을 예측해줍니다. 

 

여기서, 데이터를 입력되고 패턴이 분석되는 과정을 학습이라고 하며 학습을 통해서 답을 판가름할 수 있는 기준들을 세우게 됩니다. 그 후 새로운 데이터가 왔을 때, 이 새로운 데이터에 대해 답을 내려주는 것입니다. 

 

이러한 기준을 세우는 데 여러 방법이 있고 랜덤 포레스트, 서포트 벡터 머신 등 많은 방법 중 딥러닝은 수 많은 머신러닝 방법 가운데 가장 효과적인 방법입니다.

 

< 딥러닝 코드 분석 - 예제 : 폐암 수술 환자의 생존율 예측하기 >

 

1. 데이터 분석과 입력

 

from keras.models import Sequential
from keras.layers import Dense

import numpy
import tensorflow as tf

# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
seed = 0
numpy.random.seed(seed)
tf.compat.v1.set_random_seed(seed)

# 준비된 수술 환자 데이터를 불러들입니다.
Data_set = numpy.loadtxt("dataset/ThoraricSurgery.csv", delimiter=",")

# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장합니다.
X = Data_set[:,0:17]
Y = Data_set[:,17]

 

데이터를 불러와서 사용할 수 있게 하는 부분으로 현재 데이터는 아래와 같이 17개의 속성 (천식 여부, 등등) 마지막 18번의 생존 또는 사망 여부로 이루어져 있습니다. 딥러닝을 구동시키려면, 속성만 뽑아 데이터 셋을 만들고 클래스를 담는 데이터셋을 또 따로 만들어 줘야합니다. 

 

여기서 코를 보았을 때, 범위 정할 경우 : 앞의 숫자는 범위의 맨 첨을 뜻하고, : 뒤의 숫자는 이 숫자 '바로 앞'이 범위의 마지막입니다.

 

2. 딥러닝 실행

 

# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# 딥러닝을 실행합니다.
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=30, batch_size=10)

 

Sequential 함수는 딥러닝의 구조를 한 층 한 층 쉽게 쌓아올릴 수 있게 해주며 model.add() 함수를 사용해 필요한 층을 차례대로 추가할 수 있습니다. 해당 코드는 2층을 쌓아올린 것을 확인할 수 있습니다. 

 

Dense 함수는 조밀하게 모여있는 집합이란 뜻으로 각 층이 제각각 어떤 특성을 가질 수 있는지 옵션을 설정하는 역할입니다. 딥러닝의 구조와 층별 옵션을 정하고 나면 compile 함수를 이용해 실행 시킵니다.

 

여기서 각 키워드 뜻으로,

 

activation : 다음 층으로 어떻게 값을 넘길지 결정하는 부분입니다. 여기서는 가장 많이 사용하는 relu와 sigmoid 함수를 사용하게끔 지정하고 있습니다.

loss : 한 번 신경망이 실행될 때마다 오차 값을 추척하는 함수입니다.

optimizer : 오차를 어떻게 줄여 나갈지 정하는 함수입니다.

 

3. 결과 출력

 

# 결과를 출력합니다.
print("\n Accuracy: %.4f" % (model.evaluate(X, Y)[1]))

 

이 코드를 통해 출력되는 정확도는 학습 대상이 되는 기존 환자의 데이터 중에 일부를 랜덤하게 추출하여 새 환자로 가정하고 테스트 한 결과입니다.

 

결과를 확인해보면 잘 나온 것을 확인할 수 있습니다. 여기까지 모두의 딥러닝 책에서 주어지는 예제를 가지고 간단한 딥러닝 코딩의 순서 및 분석을 해보았습니다. 다음 글에서는 본격적인 방법 등을 공부해보겠습니다.

반응형

댓글