티스토리 뷰

반응형

이번 글은 딥러닝을 이용하여 분류문제를 해결하는 아주 기초적인 코딩을 설명한다. 이 코딩으로부터 모델을 점점 개선한다.

입력데이터는 인디언 당뇨병에 관한 자료를 이용하는데 전체적으로 9개 변수로 구성된다. 처음 부터 8개 변수는 당뇨병과 직접 또는 간접적으로 관련이 있다.
피마 인디언 당뇨병 데이터의 독립변수 8개는 아래와 같이 구성되어있다.

  • Pregnancies: 임신 횟수
  • Glucose: 포도당 부하 검사 수치
  • BloodPressure: 혈압(mm Hg)
  • SkinThickness: 팔 삼두근 뒤쪽의 피하지방 측정값(mm)
  • Insulin: 혈청 인슐린(mu U/ml)
  • BMI: 체질량지수(체중(kg)/키(m))^2
  • DiabetesPedigreeFunction: 당뇨 내력 가중치 값
  • Age: 나이


종속변수 1개는 맨 마지막 9번째 변수로 당뇨병 여부를 나타내는데 0과 1로 구분한다. 1은 당뇨병에 해당한다.
Outcome: 클래스 결정 값(0 또는 1)


그럼 딥러닝 관련된 패키지를 불러온다.

import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.lapyers import Dense

1. 이제 자료를 불러온다.

df= pd.read_csv('pima_indians_diabetes.csv')

2. 입력변수 X와 종속변수 y로 데이터를 분리한다.

X = df.iloc[:, 0:-1]
y = df.iloc[:, -1]

3. 딥러닝 모델을 정의하는데 keras 패키지의 sequential 모델을 사용한다. 내부적으로 2개의 은닉층을 두고 각 12개, 8개 노드로 구성하고 맨 마지막 출력층은 1개 노드로 구성한다.

model = Sequential()
model.add(Dense(12, input_shape=(8,), activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

4. 모델을 최적화하도록 한다. 오차는 바이너리 엔트로피로 확인하고 성능 평가척도는 정확도를 이용한다.

model.compile(optimiser='adam', loss='binary_crossentropy', metrics=['accuracy'])

5. 모델구조를 확인한다.
model.summary()

6. 모델을 학습시킨다. 반복학습 150번을 수행하는데 전체 데이터를 10개씩 쪼개서 학습시킨다.
history= model.fit(X, y, epochs=150, batch_size=10)

7. 모델 성능을 평가한다. 결과는 오차와 정확도가 출력된다.
loss, accuracy = model.evaluate(X, y)

반응형
댓글