카테고리 없음

🌸 Iris 데이터로 배우는 머신러닝 분류: 학습부터 시각화까지

존카터 2025. 7. 18. 09:49

머신러닝을 처음 접할 때 가장 많이 사용하는 예제가 바로 Iris 데이터다. 이 데이터는 붓꽃의 꽃잎과 꽃받침의 길이·너비를 보고 어떤 품종인지 분류하는 문제다. 이번 글에서는 이 데이터를 이용해 의사결정나무 모델을 학습하고, 예측하고, 그래프 시각화까지 진행한다.


1. Iris 데이터란?

Iris 데이터는 총 150개의 샘플로 구성되어 있고, 각 샘플에는 다음 네 가지 특성이 있다.

  • 꽃받침 길이 (sepal length)
  • 꽃받침 너비 (sepal width)
  • 꽃잎 길이 (petal length)
  • 꽃잎 너비 (petal width)

그리고 각 샘플은 세 가지 품종 중 하나에 속한다.

  • setosa
  • versicolor
  • virginica

즉, 4개의 숫자로 이루어진 특성을 보고 어떤 품종인지 맞추는 것이 목표다.


2. 데이터 불러오기와 분리

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

# 데이터 불러오기
iris = load_iris()
iris_data = iris.data      # 입력 데이터
iris_label = iris.target   # 품종 정답

# 학습용과 테스트용 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(
    iris_data, iris_label,
    test_size=0.2,      # 20%는 테스트용
    random_state=42     # 결과 고정
)

여기서 train_test_split 함수는 데이터를 학습용과 테스트용으로 나누는 역할을 한다. 학습에만 사용하면 모델이 외운 것만 잘 맞추고 새로운 데이터는 못 맞출 수 있기 때문에, 모델이 보지 못한 데이터를 따로 남겨두고 그걸로 평가하는 것이 중요하다.


3. 의사결정나무 모델 학습

from sklearn.tree import DecisionTreeClassifier

# 모델 생성
model = DecisionTreeClassifier(random_state=42)

# 모델 학습
model.fit(X_train, y_train)

의사결정나무는 데이터를 여러 조건으로 나누어가며 최종적으로 분류하는 방식이다. 예를 들어 “꽃잎 길이가 2.5cm보다 짧으면 setosa, 길면 다른 품종” 같은 식으로 나무 형태의 규칙을 만든다. 이 모델은 직관적이고 시각화가 쉬운 장점이 있다.


4. 예측과 정확도 평가

from sklearn.metrics import accuracy_score

# 테스트 데이터로 예측
y_pred = model.predict(X_test)

# 정확도 평가
acc = accuracy_score(y_test, y_pred)

print("예측 결과:", y_pred)
print("실제 정답:", y_test)
print("모델 정확도:", acc)

테스트 데이터로 예측을 해보면 거의 모든 경우를 맞춘다. iris 데이터는 구조가 단순하기 때문에 의사결정나무만으로도 높은 정확도를 낼 수 있다.


5. 의사결정나무 시각화

이제 학습된 의사결정나무를 직접 시각화해보자. 모델이 어떤 규칙으로 품종을 분류했는지 한눈에 볼 수 있다.

from sklearn import tree
import matplotlib.pyplot as plt

plt.figure(figsize=(12,8))
tree.plot_tree(model,
               feature_names=iris.feature_names,
               class_names=iris.target_names,
               filled=True)
plt.show()
  • feature_names: 꽃받침/꽃잎 길이와 너비 이름
  • class_names: 세 가지 품종 이름
  • filled=True: 노드를 색칠해 품종을 구분

결과로 나오는 나무 그래프에는 각 분기점에서 어떤 기준으로 나누는지, 각 노드에 어느 품종이 많은지가 표시된다.


6. 전체 코드

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn import tree
import matplotlib.pyplot as plt

# 데이터 로드
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

# 모델 생성 및 학습
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
print("모델 정확도:", accuracy_score(y_test, y_pred))

# 의사결정나무 시각화
plt.figure(figsize=(12,8))
tree.plot_tree(model,
               feature_names=iris.feature_names,
               class_names=iris.target_names,
               filled=True)
plt.show()


7. 정리

  • Iris 데이터는 꽃의 특성을 이용해 품종을 분류하는 간단한 예제 데이터다.
  • 학습과 테스트 데이터를 나눠야 모델의 진짜 실력을 평가할 수 있다.
  • 의사결정나무는 규칙을 쉽게 이해하고 시각화할 수 있는 모델이다.
  • 시각화된 나무를 보면 어떤 기준으로 나누는지 직관적으로 알 수 있다.

이 과정을 이해하면 이후 더 복잡한 데이터와 모델을 다룰 때도 기본 흐름을 쉽게 따라갈 수 있다.