1. 데이터 : 피마 인디언 당뇨병 발생 유무
2. 문제형태 : 이항분류(Binary Classification)
3. 코드 구현
keras 모듈을 호출한다.
tf.compat.v1.disable_eager_execution()는
tensorflow 버전 호환 문제를 해결한다.
1
2
3
4
5
|
from keras.models import Sequential
from keras.layers import Dense
import numpy
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
|
cs |
seed값은 랜덤 테이블 중에서 사용할 테이블을 지정하는
것이다. 넘파이 라이브러리를 사용하면서 tensorflow 기반
딥러닝을 구현하면 일정한 값을 얻기 위해 넘파이와
tensorflow에 동일한 랜덤 테이블을 적용해야 한다.
1
2
3
4
|
# seed값 생성
seed=0
numpy.random.seed(seed)
tf.compat.v1.set_random_seed(seed)
|
cs |
피마 인디언들의 당뇨병 데이터셋을 불러온다.
넘파이의 loadtxt() 함수를 사용한다.
8개의 속성과 1개의 클래스로 구성된 데이터셋으로,
X값과 Y값을 분리해준다.
1
2
3
4
|
# 데이터 로드
dataset = numpy.loadtxt('./dataset/pima-indians-diabetes.csv', delimiter=",")
X = dataset[:, 0:8]
Y = dataset[:, 8]
|
cs |
딥러닝은 퍼셉트론으로 구성된다.
입력층과 출력층 사이에 수많은 은닉층이
포함되어 있다.
keras에서 모델을 생성하기 위해서는
Sequential()함수로 모델을 만들면,
새로운 층이 생성된다.
각 층은 Dense()함수로 구조를 결정한다.
첫번째 층은 12개의 노드를 가지고,
8개의 입력값을 넣는다. 다음층으로 보내는
활성화 함수로는 렐루(ReLU)를 사용한다.
출력층에서 활성화 함수는 sigmoid 함수를
사용한다. 결과값이 당뇨병에 걸렸냐 아니냐를
판별하는 binary 값이기 때문이다.
1
2
3
4
5
|
# 모델의 설정
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
|
cs |
keras 모델 컴파일에는 3가지 인자가 들어간다.
먼저 오차값을 추적할 수 있는 오차 함수를
입력한다. 오차 함수는 여러가지가 있고, 여기서는
binary_crossentropy 함수를 사용한다.
활성화 함수는 adam을 사용한다. 활성화 함수는
고급 경사 하강법중 한가지 알고리즘이다. 속도를
올리면서 최적의 변수조정으로 미분의 0값을
찾아낸다.
metrics() 함수는 모델이 컴파일 될 때 수행 결과를
표시하게 하는 설정이다. 과적합문제를 방지하도록
테스트 샘플을 학습과정에서 제외시킨다.
keras에서 사용하는 오차 함수의 종류는 크게 6가지다.
1
2
3
4
|
# 모델 컴파일
model.compile(loss="binary_crossentropy",
optimizer="adam",
metrics=['accuracy'])
|
cs |
모델을 실행하는 함수는 fit() 함수다.
입력값과 출력값을 지정하고,
epocs를 2000으로 설정한다.
epocs(에포크)는 전체 샘플 데이터가
돌아가는 수를 의미한다. 예를 들어
400개의 샘플데이터가 모두 학습이 진행
되면, 1에포크가 되는 것이다.
batch_size는 10을 준다. batch_size는
한번에 몇개의 데이터씩 넣을 건지 설정
하는 부분이다. 한번에 많은 데이터를 입력
하면 데이터 처리 시간이 늘어나기 때문에,
주의해서 입력해야 한다.
1
2
3
|
# 모델 실행
model.fit(X,Y,epochs=2000, batch_size=10)
print("\n Accuracy : %.4f" % (model.evaluate(X,Y)[1]))
|
cs |
실제 출력값을 뽑아보면 정확도 82.03%가
나온 것을 확인 할 수 있다. 이는 샘플데이터를
가지고 당뇨병에 걸렸는지 예측을 했고,
82%가 맞았다는 뜻이다.
더 읽을거리
'Programming > MachineLearning' 카테고리의 다른 글
딥러닝 데이터가 부족할 때 해결하는 방법 K겹 교차 검증이란? (feat 광석 돌 구분 예제 사용) (0) | 2021.12.16 |
---|---|
딥러닝 과적합 문제 해결하기(feat 광석 판별하기) (0) | 2021.12.16 |
딥러닝 다중 분류 모델 Multi Classfication 설계하기 (feat 아이리스 품종 분류하는 모델 설계하기) (0) | 2021.12.16 |
딥러닝 오차 역전파 10분만에 이해하기 (0) | 2021.12.15 |
딥러닝 핵심 개념 신경망 10분만에 이해하기 (0) | 2021.12.15 |
딥러닝 로지스틱 회귀 알고리즘 10분만에 이해하기 (0) | 2021.12.15 |
댓글