[회고] 신입 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퍼센트 정확도로 비만도 레이블을 일치시켰다.
반응형