정구리의 우주정복

인공지능(3) - 폐암 생존률 분석해보기 본문

PYTHON/A.I

인공지능(3) - 폐암 생존률 분석해보기

Jungry_ 2020. 11. 12. 23:20
반응형

 

오늘은 폐암 생존률을 분석해볼것이다

 

2020/10/30 - [PYTHON/A.I] - 인공지능 (1) - 딥러닝 준비운동

 

인공지능 (1) - 딥러닝 준비운동

*환경은 주피터 노트북을 사용했습니다. '기존 데이터를 이용애 새로운 데이터의 결과를 예측하는 것' 머신러닝은 데이터 안에서 규칙을 발견하고 새로운 데이터에 적용해서 새로운 결과를 도

j-ungry.tistory.com

글에서도 간략하게 분석을 했었지만 이번엔 좀 더 구체적으로 분석해볼것이다. 


전체코드


 

#딥러닝에 필요한 케라스 함수
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

#필요한 라이브러리 불러옴
import numpy as np
import tensorflow as tf

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

#환자 데이터
Data_set = np.loadtxt("파일 경로",delimiter=',')

#환자의 기록과 수술 결과를 x 와 y 로 구분해서 저장
X = Data_set[:,0:17] #0-16
Y = Data_set[:,17] #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=100,batch_size=10)

 

딥러닝의 모델을 설정하고 구동하는 부분은 model 이라는 함수를 선언하며 시작이 된다.

model = Sequential() 로 시작되는 부분은 '딥러닝의 구조를 짜고 층을 설정하는 부분' 이다. 

model.compile() 은 위에서 정해진 모델을 컴퓨터가 알아들을 수 있도록 컴파일 하는 부분이다 

model.fit() 은 모델을 실제로 수행하는 부분이다.

 

1. 입력층 , 은닉층 , 출력층


딥러닝의 구조를 짜고 층을 설정하는 부분

model = Sequential()
model.add(Dense(30,input_dim = 17,activation = 'relu')) #은닉층
model.add(Dense(1, activation = 'sigmoid')) #출력층

Sequential() 함수를 model 로 선언하고 model.add() 라인을 추가하면 층이 만들어진다

코드에는 model.add 가 두개가 있으니까 두개의 층을 가진 모델이다.

맨 마지막 층은 결과를 출력하는 '출력층' 이 된다.

나머지는 '은닉층' 의 역할을 한다.

 

Dense() 함수를 살펴보자

이 함수를 통해 이 층에 몇개의 노드를 만들것인지 숫자로 써준다 . 30 이라고 되어있는 것은 이 층에 30개의 노드를 만들겠다는 것.

input_dim은 입력 데이터에서 몇개의 값을 가져올 것인지 정하는 것 kears 에서는  '첫번째 은닉층'에 input_dim을 넣어줌으로써 첫번째 Dense() 가 은닉층 + 입력층의 역할을 겸한다 . 우리가 가진 데이터에는 17개의 입력값이 있으므로 

데이터에서 17개의 값을 받아 은닉층이 30개 노드로 보낸다는 뜻

activation 부분에 우리가 원하는 활성화 함수를 적어주면 된다 . 여기서 앞서 배운 렐루를 사용

 

model.add(Dense(1,activation = 'sigmoid')) 이것은 출력층이다 . 출력값을 하나로 정해서 보여줘야하니까 노드수는 1개

활성화 함수는 sigmoid 를 사용했다.

 

2) 모델 컴파일


model.compile(loss='mean_squared_error',optimizer='adam',metrics=['accuracy'])

모델이 효과적으로 구현될 수 있게 여러가지 환경을 설정해주면서 컴파일 하는 부분

먼저 어떤 오차 함수를 사용할지 정해야함 여기서는 평균제곱오차함수 mean_squared_error 를 사용

!!평균제곱 오차 계열의 함수 (수렴까지 속도가 오래걸림) 외에도 교차 엔트로피 계열 함수(오차가 커지면 수렴속도 빨라지고 작아지면 속도 감소) 가 있다

이후엔 최적화 방법을 간단히 고를 수 있다. 

mertics () 는 모델이 컴파일 될 때 수행 결과를 나타내게끔 설정하는 부분! 정확도를 측정하기 위해 사용되는 테스트 샘플을 학습 과정에서 제외시킴으로써 과적합 문제를 방지하는 기능을 담고있음.

 

3) 모델 실행


model.fit(X,Y,epochs=100,batch_size=10)

모델을 정의 , 컴파일 이후 실행시킬 차례 !

주어진 폐암 수술 환자 생존여부 데이터는 470명의 환자에게서 17개의 정보를 정리한 것임 

생존 여부는 클래스 /  정보들은 속성 (예를들어 기저질환이 있는가 ? 이런것들) / 환자의 정보는 샘플 이라고 한다.

학습 프로세스가 모든 샘플에 대해 한번 실행되는것을 1epoch(에포크) 라고 한다. epoch = 100 이라는 것은 곧 각 샘플을 100번 사용될때까지 실행하는 것이다.

batch_size 는 각 샘플을 한번에 몇 개씩 처리할지 정하는 부분으로 batch_size = 10 은 470개의 샘플을 10개씩 끊어서 집어넣으라는 뜻 (너무 크면 학습 속도가 느려지고 작으면 각 실행 값의 편차가 생긴다)

반응형
Comments