[서울기온예측][XGboost 1] 의사결정나무, XGboost란?
- 개요
지금까지 선형회귀모델을 이용해서 서울 기온을 예측했습니다.
선형회귀모델도 기계학습이긴 합니다만 너무 단순하고 데이터 간 비선형적인 관계를 학습할 수 없습니다.
비선형적인 관계를 학습하는 기계학습 모델로 의사결정나무(decision tree) 기반 모델이 있습니다.
결정나무 모델이 사용한 방법을 개량하면 XGboost(Extreme Gradient Boosting)가 되는 것인데
제가 이해한 선에서 간단히 설명해보겠습니다.
- 의사결정나무
의사결정나무 모델에서는 특정 조건이 True, False인지 따져서 분류(분류모델)를 하거나 숫자(회귀모델)를 예측합니다.
붓꽃 분류 의사결정나무 모델 구조를 보면 이해가 쉽습니다.
붓꽃 데이터셋에는 세 종류의 붓꽃(세토사, 버시컬러, 버지니카)의 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비의 4가지 데이터가 있습니다.
의사결정나무 모델은 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비 자료로 특정 조건문을 만들어 어떤 붓꽃인지 결정합니다.
# ChatGPT가 작성함
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn import tree
import matplotlib.pyplot as plt
# 데이터 로드 (Iris 데이터셋 사용)
iris = load_iris()
X, y = iris.data, iris.target
# 결정 트리 모델 학습
clf = DecisionTreeClassifier(max_depth=2, random_state=42)
clf.fit(X, y)
# 트리 그래프 시각화
plt.figure(figsize=(12, 10))
tree.plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()
의사결정나무는 꽃잎 길이, 꽃잎 너비 조건에 따라 3종류의 붓꽃을 분류합니다.
max_depth를 2로 설정했기 때문에 분기가 좀 적습니다만 결정나무를 깊게 만들면 참/거짓 화살표의 모습이 마치 가지가 뻗는 것 같아 나무처럼 보이게 됩니다.
- XGboost
XGboost를 이해하기 전에 랜덤포레스트(random forest)부터 간단하게 알아봅시다.
나무가 여럿 모이면 숲이 되듯 의사결정나무를 여러 개 만들기 때문에(bagging) 포레스트, 여러 개의 의사결정 나무를 만들 때 쓰이는 조건을 랜덤으로 추출하기에 랜덤이라 랜덤포레스트라 부릅니다.
핵심은 의사결정나무를 여러개 쓴다는 것입니다.
XGboost도 랜덤포레스트처럼 여러 개의 의사결정나무를 쓰지만 그 방식이 다릅니다.
랜덤포레스트의 의사결정나무들은 서로 영향을 주지 않아 독립적입니다.
하지만 XGboost에서는 첫 의사결정나무 모델을 만들면 그 의사결정나무의 오차를 보완하는 방식으로 학습(Gradient boosting)합니다.
- 결론 및 다음 방향
의사결정나무 여러 개를 독립적으로 학습하면 bagging
첫 번째 의사결정나무의 오차를 줄이기 위해 다른 의사결정나무를 만드는 방식은 boosting
XGboost와 선형회귀모델 간 성능 비교 해보기