오늘은 공부한 것을 토대로 직접 테스트 데이터도 추가하여
폐암 환자의 수술 후 생존 여부를 예측해볼 것이다.
*추후 모델과 기초 개념에 대해서도 다룰 예정이다.
0. 목표
머신러닝은 '알고리즘을 이용하여 데이터를 분석하고, 학습하여 이러한 내용을 기반으로 판단, 예측하는 기술' 이다.
딥러닝도 머신러닝 범주에 속해있으며 우린 이를 이용해 미래의 일을 예측해보고자 한다.
이런 예측하는 기술은 어디에 사용할 수 있을까?
본 포스팅에서는 '폐암 환자의 수술 후 생존 여부'을 예측해보고자 한다.
- 기존의 폐암 환자 데이터를 학습하여 수술 후 생존 여부를 예측할 수 있는 '모델'을 만들고
- 가상의 환자 데이터(미래)를 만들어 수술 후 생존 여부를 예측해 볼 것이다.
1. 폐암 환자 데이터
AI에서 가장 중요한 부분이자 기반이 되야 하는 것이 '좋은 데이터'이다.
폐함 환자 생존률 데이터는 '모두의 딥러닝' 예제의 [ThoraricSurgery.csv]를 사용하였고,
직접 [test.csv]를 만들어 가상의 환자를 만들어 보았다.
* ThoraricSurgery.csv : 구글에 치면 다운받을 수 있는 깃허브 주소가 나온다.
[ThoraricSurgery.csv] 데이터의 구조를 살펴보자.
- 데이터에는 470명의 환자 정보가 들어있다.
- 각 '속성' 정보는 [종양 유형, 폐활량, 기침, 흡연 여부 등] 각각의 17개의 환자의 정보가 담겨있다.
- '클래스'에는 [수술 후 생존, 사망 여부] 정보가 담겨 있다.
[test.csv] 데이터 구조도 살펴보자.
- 글쓴이가 만든 가상의 환자 정보이다.
- 각 '속성' 정보는 [종양 유형, 폐활량, 기침, 흡연 여부 등] 위와 같이 17개의 환자의 정보가 담겨있다.
- '클래스'인 [수술 후 생존, 사망 여부] 정보는 우리가 모델을 통해 예측해볼 것이다!
2. Training
# 딥러닝에 필요한 케라스 함수 호출
from keras.models import Sequential, load_model
from keras.layers import Dense
# 필요 라이브러리 호출
import numpy as np
import tensorflow as tf
# 실행 시마다 같은 결과값 도출을 위한 시드 설정
np.random.seed(0)
tf.random.set_seed(0)
# csv 파일을 읽어 ','기준으로 나눠 Dataset에 불러오기
Dataset = np.loadtxt("ThoraricSurgery.csv", delimiter=",")
# 환자 정보는 0-16번(17개)까지이므로 해당 부분까지 X에 담기
X = Dataset[:, 0:17]
# 수술 후 결과는 마지막 17번은 클래스로 Y에 담기
Y = Dataset[:, 17]
# 딥러닝 모델 구조 설정(3개층, 속성이 17개 input 값, relu와 sigmoid 활성화 함수 이용)
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(15, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 딥러닝 실행(오차함수는 평균제곱오차, 최적화함수는 adam 이용)
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=30, batch_size=5)
# 만들어진 모델 저장
model.save('Predict_Model.h5')
중간에 Dataset을 출력한 사진이다.
다음과 같이 470명 환자의 17가지 정보가 들어간 이중 리스트가 만들어졌다.
중간 X와 Y를 출력한 사진이다.
X엔 환자 정보가, Y엔 마지막 컬럼인 생존여부부분이 들어간 것을 볼 수 있다.
모델의 정확도이다.
5개 단위(batch-size)로 30번(epochs) 학습시켜 85.74% 정확도를 가진 모델을 만들었다.
그리고 다음과 같이 잘 저장되었다.
3. Testing
# 딥러닝에 필요한 케라스 함수 호출
from keras.models import load_model
from keras.utils import np_utils
# 필요 라이브러리 호출
import numpy as np
# csv 파일을 읽어 ','기준으로 나눠 Dataset에 불러오기
Dataset = np.loadtxt("test.csv", delimiter=",")
# 환자 정보는 0-16번(17개)까지이므로 해당 부분까지 X에 담기
X = Dataset[:, 0:17]
# 수술 후 결과 정보인 예측값 변수 초기화
Y = []
# 모델 불러오기
model = load_model('Predict_Model.h5')
# X 값에 대한 predict_classes 함수 실행결과 Y에 저장
Y = model.predict_classes(X)
print('Predict : ', Y)
중간 Dataset 변수를 출력한 사진이다.
3명의 가상 환자 정보가 잘 들어간 것을 알 수 있다.
마지막 예측 결과 사진이다.
3명의 가상 환자에 대해 다음과 같은 결과를 도출했다.
- 1번 가상 환자 : 수술 후 사망 예상
- 2번 가상 환자 : 수술 후 사망 예상
- 3번 가상 환자 : 수술 후 생존 예상
이라는 결과를 내놓았다.
4. 신뢰성
여기서 한가지 밝힐 사실이 있다.
이 가상 환자 세명은 사실 [ThoraricSurgery.csv] 데이터의 환자의 정보를 참고하여 만들었다.
위 두명은 수술 후 사망했던 환자 정보와 유사한 속성 정보를 집어넣었고
마지막 한명은 수술 후 생존했던 환자 정보와 유사하게 속성 정보를 집어넣었다.
보시다시피 결과는 예상과 같았다.
이러한 결과는 모델에 대한 정확도를 보여주는 또 한가지의 지표가 되었다.
AI를 이용하면 다음과 같이 기존 데이터를 이용해 미래의 일을 예측해볼 수 있다.
하지만 그만큼 어려운 분야인 만큼 많은 공부를 필요로 한다.
계속해서 공부해나가다 보면 우리 모두 좋은 성과를 도출해낼 수 있을 것이다.
'Programming > AI' 카테고리의 다른 글
[Deep Learning] MNIST 손글씨 숫자 이미지 인식해보기 (5) | 2020.09.03 |
---|---|
[Deep Learning] 아나콘다, 텐서플로, 주피터노트북 설치 및 환경세팅 (0) | 2020.08.27 |
[AI] 인공지능과 머신러닝, 그리고 딥러닝 - 순한맛 (0) | 2020.06.13 |