[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[scikit-learn 라이브러리] 비만도 데이터 기반 분류 문제

inu 2020. 7. 17. 15:00

데이터 판단

import pandas as pd import matplotlib.pyplot as plt from sklearn.neighbors import KNeighborsClassifier from sklearn import metrics # 평가를 위한 모듈 data = pd.read_csv('bmi_500.csv', index_col='Label') print(data.head(3))
​​​​​​​​Gender Height Weight Label Obesity Male 174 96 Normal Male 189 87 Obesity Female 185 110 ...
  • 위와 같은 비만도 데이터가 있다. 각 데이터에는 성별과 키, 몸무게, 비만도 정보가 기록되어 있다.
  • 총 500개의 데이터가 존재한다.
  • 해당 데이터들을 기반으로 키와 몸무게를 받고 비만도를 맞추는 모델을 만들것이다.
# 각 비만도 등급별로 시각화 (분류가 가능한지 확인) def easy_scatter(label, color): ​​​​t = data.loc[label] ​​​​plt.scatter(t['Weight'], t['Height'], c = color, label = label) plt.figure(figsize=(5,5)) # 가로, 세로 크기 # t = data.loc['Extremely Weak'] # plt.scatter(t['Weight'], t['Height'], c = 'black', label = 'Extremely Weak') easy_scatter('Extremely Weak','black') easy_scatter('Weak','blue') easy_scatter('Normal','green') easy_scatter('Overweight','pink') easy_scatter('Obesity','purple') easy_scatter('Extreme Obesity','red') plt.legend(loc='upper right') plt.xlabel('Weight') plt.ylabel('Height') plt.show()

  • 시각화는 데이터에서 규칙을 좀 더 쉽게 파악할 수 있도록 도와준다.
  • 시각화는 한번에 끝내는 것이 아니라, 여러 테이블을 조정해가면서 어떻게 설정했을 때 규칙적인 흐름이 나타나는지 확인하면 좋다.
  • 비만도는 키와 무게정보가 필요하다. 보는 바와 같이 키와 무게에 대한 시각화를 수행한 결과 규칙적 흐름이 나타났다.

비만도 모델 제작 및 학습 (by KNN)

# 비만도 모델 학습 data = pd.read_csv('bmi_500.csv') X = data.loc[ : , 'Height':'Weight' ] y = data.loc[ : , 'Label'] print(X.shape) print(y.shape) X_train = X.iloc[:350, :] X_test = X.iloc[350:, :] y_train = y.iloc[:350] y_test = y.iloc[350:] bmi_model = KNeighborsClassifier(n_neighbors=10) bmi_model.fit(X_train,y_train) pre = bmi_model.predict(X_test) metrics.accuracy_score(pre, y_test)
  • 독립 변수 데이터인 'Height','Weight'는 x에 종속 변수 데이터인 'Label(비만도)'는 y에 저장하고 활용한다.
  • 350개를 기준으로 학습 데이터(train data)와 테스트 데이터(texst data)로 나눈다. 350로 모델을 학습시키고, 남은 150개로 테스트를 진행한다.
  • 모델은 KNN 알고리즘의 모델을 활용한다. X_train과 y_train으로 모델을 학습시킨다. (fit)
  • 그리고 X_test를 기반으로 예측을 진행한다.
  • accuracy_score로 정확도를 구해본다.
==결과=== 0.9333333333333333
  • 93퍼센트의 정확도를 나타냈다. 350개의 데이터의 학습으로 정확한 공식부여 없이 나머지 150개의 데이터에 대해 93퍼센트 정확도로 비만도 레이블을 일치시켰다.