세상을 바꾸는 데이터

붓꽃 데이터 세트로 ML 분류 예측과정 수행하기 본문

ML/scikit-learn(사이킷런)

붓꽃 데이터 세트로 ML 분류 예측과정 수행하기

Industriousness 2022. 1. 30. 08:20


사이킷런에 내장되어 있는 붓꽃 데이터 세트를 이용해 분류 예측 과정을 수행해보자.
프로젝트의 목표는 붓꽃 데이터 셋을 가지고 붓꽃 데이터 품종을 분류해보려고 한다.
붓꽃 데이터 세트는 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피처(feature)를 기반으로 꽃의 품종을 예측하기 위한 것이다.

꽃받침과 꽃잎을 이용해 붓꽃의 품종 예측하기

 


사이킷런 라이브러리 설치 및 임포트하기

pip install scikit-learn import sklearn

 


붓꽃 예측을 위한 사이킷런 모듈 로딩

from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split

 

  • sklearn.datasets 내의 모듈은 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임이다.
  • sklearn.tree 내의 모듈은 트리 기반 ML 알고리즘을 구현한 클래스의 모임이다.
  • sklearn.model_selection은 학습 데이터와 검증 데이터, 예측 데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임이다.

붓꽃 데이터(load_iris)는 사이킷런에 내장되어 있는 데이터셋에서 가져온 것이다.
후에 다루겠지만 붓꽃 품종 예측에 결정 트리 알고리즘train_test_split을 이용해 분석을 진행한다.


일단은 데이터를 학습하고 예측하는 머신러닝 기법을 구현하는 데 집중한다.

 


데이터 세트 로딩하기

import pandas as pd # 붓꽃 데이터 세트를 로딩한다. iris = load_iris() # iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있다. iris_data = iris.data # iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있다. iris_label = iris.target # 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환한다. iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names) iris_df['label'] = iris.target print(iris_df.head(3))


사이킷런에 내장되어 있는 붓꽃 데이터 세트를 판다스를 이용해 DataFrame으로 변환한다.
데이터 세트에서의 피처(feature)는 데이터 세트의 일반 속성들이며, Label(레이블)은 데이터 세트의 결정 값을 의미한다.
[Output]

iris_df.head(3)

여기서 sepal length, speal width, petal length, petal width는 데이터 세트의 피처(feature)를 의미하며, label은 결정 값을 의미한다.
label(레이블, 결정 값)은 0, 1, 2 세 가지 값으로 데이터가 구성되어 있으며,
0이 "Setosa" 품종, 1이 "versicolor" 품종, 2가 "virginica 품종"을 의미한다.


학습용, 테스트용으로 데이터 세트 분리하기

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를 이용한다.

<학습/테스트 데이터 세트를 분리하는 train_test_split( ) 자세한 설명>

  • iris_data는 feature으로만 이루어져 있는 데이터, 함수에서의 X를 의미한다.
  • iris_label은 결정 값(Label)으로만 이루어져 있는 데이터, 함수에서의 Y를 의미한다.
  • test_size = 0.2는 테스트 데이터를 전체 데이터의 20%로, 학습 데이터를 전체 데이터의 80%로 데이터를 분할함을 의미한다.
  • random_state는 수행할 때마다 동일한 학습/테스트용 데이터 세트를 생성하기 위해 주어지는 난수 값을 입력하는 것으로, 무작위로 데이터 세트를 호출하려면 코드에 입력하지 않으면 된다.
  • shuffle은 데이터를 분리하기 전에 데이터를 미리 섞을지 결정하는 것으로, 디폴트 값은 True다. 여기서는 생략되었으므로 shuffle = True가 적용된다.

 


모델 생성하기
머신러닝 분류 알고리즘의 하나인 의사결정 트리(DecisionTreeClassifer)를 이용해 학습과 예측을 수행해보자.

(의사결정 트리를 비롯한 분류 및 회귀 알고리즘 모델들은 추후 포스팅에서 자세히 다룰 예정이다.)

# DecisionTreeClassifier 객체 생성 
dt_clf = DecisionTreeClassifier(random_state=11)


random_state=11은 동일한 학습/예측 결과를 출력하기 위한 용도로 사용되었다.


학습 데이터 세트로 학습 수행하기

# 학습 수행 
dt_clf.fit(X_train, y_train)


사이킷런은 머신러닝 모델 학습을 위해 fit( )을 제공한다. 지도학습의 주요 두 축인 분류와 회귀의 다양한 알고리즘을 구현한 모든 사이킷런 클래스는 fit( )과 predcit( )만을 이용해 간단하게 학습과 예측 결과를 반환한다.


테스트 데이터 세트로 예측(Predict)하기

# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = dt_clf.predict(X_test)

사이킷런은 머신러닝 모델 학습을 위해 predict( )을 제공한다. 지도학습의 주요 두 축인 분류와 회귀의 다양한 알고리즘을 구현한 모든 사이킷런 클래스는 fit( )과 predcit( )만을 이용해 간단하게 학습과 예측 결과를 반환한다.


예측 정확도 평가

from sklearn.metrics import accuracy_score print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred))) # 예측 정확도: 0.9333

머신러닝 모델의 성능 평가 방법에는 여러 가지가 있지만, 여기서는 정확도를 측정해본다.
예측한 붓꽃 품종과 실제 테스트 데이터 세트의 붓꽃 품종은 93.3%로 측정되었다.

(머신러닝 모델 성능 평가는 추후 평가 포스트에서 다루게 될 것이다)



붓꽃 데이터 세트로 분류를 예측한 프로세스 과정 정리

1. 데이터 세트 분리: 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습: 학습 데이터를 기반으로 ML 알고리즘을 적용해 모델 학습
3. 예측 수행: 학습된 ML 모델을 이용해 테스트 데이터의 분류(여기서는 붓꽃 품종) 예측
4. 평가: 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 평가

 


참고 자료:
https://github.com/chulminkw/PerfectGuide/blob/master/1%EC%9E%A5/1.3%20%EB%84%98%ED%8C%8C%EC%9D%B4.ipynb
http://www.yes24.com/Product/Goods/69752484


728x90
반응형
Comments