정구리의 우주정복
인공지능(3) - 폐암 생존률 분석해보기 본문
오늘은 폐암 생존률을 분석해볼것이다
2020/10/30 - [PYTHON/A.I] - 인공지능 (1) - 딥러닝 준비운동
글에서도 간략하게 분석을 했었지만 이번엔 좀 더 구체적으로 분석해볼것이다.
전체코드
#딥러닝에 필요한 케라스 함수
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개씩 끊어서 집어넣으라는 뜻 (너무 크면 학습 속도가 느려지고 작으면 각 실행 값의 편차가 생긴다)
'PYTHON > A.I' 카테고리의 다른 글
인공지능 (5) - 자연어 처리 1. 토큰화 (0) | 2020.11.16 |
---|---|
인공지능(4) - 피마 인디언 당뇨병 예측 (0) | 2020.11.15 |
인공지능 (2) - 딥러닝을 위한 기초 수학 (0) | 2020.10.30 |
인공지능 (1) - 딥러닝 준비운동 (0) | 2020.10.30 |
[tensorflow] 텐서의 형 변환 (cast) , 슬라이싱 , concat , stack (0) | 2020.09.23 |