본격적으로 머신러닝에 대하여 공부를 시작해보기로
마음을 먹고 '파이썬 머신러닝 완벽 가이드'라는 책을 공부하기 시작했습니다.
1장은 넘파이와 판다스에 대한 설명을 담고 있기 때문에 생략하고
2장부터 본격적으로 정리를 해보도록 하겠습니다.
책에서 나오는 예제코드를 실습해보고
중요한 개념들에 대해서 간단히 정리해보도록 하겠습니다.
새로운 여정을 설레는 마음으로 시작해보겠습니다.
1. 첫 번째 머신러닝 만들어 보기 - 붓꽃 품종 예측하기
이번 장에서는 의사결정 트리를 이용하여 사이킷런에서 제공하는 아주 기본적인 데이터인 붓꽃 품종 데이터셋을 예측해보도록 하겠습니다. 의사결정 트리에 대한 자세한 알고리즘 설명은 추후에 자세히 설명해보도록 하고 오늘은 실습에 집중하여 설명하겠습니다.
본격적으로 학습을 진행하기 전에 Iris 데이터가 어떻게 구성되어있는지, DataFrame으로 변환하여 확인해보도록 하겠습니다.
import sklearn
from sklearn.datasets import load_iris # 붓꽃 데이터 로드
from sklearn.tree import DecisionTreeClassifier # 의사결정 트리를 사용
from sklearn.model_selection import train_test_split #학습데이터와 테스트 데이터 분류
import pandas as pd
iris=load_iris()
#Iris의 피쳐 값들로만 구성된 numpy
iris_data=iris.data
#Iris의 레이블(label)들로만 구성된 numpy
iris_label=iris.target
# 시각적으로 편리하게 보기 위해 DataFrame으로 변환
iris_df=pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df["label"]=iris.target
iris_df.head(3)
label은 ['setosa' 'versicolor' 'virginica']에 각각 [0,1,2]로 부여하였습니다.
1.1 데이터 세트 분리
데이터를 학습하기 위해서 첫번째 수행해야 할 과정은 바로 학습 데이터와 테스트 데이터를 분리하는 것입니다. 학습 데이터는 말 그래도 모델을 학습하는데 사용하는 데이터이고 테스트 데이터는 모델이 제대로 데이터를 학습하였지 평가하는 데 사용되는 데이터입니다.
# 학습데이터와 테스트 데이터 분류
X_train, X_test, y_train, y_test=train_test_split(iris_data, iris_label, test_size=0.2, random_state=11)
데이터 분류는 train_test_split() 이라는 API를 사용하여 손쉽게 가능합니다.
1.2 학습 개체 생성 및 학습
이제 본격적으로 학습을 진행해보도록 하겠습니다. 학습 모델은 의사결정트리를 이용하도록 하겠습니다. 의사결정트리 객체 생성은 DecisionTreeClassifier()라는 API를 통해 손쉽게 구현이 가능합니다. 객체가 생성되면 DecisionTreeClassifier의 fit() 메소드를 통해 객체를 학습시키면 됩니다. 이렇게 단 두줄의 코드로 모델 학습이 가능한 거죠!!
# 의사결정트리 객체 생성 및 학습
dt_clf=DecisionTreeClassifier(random_state=11)
dt_clf.fit(X_train,y_train)
잠깐 추가적으로 fit() 메소드에 대하여 설명하도록 하겠습니다. 지도 학습은 뒤에서 다루겠지만 Classification(분류)와 Regression(회귀) 문제로 나뉘게 됩니다. 지금 우리가 실습하고 있는 예제는 분류 문제에 해당하겠죠? 이렇게 지도 학습에서 fit()은 모델을 학습시키는 역할을 합니다. 하지만 비지도 학습에서 fit()은 학습을 의미하는 것이 아니라 입력 데이터의 형태에 맞춰 데이터를 변환하는 역할을 합니다. 실질적인 작업은 transform()을 통해 수행합니다. 이는 비지도 학습을 다룰 때 더욱 구체적으로 다루도록 하겠습니다.
1.3 예측 수행 및 평가
그럼 이번엔 모델이 잘 학습되었는지 예측을 진행해보고 그 정확도를 확인해보도록 하겠습니다. 예측은 DecisionTreeClassifier의 predict() 메소드를 통해 손쉽게 가능합니다.
#예측 수행
pred =dt_clf.predict(X_test)
#정확도(예측값과 정답 비교)
from sklearn.metrics import accuracy_score
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
수행 결과 예측 정확도는 0.9333이 나왔습니다. 이렇게 간단한 코드로 붓꽃의 종류를 예측할 수 있다는 사실이 너무 신기하고 그만큼 API가 잘 구성되어있다는 것이 크게 느껴집니다.
이번 시간에는 간단하게 사이키런에서 주요하게 다루는
API를 바탕으로 분류 문제 맛보기를 진행해보았습니다.
오늘 실시한 단계와 같이 모든 머신러닝 문제는
데이터 처리, ML 알고리즘 학습/예측 수행, 모델 평가로 이루어집니다.
다음 시간에는 ML의 또 다른 중요한 개념인
교차검증에 대하여 학습해보는 시간을 갖도록 하겠습니다.
'파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
3.2 평가(F1 스코어, ROC와 AUC) (0) | 2021.11.21 |
---|---|
3.1 평가(정밀도/재현율) (0) | 2021.11.21 |
2.4 사이킷런으로 수행하는 타이타닉 생존자 예측 (0) | 2021.11.19 |
2.3 데이터 전처리 (0) | 2021.11.14 |
2.2 교차검증 (0) | 2021.11.14 |