본문 바로가기

텐서플로우

폐암 수술 후 생존 여부 예측

이번에 해볼 프로젝트는 17가지의 폐암 발병 확률을 높여주는 것들을 csv로 만들어 놓은 것을 이용해 생존확률을 예측해 볼 것이다.

목차

  1. 기본 설정
  2. 트레이닝
  3. 테스팅
  4. 리뷰

1.기본 설정

우선 필자는 colab을 사용하였고 git clone을 해준다.

!git clone https://github.com/gilbutITbook/006958

그리고 코드입력.

# 딥러닝에 필요한 케라스 함수 호출
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("/content/006958/deeplearning/dataset/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')

주의할 점은 load txt안에 있는 경로를 코랩에 있는 파일로 찾아야 하는데, 아직 코애기(?)인 나로써 파일 위치를 찾는데 어려움이 있었다. 필자는 코랩 파일의 content 부분에 클론이 되었고 Thoraricsurgery.csv파일 찾아 경로복사 후 붙여넣기 하였다. 컴파일 했을 때 accuracy가 0.855까지 올라간 것을 확인할 수 있었다.

직접 눈으로 봐야 속이 풀리니 데이터셋, information, result값을 보도록 하자.

print(Dataset)

print("lnformation:{}".format(X))
print("Result:{}".format(Y))

이제 테스트를 해봐야한다. 필자는 직접 엑셀에 test.csv파일을 만들고,

위와같은 형식으로 만들었다. 그리고 코랩에 파일업로드를 하였다. 경로확인 필수.

그리고 테스팅코드이다

# 딥러닝에 필요한 케라스 함수 호출
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(X)
classes_y=np.argmax(Y,axis=1)

print('Predict : {}'.format (classes_y))

이로써 우리는 또한번 딥러닝에 반발자국 더 다가설 수 있게 되었다.

리뷰.

Y = model.predict_classes(X)를 쓰려고 했는데 오류가 나서 스택 오버플로우에 검색을 해보니 아래와 같이 바꾸라고해서 내 입맛대로 바꿧지만 결과가 살짝 이상하게 나왔다. 

predict_x=model.predict(X_test) classes_x=np.argmax(predict_x,axis=1)

해결방법을 아는 개발자 분들은 댓글 부탁드립니다^,^