본문 바로가기

Programming/[Machine Learning]

[Python] 머신 러닝 지도 학습을 이용한 간단한 비만도 평가 모델 생성, 예측

 

머신러닝 알고리즘

지도 학습(Supervised Learning) :

훈련하기 위한 데이터가 존재할 때 사용할 수 있는 기계학습(Machine Learning)의 한 방법

훈련 데이터(training data)는 입력(input)과 정답(label, target)으로 구성

 

사용할 지도학습 알고리즘

K-최근접 이웃 알고리즘(K-Nearest Neighbors algorithm, KNN) 

새로운 데이터가 주어졌을 때, 근처 k 개의 데이터 중에서 특성(feature)이 비슷한 범주로 새로운 데이터를 분류하는 방법

특성과 k 값에 따라 new data를 weak에 분류할지, overweight에 분류할지 결정

사용할 데이터 확인

bmi_500.csv

import pandas as pd

df = pd.read_csv('bmi_500.csv', index_col='Label')
print(df.head())

print(df.index.unique())

총 4개의 컬럼과 6종류의 레이블이 있음을 확인

import matplotlib.pyplot as plt

def easy_scatter(label, color):
    t = df.loc[label]
    plt.scatter(t['Weight'], t['Height'], color=color, label=label)

easy_scatter('Extreme Obesity', 'black')
easy_scatter('Weak', 'blue')
easy_scatter('Obesity', 'pink')
easy_scatter('Overweight', 'red')
easy_scatter('Extremely Weak', 'yellow')
easy_scatter('Normal', 'green')

plt.legend()
plt.show()

 

scatter plot을 이용한 전체 데이터 시각화

데이터 불러오기

사용할 라이브러리와 데이터를 로드

# import modules
import pandas as pd
from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier

# load data
df = pd.read_csv('bmi_500.csv')

X = df.loc[:, 'Height' : 'Weight']
y = df.loc[:, 'Label']

print(X.shape) # (500, 2)
print(y.shape) # (500, )

훈련 셋과 평가 셋 분리

input value( X, 독립변수)는 2dimension 임을 확인

**패키지 사용 시

from sklearn.model_selection import train_test_split
# train test split
X_train = X.iloc[:350, :]
X_test = X.iloc[350:,:]

y_train = y.iloc[:350]
y_test = y.iloc[350:]

모델 훈련 및 정확도 평가

model이라는 knn 분류 클래스의 객체를 생성 

데이터 학습 후 accuracy 측정

# model train
model = KNeighborsClassifier(n_neighbors=10)
model.fit(X_train, y_train)

# accuracy
y_pred = model.predict(X_test)
res = metrics.accuracy_score(y_test, y_pred) # acc : 93 %

새로운 데이터 예측

키 185cm 몸무게 43kg 인 사람과 100cm, 20kg 인 사람의
비만도 예측

model.predict([[185, 43], [100, 20]])

# ['Extremely Weak' 'Normal']

'Programming > [Machine Learning]' 카테고리의 다른 글

[Python] 머신 러닝 간단한 xor 예제  (0) 2021.07.20