✨ 딥러닝·머신러닝

사이킷런 - 지도학습으로 붓꽃의 품종을 판별

Vento AI Lab 2026. 6. 16.
반응형

 

 

1. 개요

사이킷런에서 제공하는 붓꽃(Iris) 데이터셋을 사용하여 지도학습 유형의 분류 모델을 적용해 붓꽃의 품종을 판별하는 예제를 작성해 보자. 본 문서에서는 의사결정 트리(Decision Tree) 분류기를 사용하여 붓꽃의 품종을 예측한다.

2. 붓꽃 데이터세트

붓꽃(Iris) 데이터셋은 머신러닝의 'Hello World'와도 같다. 붓꽃 데이터세트는 단순성 때문에 자주 사용된다. 이 데이터 세트는 scikit-learn에 포함되어 있다.

붓꽃 데이터세트에는 3가지 다른 종의 붓꽃 150개에 대한 측정값이 포함되어 있다.

  • 아이리스 베르시컬러(Iris Versicolor)
  • 아이리스 세토사(Iris Setosa)
  • 아이리스 버지니카(Iris Virginica)

Iris 데이터세트의 특징은 다음과 같다.

  • 꽃받침 길이 - sepal length (cm)
  • 꽃받침 폭 - sepal width (cm)
  • 꽃잎 길이 - petal length (cm)
  • 꽃잎 폭 - petal width (cm)

먼저 붓꽃의 데이터 세트가 어떻게 구성되어 있는지 간단히 확인해 보자.

sklearn.datasets에서 load_iris를 사용하기 위해 임포트 한다. load_iris() 함수를 사용하여 붓꽃 데이터를 로드하고, 입력 데이터(x)와 타겟 레이블(y)을 추출한다. 그리고 판다스 데이터프레임에 data에 입력 데이터(x)를 할당하고 columns에 iris.feature_names을 할당한다.

데이터프레임에 'target'이라는 칼럼에 타겟 레이블(y)을 할당한 뒤 head() 함수를 사용하여 상위 10개를 출력해 본다.

import pandas as pd
from sklearn.datasets import load_iris

# 데이터셋 로드
iris = load_iris()
x = iris.data
y = iris.target

print(iris.feature_names)

df = pd.DataFrame(data=x, columns=iris.feature_names)
df['target'] = y

print(df.head(10))
feature_names ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
0                5.1               3.5                1.4               0.2       0
1                4.9               3.0                1.4               0.2       0
2                4.7               3.2                1.3               0.2       0
3                4.6               3.1                1.5               0.2       0
4                5.0               3.6                1.4               0.2       0
5                5.4               3.9                1.7               0.4       0
6                4.6               3.4                1.4               0.3       0
7                5.0               3.4                1.5               0.2       0
8                4.4               2.9                1.4               0.2       0
9                4.9               3.1                1.5               0.1       0

 

의사결정 트리로 지도학습을 하기 위해 필요한 라이브러리를 임포트 한다.

  • sklearn.model_selection에서 train_test_split을 사용하여 데이터를 학습 세트와 테스트 세트로 분할한다.
  • sklearn.tree에서 DecisionTreeClassifier를 사용하여 의사결정 트리 모델을 만든다.
  • sklearn.metrics에서 accuracy_score, classification_report, confusion_matrix를 사용하여 모델의 성능을 평가한다.

train_test_split() 함수를 사용하여 데이터를 학습 세트와 테스트 세트로 분할합니다. 'test_size=0.2'는 데이터를 80% 학습 세트, 20% 테스트 세트로 분할한다.

DecisionTreeClassifier()를 사용하여 의사결정 트리 분류기 모델을 생성한다. 그리고 fit() 메서드를 사용하여 학습 세트('x_train', 'y_train')를 이용해 모델을 학습시킨다. predict() 메서드를 사용하여 테스트 세트(`x_test`)에 대한 예측을 수행한다. 결과를 평가하기 위해 accuracy_score(), classification_report(), confusion_matrix()를 사용하여 모델의 정확도, 분류 리포트, 혼동 행렬을 출력한다.

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# 학습 데이터와 테스트 데이터로 분할 (80% 학습, 20% 테스트)
x_train, x_test, y_train, y_test = train_test_split(
    x, y, test_size=0.2, random_state=42)

# 의사결정트리 분류기 모델 생성
clf = DecisionTreeClassifier(random_state=42)

# 모델 학습
clf.fit(x_train, y_train)

# 예측
y_pred = clf.predict(x_test)

# 결과 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"정확도: {accuracy:.2f}")

print("분류 리포트:")
print(classification_report(y_test, y_pred))

print("혼동 행렬:")
print(confusion_matrix(y_test, y_pred))
정확도: 1.00
분류 리포트:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        10
           1       1.00      1.00      1.00         9
           2       1.00      1.00      1.00        11

    accuracy                           1.00        30
   macro avg       1.00      1.00      1.00        30
weighted avg       1.00      1.00      1.00        30

혼동 행렬:
[[10  0  0]
 [ 0  9  0]
 [ 0  0 11]]

 

반응형

댓글