[파이썬/머신러닝] 사이킷런 기초 다지기 - 1
[파이썬/머신러닝] 사이킷런 기초 다지기
사이킷런(Scikit-learn)
- 파이썬 머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리
1. 붓꽃 품종 예측하기 예제
붓꽃 데이터 세트로 붓꽃 품종을 분류(Classification)하는 머신러닝 모델 만들기.
붓꽃데이터 세트는 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피처(Feature)를 기반으로 꽃의 품종을 예측하기 위한 것.
분류는 대표적인 지도학습 방법의 하나 입니다. 지도학습은 학습을 위한 다양한 피처와 분류 결정값인 레이블 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측합니다.
즉 지도학습은 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식입니다. 이때 학습을 위해 주어진 데이터 세트를 학습 데이터세트, 머신러닝 모델의 예측 성능을 평가하기 위해 별도로 주어진 데이터 세트를 테스트 데이터 세트로 지칭 합니다.
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_data = iris.data
iris_label = iris.target
print('iris target 값 : ', iris_label)
print('iris target 명 : ', iris.target_names)
iris_df = pd.DataFrame(data = iris_data, columns = iris.feature_names)
iris_df['label'] = iris.target
iris_df.head(3)
load_iris() 함수를 통해 붓꽃데이터 세트를 로딩ㅎ한 후, 피처들과 데이터 갑시 어떻게 구성돼 있는지 확인하기 위해 DataFrame 으로 변경해서 보여줍니다. 그리고 마지막 컬럼에 label 값을 넣어 피처 값의 결과값 형태로 DataFrame에 반영해 줍니다.
#학습데이터와 ㅌ스트 데이터 세트로 분리
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를 제공합니다.
첫번째 파라미터인 iris_data는 피처 데이터 세트, 두번째 파라미터 iris_label은 레이블 데이터 세트 입니다. test_size =0.2 부분은 전체 데이터 세트 중 테스트 데이터 세트 비율 입니다.
train_test_split()은 학습 용 피처 데이터 세트를 X_train으로, 테스트용 피처 데이터 세트를 X_test로, 학습용 레이블 세트를 y_train으로, 테스트용 레이블 데이터 세트로 y_test로 반환합니다.
학습용 데이터 확호 완료 했으니 이 데이터를 기반으로 머신러닝 분류 알고리즘의 하나인 의사결정 트리를 이용해 학습과 예측을 수행합니다.
#학습데이터 세트로 학습(Train)수행
df_clf = DecisionTreeClassifier(random_state =11)
#학습수행
df_clf.fit(X_train, y_train)
사이킷런의 의사결정트리 클래스인 DecisionTreeClassifier를 객체로 생성합니다.
생성된 객채의 fit 메서드에 피처 데이터 속성과 결정값 데이터 세트를 입력해 호출하면 학습을 수행합니다.
#테스트 데이터 세트로 예측(Predict) 수행
pred = df_clf.predict(X_test)
pred
학습된 DecisionTreeClassifier 객체를 이용해 예측을 수행합니다. 이 때 예측은 반드시 학습 데이터가 아닌 다른 데이터를 이용해야 하며, 일반적으로 테스트 데이터 세트를 이용합니다. DecisionTreeClassifier 객체의 predict() 메서드에 테스트용 피처데이터 세트를 입력해 호출하면 학습된 모델 기반에서 테스트 데이터 세트에 대한 예측값을 반환하게 됩니다.
from sklearn.metrics import accuracy_score
print("예측 정확도 : {0:.4f}".format(accuracy_score(y_test,pred)))
정확도 예측을 위해 accuracy_score()함수를 제공합니다. 해당 함수 첫번째 파라미터로 실제 레이블 데이터 세트, 두번째 파라미터로 예측 레이블 데이터 세트를 입력하면 됩니다.
붓꽃데이터 세트로 분류를 예측한 프로세스 정리
1. 데이터 세트 분리 : 데이터를 학습 데이터와 테스트 데이터로 분리합니다.
2. 모델 학습 : 학습 데이터를 기반으로 ML ㅇㄹ고리즘을 적용해 모델을 학습시킵니다.
3. 예측 수행 : 학습된 ML 모델을 이용해 테스트 데이터의 분류(붓꽃 종류)를 예측합니다.
4. 평가 : 이렇게 예측된 결괏갑소가 테스트 데이터의 실제 결괏값을 비교해 ML 모델 성능을 평가합니다.
※ 파이썬 머신러닝 완벽가이드 내용 中