카테고리 없음

Deep Learning 예제 - 폐암 환자의 수술 후 생존율 예측

자다르 2021. 5. 22. 00:34

※ 이해와 학습을 위해 원본 코드의 추가/수정이 있을 수 있습니다.

 

폐암 환자의 수술 후 생존율 예측 (모두의 딥러닝 개정2판,조태호)

https://github.com/gilbutITbook/080228/blob/master/deeplearning/run_project/01_My_First_Deeplearning.ipynb

 

gilbutITbook/080228

모두의딥러닝(개정2판). Contribute to gilbutITbook/080228 development by creating an account on GitHub.

github.com

# 모두의 딥러닝 개정2판-조태호
# 폐암 환자의 수술 후 생존율 예측
# 기존의 폐암 환자 데이터를 학습하여 수술 후 생존 여부를 예측할 수 있는 모델 만들기

# Github: https://github.com/gilbutITbook/080228/blob/master/deeplearning/run_project/01_My_First_Deeplearning.ipynb
# 추가 참고-SAYNOT'S HOME : https://saynot.tistory.com/entry/Deep-Learning-%ED%8F%90%EC%95%94-%ED%99%98%EC%9E%90-%EC%88%98%EC%88%A0-%ED%9B%84-%EC%83%9D%EC%A1%B4-%EC%97%AC%EB%B6%80-%EC%98%88%EC%B8%A1%ED%95%B4%EB%B3%B4%EA%B8%B0

# 딥러닝에 필요한 케라스 라이브러리 가져오기
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Tensorflow 및 넘파이 라이브러리 가져오기
import tensorflow as tf
import numpy as np

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

# 수술 환자 데이터 가져오기

Data_set = np.loadtxt("https://raw.githubusercontent.com/gilbutITbook/080228/master/deeplearning/dataset/ThoraricSurgery.csv",delimiter=",")
print(Data_set)

# 데이터에는 470명의 환자 정보가 들어 있음
# 각 feature 정보는 종양 유형,폐활량,호흡 곤란 여부,고통 정도,기침,흡연,천식 여부 등 각각의 17가지 환자 상태 조사 기록함
# 클래스(마지막 18열)에는 수술 후 생존,사망 여부가 들어 있음 -> 1:생존,0:사망

# 환자의 기록과 수술 결과를 x와 y로 구분하여 저장
X = Data_set[:,0:17] # 모든 행(470행)의 첫 열(0열)부터 17열까지를 X에 저장
Y = Data_set[:,17] # 모든 행(470행)의 마지막 열(18열)만 Y에 저장

# 딥러닝 구조를 결정(모델을 설정하고 실행)
model = Sequential()
# 3개층(입력층,은닉층1개,출력층)으로 구성(입력층과 은닉층1개는 묶어서)
# 30개의 노드, 17개의 feature 사용. 은닉층에는 relu를, 출력층에는 sigmoid를 활성화 함수로 이용
# 그러므로,17개의 값을 받아서 은닉층의 30개 노드로 보낸다
model.add(Dense(30, input_dim=17, activation='relu'))
# 출력값을 하나로 정해서(생존 or 사망) 보여줘야 하므로 출력층의 노드수는 1개
model.add(Dense(1, activation='sigmoid'))

# 딥러닝 설정 및 실행
# 지정한 모델이 효과적으로 구현될 수 있게 여러가지 환경 설정
# 오차 함수는 mean_squared_error 사용
# metrics() 함수는 모델이 컴파일될 때 모델 수행 결과를 보이게 설정
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
# 모델 실행
# batch_size는 샘플을 한 번에 몇 개씩 처리할 지 정함.batch_size = 5는 5개씩 끊어서 집어 넣으라는 뜻
# batch_size가 너무 크면 학습 속도가 느려지고, 너무 작으면 각 실행값의 편차가 생겨서 전체 결과값이 불안정해질 수 있음
model.fit(X, Y, epochs=30, batch_size=5)

################## 위의 모델을 하나의 파일로 저장하고,이 모델을 이용해 테스트해보기
# model.save('Predict_Model.h5') -> 위 내용 하단에 추가

# 아래는 별도의 파일로
# 딥러닝에 필요한 케라스 함수 호출
#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)