트리 기반 모델: 결정 트리와 랜덤 포레스트
결정 트리와 앙상블 포레스트 모델을 구축하고 조정합니다.
트리 기반 모델: 결정 트리와 랜덤 포레스트은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
결정 트리 개념
결정 트리는 일련의 이진 질문을 통해 데이터를 부분집합으로 나눕니다. 각 내부 노드는 특성 임계값이고, 각 리프는 예측값입니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=3, random_state=0).fit(X, y)
print("Depth:", model.get_depth())
print("Leaves:", model.get_n_leaves())DecisionTreeClassifier
주요 하이퍼파라미터는 max_depth, min_samples_split, min_samples_leaf입니다. 트리가 깊으면 과적합되고, 얕으면 과소적합됩니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = DecisionTreeClassifier(max_depth=5, min_samples_leaf=5)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))DecisionTreeRegressor
결정 트리는 각 리프에서 목표값의 평균을 예측하여 회귀도 처리할 수 있습니다.
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error
X, y = make_regression(noise=15, random_state=0)
model = DecisionTreeRegressor(max_depth=4).fit(X, y)
print("RMSE:", mean_squared_error(y, model.predict(X))**0.5)특성 중요도
model.feature_importances_는 불순도 감소를 기준으로 각 특성의 상대적 중요도를 제공합니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import numpy as np
X, y = load_iris(return_X_y=True)
feature_names = load_iris().feature_names
model = DecisionTreeClassifier().fit(X, y)
for name, imp in sorted(zip(feature_names, model.feature_importances_), key=lambda x: -x[1]):
print(f"{name}: {imp:.3f}")랜덤 포레스트 개요
랜덤 포레스트는 부트스트랩 표본으로 서로 상관이 낮은 여러 결정 트리를 학습시키고 예측값을 평균냅니다. 이렇게 하면 편향을 늘리지 않고 분산을 줄일 수 있습니다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = RandomForestClassifier(n_estimators=100, random_state=0)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))RandomForestRegressor
랜덤 포레스트는 회귀에도 동일하게 잘 작동합니다.
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import r2_score
X, y = make_regression(noise=10, random_state=0)
model = RandomForestRegressor(n_estimators=100, random_state=0).fit(X, y)
print("R²:", r2_score(y, model.predict(X)))Out-of-Bag 점수
oob_score=True로 설정하면 각 트리의 부트스트랩 표본에 포함되지 않은 표본을 사용해 별도의 테스트 세트 없이 검증 점수를 얻을 수 있습니다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
model = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=0).fit(X, y)
print("OOB score:", model.oob_score_)그래디언트 부스팅
그래디언트 부스팅(GBM)은 트리를 순차적으로 학습시키며, 각 트리가 이전 트리의 오류를 보정합니다. 랜덤 포레스트보다 정확한 경우가 많지만 학습 속도는 더 느립니다.
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = GradientBoostingClassifier(n_estimators=100).fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))XGBoost / LightGBM
XGBoost와 LightGBM은 최적화된 그래디언트 부스팅 라이브러리로, sklearn의 GBM보다 빠르고 확장성이 뛰어나며 더 정확한 경우가 많습니다.
# pip install xgboost lightgbm
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
xgb = XGBClassifier(n_estimators=100, eval_metric="logloss").fit(X_tr, y_tr)
print("XGB acc:", xgb.score(X_te, y_te))n_estimators 조정
랜덤 포레스트의 트리 수를 늘리면 과적합 없이 어느 정도까지 분산을 줄일 수 있습니다. 최적의 개수는 검증 곡선을 사용해 찾습니다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification
import numpy as np
X, y = make_classification(random_state=0)
for n in [10, 50, 100, 200]:
scores = cross_val_score(RandomForestClassifier(n_estimators=n, random_state=0), X, y, cv=5)
print(f"n={n}: {scores.mean():.3f}")결정 트리 시각화
sklearn.tree.plot_tree 또는 export_text를 사용하여 트리가 학습한 내용을 확인합니다.
from sklearn.tree import DecisionTreeClassifier, export_text, plot_tree
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=2).fit(X, y)
print(export_text(model, feature_names=load_iris().feature_names.tolist()))빠른 확인
랜덤 포레스트는 단일 결정 트리와 비교하여 과적합을 어떻게 줄입니까?
복습
결정 트리는 특성 임계값으로 데이터를 나누고 리프 값으로 예측합니다. 과적합을 조절하려면 max_depth를 조정합니다. 랜덤 포레스트는 여러 트리의 예측을 평균내어 분산을 낮춥니다. 그래디언트 부스팅은 높은 정확도를 위해 트리를 순차적으로 학습시킵니다. 운영 환경에서는 XGBoost 또는 LightGBM을 우선적으로 사용합니다.
자주 묻는 질문
“트리 기반 모델: 결정 트리와 랜덤 포레스트” 강의는 무료인가요?
네 — “트리 기반 모델: 결정 트리와 랜덤 포레스트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“트리 기반 모델: 결정 트리와 랜덤 포레스트”에서 뭘 배우나요?
결정 트리와 앙상블 포레스트 모델을 구축하고 조정합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“트리 기반 모델: 결정 트리와 랜덤 포레스트” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- scikit-learn API: fit, transform, predict
- 선형 모델: 회귀와 분류
- 트리 기반 모델: 결정 트리와 랜덤 포레스트
- 모델 평가와 교차 검증