본문 바로가기

딥러닝

모두의 딥러닝 (7) - 데이터 다루기

빅데이터는 머신러닝과 딥러닝을 통해 사람에 버금가는 판단과 지능을 가지게 했지만 빅데이터의 의미 자체로 데이터 양이 많다고 좋은 결과를 얻을 수 있는 건 아니다.

제일 중요한 건 그 데이터들이 필요한지에 중점을 둬야 한다. 즉 자기가 원하는 목적에 맞춰 데이터를 모았다면 이를 머신러닝, 딥러닝에서 사용할 수 있게 잘 정제된 데이터 형식으로 바꿔야 한다.

=> 머신러닝 프로젝트의 첫 단추 !

 

지금부터 딥러닝 실습 시작을 할텐데 모든 실습은 데이터를 분석, 조사하는 것부터 시작하므로 데이터 분석에 가장 많이 사용되는 파이썬 라이브러리인 panda, matplotlib 등을 사용해 데이터가 어떤 내용을 담고 있는지 확인하며 딥러닝의 핵심 기술을 구현해보자!

 

활용할 데이터 -> 피마 인디언 

- 피마 인디언은 1950년대까지 비만인 사람이 없는 민족이였는데 현재 60%가 당뇨, 80%가 비만으로 고통받고 있어 이 부족의 건강상태를 조사해서 당뇨병이 있는지 없는지를 판단해 다음에 어떤 환자가 왔을때 당뇨 여부를 미리 예측하기 위해 만든 데이터!

 

pd.read_csv를 통해 피마 인디언 데이터가 저장된 csv파일을 열고 각각 해당되는 8개의 속성(pregnant, ... , age)와 1개의 클래스(class)를 names을 통해 df라는 변수로 저장!

클래스는 예측 결과를 나타내는 정보(YES, NO)이고 속성은 예측 결과를 나타내는데 필요한 정보들이다.

 

df.head(5)를 통해 첫 데이터부터 5개까지 확인해보면 각각 속성, 클래스에 해당되는 데이터들이 보여진다. 하지만 많은 값을 단순히 나열하는 것은 큰 의미가 없으므로 한 번 더 가공!

이 프로젝트의 목적은 당뇨병 발병을 예측하는 것이므로 어느 속성가 당뇨병 발병과 관계가 있는지를 확인해야 한다. 예를 들어 임신 횟수와 당뇨병 발병 확률의 경우 다음과 같이 계산!

현재 이 데이터로 봤을 때는 임신 횟수와 당뇨병 발병이 밀접하게 연관되어 있음을 확인!  

이렇게 데이터 테이블로도 속성과 클래스의 관계 성격을 파악할 수 있고 그래프로 표현해도 가능하다.

matplotlib는 파이썬에서 그래프를 그릴 때 자주 사용되는 라이브러리이고 이를 기반으로 좀 더 정교한 그래프를 그리게끔 도와주는 seaborn 라이브러리를 사용해 각 속성끼리의 상관관계를 확인해보면

색깔이 어두울수록 상관관계의 힘이 약함!

여기서 가장 중요한 건 당연히 'class'항목이다. 왜냐하면 당뇨병 발병 예측을 하기 위해서는 해당 속성의 영향이 'class'에 얼마나 주는 지를 알아야 하기 때문! 그래프를 통해 plasma 속성(공복 혈당 농도)이 class 항목과 가장 상관관계가 높음!

즉, 이 속성이 당뇨병 결과를 알아차리는데 가장 중요한 역할을 한다는 걸 예측할 수 있음. 

plasma, class 항목만 따로 떼어 두 항목 간의 관계를 그래프로 그려보면

 

이제 케라스를 통해 당뇨병 예측을 하면

둘 중 하나(당뇨병이다, 아니다)를 결정하는 이항 분류(binary classification) 문제이므로 오차 함수는 binary_crossentropy를 사용하고 활성화 함수는 adam을 사용!

책에서는 예측 정확도가 77.86%이 나왔는데 실행할 때마다 다를 수 있음!

이번에는 class가 1(당뇨병), 0(아니다)인 예측 문제에 대해 배웠는데

다음 장에는 class가 두 개 이상인 예측 문제에 대해 배워보자!