도순씨의 코딩일지

딥러닝 :: 폐암 수술 환자의 생존률 예측하기 본문

𝐂𝐎𝐌𝐏𝐔𝐓𝐄𝐑 𝐒𝐂𝐈𝐄𝐍𝐂𝐄/𝐃𝐄𝐄𝐏 𝐋𝐄𝐀𝐑𝐍𝐈𝐍𝐆

딥러닝 :: 폐암 수술 환자의 생존률 예측하기

도순씨 2020. 8. 4. 22:22

폐암 수술 환자의 생존율을 예측하는 모델을 간단하게 실행해보도록 하자.

 

@ 코드

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로 구분하여 저장
= Data_set[:,0:17]
= 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), 길벗

https://keras.io/ko/

 

csv 파일은 github.com/gilbutITbook/006958 여기서 다운로드 가능합니다😀

 

 

Comments