2020/01/23 - [딥러닝] - 피마 인디언 당뇨병 예측하기 - 1편: 데이터 불러오기
1편에 이어서 간단하게 딥러닝 구조를 짜도록 하겠습니다.
딥러닝 구조 짜기
# 모델 설정
model = Sequential() # 2, 4,, 8, 16, 32, 64, 128, 256, 512, 1024 2진법 구조로 생각
model.add(Dense(16, input_dim=8, activation = 'relu')) #0부터 7까지였으니 8개 인풋 #히든 레이어
model.add(Dense(8, activation = 'relu')) #히든레이어
model.add(Dense(1, activation = 'sigmoid')) #이진분류 #아웃풋레이어
model은 앞서 말했던 Sequntial을 사용하여 빈 그릇을 만들어 줍니다.
거기에 인풋 데이터인 input_dim은 8개(X값)입니다.
activation은 활성화 함수로 'relu'를 사용해 주었습니다.
relu는 x값이 0보다 작다면 무조건 0으로, 0보다 큰 값이라면 해당하는 값으로 출력하게 해줍니다.
같이 출력된 'softplus'는 0을 만드는 기준을 완화시키는 것으로 0 또는 x를 출력하는 로그함수입니다.
이렇게 0또는 x로 positive part만 출력해주기 때문에 Vanishing(전달하다 사라짐)을 해결하고 은닉층에 사용합니다.
이는 기존의 sigmoid함수와 차이가 있죠.
sigmoid 함수는 0또는 1의 값만 출력하기 때문에 이진 분류 출력층에 사용합니다.
# 모델 컴파일
model.compile(loss = 'binary_crossentropy', optimizer ='adam', metrics=['accuracy'])
모델을 구축해주었으면 컴파일(엮다, 편집하다)을 해주어야 합니다.
모델이 효과적으로 시행되도록 환경을 설정해주는 것인데
차례대로 오차함수, 최적화함수, 메트릭스입니다.
오차함수는 다양한 것이 있는데 지금 사용한
'binary_crossentropy'의 경우 두 개의 클래스 중에서
예측할 때 사용합니다. 교차엔트로피 중에는 'categorical_crossentropy'도
있는데 이는 범주형 교차엔트로피(일반적인 분류)입니다.
이 외에는 평균 제곱 계열이 있으며 주로 회귀모형에 사용합니다.
평균 제곱 계열: {mean_squared_error, mean_absolute_error,
mean_absolute_percentage_error, mean_squared_logarithmic_error}
최적화 함수인 adam은 다른 최적화 함수에 비해 보폭 크기와 정확도가 높다고 합니다.
# 모델 실행
model.fit(X, Y, epochs=200, batch_size = 10)
모델을 적용해줍니다.
학습량은 200번만 돌려줍니다.
batch_size는 원 데이터의 개수(X)가 몇개씩 들어가게 해줄거니?
좀 더 쉽게 설명해주시는 분들은 200권의 문제집을 풀게 시킬건데 10권을 풀었을 때
한번에 답맞춰보게 한다. 대략 이런 식으로 설명해주셨어요.
근데 이게 약간은 개념이 다른 것 같기도 해요.
X(=768)가 몇개 단위로 끊어서 학습을 시킬거니? 여기선 10이니까
1번의 학습에 10개씩 77번을 수행하면 1권의 문제집을 풀었다.
라고 이해를 했습니다..
이렇게 학습 중인 모습이구요.
# 결과 출력 ( 정확도 )
print( 'Accuracy: %.4f' % (model.evaluate(X,Y)[1])) # 4f : 소수점 넷째 자리 까지
768/768 [==============================] - 0s 78us/step
Accuracy: 0.7891
model.evaluate(X,Y) # 앞이 로스, 뒤가 정확도
768/768 [==============================] - 0s 39us/step
[0.4516071043908596, 0.7890625]
앞의 print는 4번째 float(실수), 소수 넷째 자리까지 출력하란 얘기입니다.
model.evaluate(X,Y)[1]로 인덱스를 1을 준 이유는 1이 정확도고 0이 오차이기 때문입니다.
200번의 학습 결과 78.91%의 정확도가 나왔네요.
정말 비루한 결과인 것 같습니다... ㅋㅋㅋㅋ
하지만 아직 노드나 층도 얼마 쌓지 않았고, 다른 많은 기법들이 있지만 적용이 안되었습니다.
배움이 짧아 못한것..이지만 앞으로도 계속 공부해나가겠습니다.
중간에 ppt는 https://www.slideshare.net/yongho/ss-79607172
이 곳에서 퍼왔습니다. 하용호님이 올려주신 내용인데 쉽고 재밌게 설명해주셨습니다!
감사합니다~~
😁
'Data Scientist' 카테고리의 다른 글
기초통계 - 척도 (0) | 2020.02.07 |
---|---|
챗봇솔루션 closer를 이용한 나만의 챗봇 만들기! (0) | 2020.02.06 |
와인 종류 예측하기(체크포인트_모델저장, 그래프, Early stopping) (0) | 2020.01.25 |
폐암수술 환자 생존율 예측 (1) | 2020.01.24 |
피마 인디언 당뇨병 예측하기 - 1편: 데이터 불러오기 (0) | 2020.01.23 |