https://conansjh20.tistory.com/80

 

Python, Machine Learning 기본/기초, scikit-learn (sklearn)

파이썬이 요즘 가장 핫한 이유 중 하나가 머신러닝입니다. 하지만 막상 머신러닝 하면 전문가의 영역으로 넘어가 버리고 개인적으로 쓰기엔 약간 장벽이 느껴집니다.(제가...) 그래서 머신 러닝

conansjh20.tistory.com

이전 포스트에 이어서 이번에는 scikit-learn에서 기본적으로 쓰이는 SVM의 각 함수 기능들에 대해서 알아보겠습니다.

SVM은 Support Vector Machine의 약자로 그냥 간단히 생각하면 이미 분류되어 있는 수많은 데이터를 학습 후에 아 이 데이터들은 이 기준으로 분류되어 있구나라고 스스로 기준을 정하고 이 후에 나온 데이터들도 그 기준에 맞춰 분류를 해준다는 것입니다.

 

앞서 말한 각 데이터들을 표로 나타내면 다음과 같이 간단히 표현됩니다.

 

TRAIN DATA (학습할 DATA) TEST DATA (TEST, 확인해보는 DATA)
TRAIN LABEL (학습할 결과 DATA) TEST DATA (TEST, 확인해보는 결과 DATA)
vs
PREDICT (실제 학습후 내주는 결과값)

결국 위의 검은색 부분을 모두 가지고 있는 상태에서 PREDICT 값을 학습하여 도출해 내고 TEST DATA와 비교하여 얼마나 잘 맞는지 검증을 거칩니다. 실제 검증의 단계를 거치지 않는다면 TEST DATA가 필요없을테고 하지만 정확도를 알 수 없으니 신뢰성이 떨어집니다.

 

그래서 일단 가지고 있는 DATASET의 일정부분은 TEST용으로 빼 놓고 검증하여 SVM의 정확도를 확인한 후 어느정도 신뢰도를 확보한 다음 예측을 진행하면 될 것 같습니다.

 

아래는 위키북스에서 출간한 '파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문' 이라는 책에서 나온 예제입니다.

직접 Random 으로 키와 몸무게의 랜덤 조합들로 데이터 셋을 만든 뒤 이미 BMI 값에 의해서 비만도를 측정하는 공식이 있지만 그러한 공식을 컴퓨터에게 가르쳐주지 않고 직접 데이터 셋을 학습한 뒤 비만도를 출력하게 하는 코딩입니다.

from sklearn import svm, metrics
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
# 키와 몸무게 데이터 읽어 들이기 --- (※1)
tbl = pd.read_csv("bmi.csv")
# 칼럼(열)을 자르고 정규화하기 --- (※2)
label = tbl["label"]
w = tbl["weight"] / 100 # 최대 100kg라고 가정
h = tbl["height"] / 200 # 최대 200cm라고 가정
wh = pd.concat([w, h], axis=1)
print(wh)
# 학습 전용 데이터와 테스트 전용 데이터로 나누기 --- (※3)
data_train, data_test, label_train, label_test = \
    train_test_split(wh, label)
# 데이터 학습하기 --- (※4)
clf = svm.SVC()
clf.fit(data_train, label_train)
# 데이터 예측하기 --- (※5)
predict = clf.predict(data_test)
# 결과 테스트하기 --- (※6)
ac_score = metrics.accuracy_score(label_test, predict)
cl_report = metrics.classification_report(label_test, predict)
print("정답률 =", ac_score)
print("리포트 =\n", cl_report)

결과는 다음과 같습니다.

정답률 = 0.9926
리포트 =
               precision    recall  f1-score   support

         fat       1.00      0.99      0.99      1899
      normal       0.98      0.99      0.99      1467
        thin       1.00      0.99      1.00      1634

    accuracy                           0.99      5000
   macro avg       0.99      0.99      0.99      5000
weighted avg       0.99      0.99      0.99      5000

코딩에서 학습 자체보다 주목할 점은 일단 csv 파일을 pandas로 불러들이고 이 데이터를 train_test_split(데이터, 레이블)로 실행시키면 자동으로 위에서 말한 TRAIN_DATA, TEST_DATA, TRAIN_LABEL, TEST_LABEL 네 개 값으로 저장된다는 점입니다. (앞선 포스트에서 계속 Random함수를 쓴다거나 일정 비율로 학습과 TEST DATA를 분류해 주는 작위적인 작업이 생략됩니다!)

 

앞서 포스팅에서도 언급했듯이 컴퓨터가 학습하기까지 밥 차려주는 것이 일입니다....

 

 

결국 BMI나 붓꽃 품종 알아보기같은 데이터 셋 분석을 나의 실생활에 어떻게 적용할 건지 생각해봐야 겠습니다.

+ Recent posts