
1편에서 머신러닝과 사이킷런의 기본 개념을 정리했다면, 이번 2편에서는 실제 코드를 통해 머신러닝 모델의 기본 Workflow를 실습합니다.
아이리스(Iris) 데이터셋을 활용해 데이터 로딩 → 데이터 분리 → 모델 학습 → 예측 → 평가의 전형적인 과정이 어떻게 진행되는지 사이킷런 API를 중심으로 자세히 살펴보겠습니다.
이 실습은 이후 3편의 교차검증(Stratified KFold), 4편의 하이퍼파라미터 튜닝(Grid Search), 5편의 전처리 실습의 기초가 됩니다.
1. 머신러닝 핵심 개념 복습
모델 실습에 앞서 핵심 개념을 짧게 정리합니다.
피처(Feature)
머신러닝 입력값을 의미하며, 타깃값을 제외한 모든 속성을 피처라고 합니다.
아이리스 데이터에서는 꽃받침·꽃잎 길이와 너비가 피처입니다.
레이블(Label, Class, Target, 결정값)
지도학습에서 모델이 학습해야 하는 정답값을 의미합니다.
아이리스 품종(Setosa, Versicolor 등)이 레이블입니다.
지도학습 분류(Classification)
피처 + 정답(레이블)을 기반으로 모델을 학습하고, 이후 새로운 데이터의 레이블을 예측하는 방식입니다.
즉, “정답이 주어진 데이터로 학습하고, 정답이 없는 데이터에 대해 예측하는 방식”입니다.
사이킷런 모델링 단계
- 데이터 세트 분리
- 모델 학습
- 예측 수행
- 평가
이제 코드로 살펴보겠습니다.
2. 사이킷런을 활용한 아이리스 데이터 실습
(1) 라이브러리 불러오기
# Iris 데이터셋 로딩
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
import pandas as pd
(2) 데이터 로딩 및 기본 정보 확인
# Iris 데이터셋 로딩
iris = load_iris()
# 피처 데이터
iris_data = iris.data
# 레이블(품종)
iris_label = iris.target
print(iris_label) # 0, 1, 2 형태의 숫자 클래스
print(iris.target_names) # ['setosa' 'versicolor' 'virginica']
데이터프레임으로 확인하기
# 데이터프레임 생성
iris_df = pd.DataFrame(data=iris_data,
columns=iris.feature_names)
iris_df["label"] = iris.target
iris_df.head(2)
데이터프레임을 통해 피처와 라벨 구조를 쉽게 확인할 수 있습니다.
(3) 학습/테스트 데이터 분할
머신러닝에서는 데이터를 학습용과 테스트용으로 분리해야 합니다.
# 학습/테스트 데이터 분리 (test_size=0.2 → 20%를 테스트로 사용)
X_train, X_test, y_train, y_test = train_test_split(
iris_data, iris_label,
test_size=0.2,
random_state=11 # 재현 가능한 결과를 위해 random_state 고정
)
(4) 모델 생성 및 학습
# 결정트리 모델 생성
dt_clf = DecisionTreeClassifier(random_state=11)
# 학습 수행
dt_clf.fit(X_train, y_train)
(5) 테스트 데이터로 예측하기
# 학습된 모델로 테스트 데이터 예측
pred = dt_clf.predict(X_test)
pred
(6) 예측 정확도 평가
# 예측 정확도 출력
accuracy_score(y_test, pred)
결정트리 모델은 비교적 단순한 모델이지만 Iris 데이터에서는 높은 정확도를 보이는 편입니다.
하지만 단순 학습 데이터 전체를 그대로 예측할 경우에는 정확도가 과도하게 높게 나오는데, 이는 “과적합(overfitting)” 가능성을 평가하기 어렵기 때문입니다.
아래는 테스트 데이터 없이 학습 데이터만으로 평가했을 때의 예입니다.
# 학습 데이터로 직접 예측 (과적합 여부 판단 불가)
train_data = iris.data
train_label = iris.target
dt_clf = DecisionTreeClassifier()
dt_clf.fit(train_data, train_label)
pred = dt_clf.predict(train_data)
accuracy_score(train_label, pred) # 매우 높게 나오지만 의미는 낮음
즉, 학습 데이터와 테스트 데이터를 분리하는 이유는 모델이 새로운 데이터를 얼마나 잘 예측하는지 평가하기 위함입니다.
(7) 전체 Workflow 정리
아래 코드는 전체 사이킷런 모델링 흐름을 한 번에 정리한 형태입니다.
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
# 1. 데이터 로딩
iris_data = load_iris()
# 2. 분할
X_train, X_test, y_train, y_test = train_test_split(
iris_data.data, iris_data.target,
test_size=0.3,
random_state=12
)
# 3. 모델 생성 및 학습
dt_clf = DecisionTreeClassifier()
dt_clf.fit(X_train, y_train)
# 4. 예측
pred = dt_clf.predict(X_test)
# 5. 평가
accuracy_score(y_test, pred)
이번 2편에서는 사이킷런을 사용한 머신러닝의 기본 Workflow—데이터 로딩, 데이터 분리, 모델 학습, 예측, 평가—를 실습을 통해 실제로 구현해보았습니다.
이 과정은 머신러닝의 “기초 체력”에 해당하며, 이후의 교차검증, 성능 개선, 하이퍼파라미터 튜닝의 기반이 됩니다.
다음 3편에서는 **교차검증(K-Fold, Stratified K-Fold)**을 통해 모델 성능을 더욱 정확하게 평가하는 방법을 살펴보겠습니다.
'Programming' 카테고리의 다른 글
| [4편] cross_val_score와 GridSearchCV: 교차검증 자동화 및 하이퍼파라미터 튜닝 (0) | 2025.12.09 |
|---|---|
| [3편] 교차검증(K-Fold, Stratified K-Fold)으로 모델 성능을 더 정확하게 평가하기 (0) | 2025.12.09 |
| [1편] 사이킷런(scikit-learn) 이해하기: 머신러닝 기본 개념과 예제 아이리스(Iris) 소개 (0) | 2025.12.09 |
| 딥러닝 기초 개념과 학습 프로세스 완벽 정리 (0) | 2025.12.09 |
| 머신러닝 완전 입문 가이드 6편 : 분류·회귀 모델 평가 지표 완전 정리 (Accuracy, Precision, Recall, F1, ROC-AUC, MAE, RMSE, R²) (1) | 2025.12.09 |