[Deep Learning] 폐암 수술 환자의 생존율 예측하기

천승주·2022년 9월 18일
0

폐암 수술 환자의 생존율 예측하기

중환자를 전문으로 수술하는 어느 병원의 의사가 수많은 환자를 수술해 오던 중 다음과 같은 질문을 던졌다.

"혹시 수술하기 전에 수술 후의 생존율을 수치로 예측할 방법이 없을까?"

방법이 있다. 그동안 집도한 수술 환자의 수술 전 상태와 수술 후의 생존율을 정리해 놓은 데이터를 머신러닝 알고리즘에 넣는 것이다. 기존 환자의 데이터는 머신러닝에 입력되는 순간 그 패턴과 규칙이 분석된다. 그리고 분석 결과를 새로운 환자의 데이터와 비교하여 생존 가능성이 몇 퍼센트인지 알려준다. 이것이 머신러닝이 하는 일이다.

학습과정을 다시 말하면 깨끗한 좌표 평면에 기존 환자들을 하나씩 배치하는 과정이라고 할 수 있다. 예를 들어 환자들의 분포를 그래프 위에 펼쳐 놓고 이 분포도 위에 생존과 사망 여부를 구분짓는 경계를 그려넣는다.

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

import numpy
import tensorflow as tf

# 실행할 때마다 같은 결과를 출력하기 위해 설정
seed = 0;
numpy.random.seed(seed)
tf.random.set_seed(seed)


# 준비된 수술 환자 데이터를 불러들임
Data_set = numpy.loadtxt("../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]))

이를 실행하면 다음과 같은 값이 출력된다.

Epoch 1/30
47/47 [==============================] - 1s 2ms/step - loss: 0.7348 - accuracy: 0.2617
Epoch 2/30
47/47 [==============================] - 0s 2ms/step - loss: 0.2090 - accuracy: 0.7851
Epoch 3/30
.
.
.
Epoch 29/30
47/47 [==============================] - 0s 2ms/step - loss: 0.1489 - accuracy: 0.8511
Epoch 30/30
47/47 [==============================] - 0s 2ms/step - loss: 0.1489 - accuracy: 0.8511
15/15 [==============================] - 0s 2ms/step - loss: 0.1489 - accuracy: 0.8511

 Accuracy: 0.8511

Process finished with exit code 0
  • 정확도(Accuracy)가 1.0이면 예측 정확도가 100%라는 뜻
  • 정확도가 0.8511이라는 것은 이 스크립트를 통해 구현된 딥러닝의 예측 정확도가 85.11%라는 뜻
  • 기존 폐암 환자의 데이터를 딥러닝에 집어넣고 학습시킨 결과 새로운 환자의 수술 후 생존을 10번중 8~9번은 맞힐 수 있다는 뜻이다.

코드분석

앞의 코드는 세 부분으로 나뉜다.

  • 데이터 분석과 입력
import numpy


Data_set = numpy.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=",")


X = Data_set[:,0:17]
Y = Data_set[:,17]
  • 데이터 실행
from keras.models import Sequential
from keras.layers import Dense


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]))

References

0개의 댓글