Machine Learning

[sklearn] 붓꽃 품종 예측하기

주댕이 2024. 2. 19. 13:25

# 붓꽃 품종 예측하기: 붓꽃 데이터 세트로 붓꽃의 품종 분류(Classification)하기

  • 붓꽃 데이터 세트는 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피처(Feature)를 기반으로 꽃의 품종을 예측하기 위한 것이다.
  • 분류(Classification): 대표적인 지도학습(Supervised Learning) 방법 중 하나
  • 지도학습: 학습을 위한 다양한 피처와 분류 결정값인 레이블(Label) 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측한다. 즉, 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측한다. 이때 학습을 위해 주어진 데이터 세트를 학습 데이터 세트, 머신러닝 모델의 예측 성능을 평가하기 위해 별도로 주어진 데이터 세트를 테스트 데이터 세트로 지칭한다.

 

# 라이브러리 불러오기

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: 학습 데이터와 검증 데이터, 예측 데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임
    • 하이퍼 파라미터: 머신러닝 알고리즘별로 최적의 학습을 위해 직접 입력하는 파라미터들을 통칭하며, 하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝할 수 있다.

# 붓꽃 데이터 세트를 로딩한 후 DataFrame으로 변환하기

import pandas as pd

# 붓꽃 데이터 세트 로딩하기
iris = load_iris()  # numpy 배열로 데이터 존재

# 독립변수, 설명변수
# iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있다.
iris_data = iris.data  # 딕셔너리 key값만 출력

# 지도학습: 종속변수
# iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있다.
iris_label = iris.target  # 0은 setosa, 1은 versicolor, 2는 birginica 품종
iris_label

iris.target_names

# DataFrame으로 변환하기
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)  # feature_names: 독립변수의 컬럼명
iris_df['label'] = iris.target
iris_df.head()

  • 피처: sepal length, sepal width, petal length, petal width
  • 레이블: 0(setosa), 1(versicolor), 2(virginica)

 

# 학습용 데이터와 테스트용 데이터 분리하기

  • 학습용 데이터와 테스트용 데이터는 반드시 분리해야 한다: 학습 데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트 데이터 세트가 필요하다.
  • train_test_split()을 이용하면 학습 데이터와 테스트 데이터를 test_size 파라미터 입력값의 비율로 쉽게 분할할 수 있다. 예를 들어 test_size=0.2로 입력 파라미터를 설정하면 전체 데이터 중 테스트 데이터가 20%, 학습 데이터가 80%로 데이터를 분할한다.
# X_train: 훈련데이터의 독립변수(설명변수)
# X_test: 테스트데이터의 독립변수
# y_train: 훈련데이터의 종속변수
# y_test: 테스트데이터의 종속변수

# iris_data: 전체 데이터 독립변수
# iris_label: 전체 데이터 종속변수
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=11)

 

 

# 의사 결정 나무를 이용하여 학습과 예측 수행하기

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

# 학습 수행
dt_clf.fit(X_train, y_train)  # 훈련 데이터의 독립변수, 종속변수
# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = dt_clf.predict(X_test)
pred

 

 

# 의사 결정 나무 기반의 DecisionTreeClassifier의 예측 성능 평가하기

  • 정확도: 예측 결과가 실제 레이블 값과 얼마나 정확하게 맞는지 평가하는 지표
# 예측한 붓꽃 품종과 실제 테스트 데이터 세트의 붓꽃 품종이 얼마나 일치하는지 확인하기
from sklearn.metrics import accuracy_score
accuracy_score(y_test, pred)

 

728x90

'Machine Learning' 카테고리의 다른 글

[sklearn] Model Selection  (2) 2024.03.05
[sklearn] Estimator  (0) 2024.03.05
[ML] 분류 성능 평가 지표  (0) 2024.02.20
[sklearn] 사이킷런(scikit-learn)  (0) 2024.02.19
[ML] PyCaret 설치하기  (0) 2024.02.14