중환자를 전문으로 수술하는 어느 병원의 의사가 수많은 환자를 수술해 오던 중 다음과 같은 질문을 던졌다.
"혹시 수술하기 전에 수술 후의 생존율을 수치로 예측할 방법이 없을까?"
방법이 있다. 그동안 집도한 수술 환자의 수술 전 상태와 수술 후의 생존율을 정리해 놓은 데이터를 머신러닝 알고리즘에 넣는 것이다. 기존 환자의 데이터는 머신러닝에 입력되는 순간 그 패턴과 규칙이 분석된다. 그리고 분석 결과를 새로운 환자의 데이터와 비교하여 생존 가능성이 몇 퍼센트인지 알려준다. 이것이 머신러닝이 하는 일이다.
학습과정을 다시 말하면 깨끗한 좌표 평면에 기존 환자들을 하나씩 배치하는 과정이라고 할 수 있다. 예를 들어 환자들의 분포를 그래프 위에 펼쳐 놓고 이 분포도 위에 생존과 사망 여부를 구분짓는 경계를 그려넣는다.
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
앞의 코드는 세 부분으로 나뉜다.
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]))