도순씨의 코딩일지
딥러닝 :: 폐암 수술 환자의 생존률 예측하기 본문
폐암 수술 환자의 생존율을 예측하는 모델을 간단하게 실행해보도록 하자.
@ 코드
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
32
33
34
|
# 필요한 keras 함수 import
from keras.models import Sequential # 레이어를 선형으로 구성하여 연결
from keras.layers import Dense # 보통의 밀집 연결 신경망 레이어
# 필요한 라이브러리 import
import numpy
import tensorflow as tf
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분
seed = 0
numpy.random.seed(seed)
tf.random.set_seed(seed)
# 준비된 수술 환자 데이터를 로드
Data_set = numpy.loadtxt("/Users/hansubin/Downloads/006958-master/deeplearning/dataset/ThoraricSurgery.csv", delimiter = ",")
# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장
X = Data_set[:,0:17]
Y = Data_set[:, 17]
# 딥러닝 구조를 결정(모델을 설정하고 실행)
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)
print("\n Accuracy : %.4f" %(model.evaluate(X, Y)[1]))
|
cs |
@ 실행 결과
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
|
(중략)
10/470 [..............................] - ETA: 0s - loss: 0.3000 - accuracy: 0.7000
380/470 [=======================>......] - ETA: 0s - loss: 0.1425 - accuracy: 0.8553
470/470 [==============================] - 0s 142us/step - loss: 0.1473 - accuracy: 0.8511
Epoch 28/30
10/470 [..............................] - ETA: 0s - loss: 0.2000 - accuracy: 0.8000
390/470 [=======================>......] - ETA: 0s - loss: 0.1424 - accuracy: 0.8538
470/470 [==============================] - 0s 143us/step - loss: 0.1472 - accuracy: 0.8489
Epoch 29/30
10/470 [..............................] - ETA: 0s - loss: 0.1992 - accuracy: 0.8000
330/470 [====================>.........] - ETA: 0s - loss: 0.1568 - accuracy: 0.8394
470/470 [==============================] - 0s 161us/step - loss: 0.1471 - accuracy: 0.8489
Epoch 30/30
10/470 [..............................] - ETA: 0s - loss: 5.7367e-07 - accuracy: 1.0000
380/470 [=======================>......] - ETA: 0s - loss: 0.1423 - accuracy: 0.8579
470/470 [==============================] - 0s 135us/step - loss: 0.1462 - accuracy: 0.8532
32/470 [=>............................] - ETA: 1s
470/470 [==============================] - 0s 213us/step
Accuracy : 0.8511
|
cs |
맨 아래 줄에는 정확도가 표시되는데, 0.8511라는 것은 85.11%의 확률로 정답을 맞출 수 있다는 듯이다.
import와 같은 부분은 파이썬 기초 내용에서 충분히 유추할 수 있으므로 딥러닝 실행 과정만 자세하게 살펴보도록 하자
맨 처음에는 케라스(keras)와 텐서플로(TensorFlow)의 개념이 매우 헷갈렸다. 이 글을 보시는 분들 중에서도 처음 딥러닝을 접하시는 분이라면 충분히 그럴 수 있다고 생각한다😥
케라스가 구동되려면 텐서플로가 깔여 있어야 한다. 케라스와 텐서플로는 각각 설치해주어야 한다.
너무나도 방법론적인 이야기라서 이해가 안 될 수도 있다. 예를 들어 딥러닝 프로젝트를 '여행'이라고 비유한다면 텐서플로는 목적지까지 빠르게 이동시켜주는 '비행기'에 해당하고, 케라스는 비행기의 이륙 및 정확한 지점까지의 도착을 책임지는 '파일럿'에 비유할 수 있다.
그렇다면 Sequential 함수와 Dense 함수는 무엇일까? 앞서 keras.io 문서를 이용하여 간략하게 주석을 달아놓긴 했지만 깊은 이해는 할 수 없었다. (간략하게 이 함수가 어떤 기능을 하는구나! 라고 유추할 수 있는 정도랄까...)
Sequential 함수는 딥러닝의 구조를 한 층 한 층 쉽게 쌓아올릴 수 있게 해준다.
1
2
3
|
model = Sequential()
model.add(Dense(30, input_dim = 17, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
|
cs |
이 부분에서 유추할 수 있겠지만 폐암 수술 후 생존율을 계산하는 코드에서는 add를 통하여 두 개의 층을 쌓아 올렸다.
두 층을 쌓아 올리기 위해서 model에는 먼저 Sequential() 을 입력해주었다.
model.add()안에는 Dense() 함수가 포함되어 있다. Dense는 각 층이 제각각 어떤 특성을 가질지 옵션을 설정하는 역할을 한다.
1
2
3
|
# 딥러닝 실행
model.compile(loss = 'mean_squared_error', optimizer = 'adam', metrics = ['accuracy'])
model.fit(X, Y, epochs = 30, batch_size = 10)
|
cs |
loss는 한 번 신경값이 실행될 때마다 오차값을 추적하는 함수이고, optimizer는 오차를 어떻게 줄여나갈지 정하는 함수이다.
* 출처
조태호, 모두의 딥러닝(2017), 길벗
csv 파일은 github.com/gilbutITbook/006958 여기서 다운로드 가능합니다😀
'𝐂𝐎𝐌𝐏𝐔𝐓𝐄𝐑 𝐒𝐂𝐈𝐄𝐍𝐂𝐄 > 𝐃𝐄𝐄𝐏 𝐋𝐄𝐀𝐑𝐍𝐈𝐍𝐆' 카테고리의 다른 글
딥러닝 :: 모델 설계하기, 교차 엔트로피, 모델 실행하기 (0) | 2020.08.06 |
---|---|
딥러닝 :: 오차 역전파, 활성화 함수, 고급 경사 하강법 (0) | 2020.08.06 |
딥러닝 :: [논문분석] 김정미 외 1인, Word2vec을 활용한 RNN기반의 문서 분류에 관한 연구 (0) | 2020.08.06 |
딥러닝 :: 로지스틱 회귀, 퍼셉트론, 다층 퍼셉트론 (0) | 2020.08.06 |
딥러닝 :: 선형회귀, 최소 제곱법, 평균 제곱근 오차 (0) | 2020.08.04 |