반응형

디시전 트리 기반 코드 실습은 sklearn의 wine 데이터셋을 불러와 DecisionTreeClassifier, RandomForestClassifier, XGBoost 모델을 교차검증으로 비교하는 흐름을 보여 준다.

이 글은 데이터셋 로드, feature와 target 확인, 모델 생성, 5-fold cross validation, 평균 정확도 비교까지 이어지는 짧은 머신러닝 실습 메모다.

 

핵심 정리

원문 코드는 sklearn에서 제공하는 wine 데이터셋으로 세 가지 분류 모델을 비교한다. 먼저 load_wine으로 데이터를 불러오고, pandas 형태로 feature 이름과 target 레이블을 확인한다. target 값은 서로 다른 와인 클래스를 나타내며, feature는 alcohol, malic acid, ash 같은 측정값으로 구성된다. 이후 Decision Tree, Random Forest, XGBoost 모델을 만들고 cross_val_score로 5-fold 교차검증 점수를 계산한다. 단일 train-test split보다 교차검증을 쓰면 데이터가 작은 상황에서 성능 추정이 조금 더 안정적이다. 다만 출력된 정확도는 데이터셋과 기본 하이퍼파라미터 기준의 간단 비교이므로, 실제 모델 선택에는 전처리, 파라미터 탐색, 과적합 여부 확인이 필요하다.

  • load_wine으로 예제 분류 데이터셋을 불러온다.
  • feature 데이터와 target 레이블을 먼저 확인한다.
  • Decision Tree는 단일 트리 기반 분류 모델이다.
  • Random Forest는 여러 트리를 묶어 안정성을 높이는 앙상블 방식이다.
  • XGBoost는 부스팅 기반 트리 모델로 비교 대상으로 자주 쓰인다.
  • cross_val_score는 교차검증 점수를 계산할 때 사용할 수 있다.
  • 5-fold 교차검증은 데이터를 다섯 부분으로 나누어 번갈아 평가한다.
  • 정확도 비교만으로 끝내지 말고 과적합과 하이퍼파라미터도 함께 본다.

원문은 wine 데이터셋을 이용해 트리 계열 모델의 기본 성능을 빠르게 비교한 실습입니다. 보강문에서는 각 코드 블록이 데이터 확인, 모델 생성, 교차검증, 결과 비교 중 어디에 해당하는지 정리했습니다. 작은 예제에서는 숫자 하나만 보기보다 교차검증 방식과 모델별 기본 성격을 함께 이해하는 것이 더 유용합니다.

아래 코드는 여기서 확인가능하다.

data는 sklearn에서 제공하는 wine data를 사용(178개 밖에 안되긴 한다)

import pandas as pd
from sklearn.datasets import load_wine
# 와인 데이터셋 로드
wine = load_wine(as_frame=True)
df = wine.data
# data 첫 5행 출력
print(df.head())
df = wine.target
# 정답 레이블 첫 5행 출력
print(df.head())

//출력
   alcohol  malic_acid   ash  alcalinity_of_ash  magnesium  total_phenols  flavanoids  nonflavanoid_phenols  proanthocyanins  color_intensity   hue  od280/od315_of_diluted_wines  proline
0    14.23        1.71  2.43               15.6      127.0           2.80        3.06                  0.28             2.29             5.64  1.04                          3.92   1065.0
1    13.20        1.78  2.14               11.2      100.0           2.65        2.76                  0.26             1.28             4.38  1.05                          3.40   1050.0
2    13.16        2.36  2.67               18.6      101.0           2.80        3.24                  0.30             2.81             5.68  1.03                          3.17   1185.0
3    14.37        1.95  2.50               16.8      113.0           3.85        3.49                  0.24             2.18             7.80  0.86                          3.45   1480.0
4    13.24        2.59  2.87               21.0      118.0           2.80        2.69                  0.39             1.82             4.32  1.04                          2.93    735.0
0    0
1    0
2    0
3    0
4    0
Name: target, dtype: int64

정답레이블은 0, 1, 2로 서로다른 와인 재배자를 뜻함

다음 코드를 통해 간단히 디시전트리, 랜덤포레스트, xgboost의 성능을 비교(교차검증 사용)

from sklearn.datasets import load_wine
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
import xgboost as xgb
import numpy as np

# 데이터 로딩
data = load_wine()
X, y = data.data, data.target

# 디시전 트리 모델 생성
dt = DecisionTreeClassifier()

# 랜덤 포레스트 모델 생성
rf = RandomForestClassifier()

# XGBoost 모델 생성
xg_cls = xgb.XGBClassifier()

# 교차 검증 수행 (5-fold CV)
cv_scores_dt = cross_val_score(dt, X, y, cv=5)
cv_scores_rf = cross_val_score(rf, X, y, cv=5)
cv_scores_xgb = cross_val_score(xg_cls, X, y, cv=5)

# 평균 정확도 출력
print(f'Decision Tree CV Accuracy: {np.mean(cv_scores_dt):.2f}')
print(f'Random Forest CV Accuracy: {np.mean(cv_scores_rf):.2f}')
print(f'XGBoost CV Accuracy: {np.mean(cv_scores_xgb):.2f}')

출력

$ python wine_test.py
Decision Tree CV Accuracy: 0.87
Random Forest CV Accuracy: 0.97
XGBoost CV Accuracy: 0.95
반응형

+ Recent posts