본문 바로가기
Programming/MachineLearning

딥러닝 실제 모델 만드는 방법 딥러닝 코드 구현해보기 이항 분류 keras 모듈 이용하기 (feat 인디언 당뇨병 문제)

by 하하호호 2021. 12. 15.
반응형

 

 

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=",")
= dataset[:, 0:8]
= 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%가 맞았다는 뜻이다.

 

더 읽을거리

 

 

딥러닝 머신러닝 차이, 머신러닝 딥러닝

머신러닝 딥러닝 차이 알파고가 대한민국을 초토화 시킨지 5년이 지났다. 실생활에도 인공지능이 많이 들어 왔고, 무수히 쌓여가는 데이터들을 기반으로 한 새로운 사업들이 계속 등장하고 있

incomeplus.tistory.com

 

 

딥러닝의 층 구조 딥러닝을 배워보자

더보기 딥러닝 기본 구조 신경망 딥러닝의 구조는 크게 3부분으로 나뉘어져 있다. 1. 입력 부분 2. 분석 부분 3. 출력 부분 마지막으로 모델을 만들고 난 후, 컴파일을 하는 부분으로 구성된다. 층

incomeplus.tistory.com

 

 

딥러닝 핵심 개념 신경망 10분만에 이해하기

인간의 신경망 작동 인간의 뇌는 약 1000억개의 뉴런으로 구성된다. 뉴런 사이에는 시냅스라는 연결부위가 존재한다. 신경 말단에서 자극을 받으면 시냅스에서 화학물질이 분비되고, 전위 변화

incomeplus.tistory.com

 

 

딥러닝 머신러닝 인공지능 경사 하강법 10분만에 이해하기 쫄지마 딥러닝

딥러닝 경사 하강법? 이전 글에서 살펴본 선형회귀에서 오차를 줄여나가면서 예측값을 수정한다고 했다. 선형회귀에서 a값과 b값을 조정하면서 오차를 줄여나가게 되는데, 만약 기울기 a를 너무

incomeplus.tistory.com

 

반응형

댓글