
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]]
'✨ 딥러닝·머신러닝' 카테고리의 다른 글
| 선형 회귀 예제 - TensorFlow 회귀 모델 만들기 (0) | 2026.06.16 |
|---|---|
| TensorFlow - 텐서플로를 사용하여 MNIST 예제를 실행 (0) | 2026.06.16 |
| 사이킷런 - 분류 알고리즘으로 붓꽃(iris)의 품종을 판별 (0) | 2026.06.15 |
| 케라스(Keras) - 최소한의 코드로 딥러닝을 구현한다 (0) | 2026.06.15 |
| TensorFlow - 도커 컨테이너에서 텐서플로를 실행 (0) | 2026.06.15 |
댓글