html
Scikit-Learn을 이용한 의사 결정 나무 회귀 마스터하기: 종합 가이드
끊임없이 진화하는 머신러닝 분야에서, 의사 결정 나무는 분류 및 회귀 작업 모두에 대해 다재다능하고 직관적인 모델로 두드러집니다. 데이터 과학에 열정을 가진 초보자이든 숙련된 전문가이든, 의사 결정 나무를 구현하고 최적화하는 방법을 이해하는 것은 필수적입니다. 이 가이드에서는 실용적인 예제와 실제 데이터 세트를 활용하여 Scikit-Learn을 사용한 의사 결정 나무 회귀에 대해 깊이 있게 탐구하며, 여러분의 이해를 확고히 할 것입니다.
목차
- 의사 결정 나무 소개
- 의사 결정 나무 구조 이해
- 파이썬에서의 의사 결정 나무 회귀 구현
- 하이퍼파라미터 튜닝: 최대 깊이의 역할
- 의사 결정 나무 시각화
- 모델 성능 평가
- 도전과제 및 한계
- 결론
- 추가 학습 자료
의사 결정 나무 소개
의사 결정 나무는 머신러닝의 기본 구성 요소로, 그 단순성과 해석 용이성으로 인해 높이 평가됩니다. 이는 인간의 의사 결정 과정을 모방하여 복잡한 결정을 일련의 더 단순한 이진 선택으로 분해합니다. 이로 인해 분류(데이터 분류)와 회귀(연속 값 예측) 작업 모두에 특히 유용합니다.
왜 의사 결정 나무를 사용하나요?
- 해석 용이성: 시각화 및 이해가 용이합니다.
- 비모수적: 데이터 분포에 대한 가정이 없습니다.
- 다재다능성: 다양한 유형의 데이터와 문제에 적용 가능합니다.
그러나 모든 모델과 마찬가지로, 의사 결정 나무는 오버피팅 및 계산 복잡성과 같은 고유한 문제를 가지며, 이는 이 가이드 후반부에서 다루게 됩니다.
의사 결정 나무 구조 이해
의사 결정 나무의 핵심은 노드와 가지로 구성된 구조입니다:
- 루트 노드: 전체 데이터 세트를 나타내는 최상위 노드입니다.
- 내부 노드: 특징 값을 기반으로 한 의사 결정 지점을 나타냅니다.
- 리프 노드: 최종 출력 또는 예측을 나타냅니다.
핵심 개념
- 나무의 깊이: 루트에서 리프 노드까지의 가장 긴 경로입니다. 나무의 깊이는 성능에 상당한 영향을 미칠 수 있습니다.
- 최대 깊이: 오버피팅을 방지하기 위해 나무의 깊이를 제한하는 하이퍼파라미터입니다.
- 과소적합 및 과적합:
- 과소적합: 모델이 너무 단순할 때(예: 최대 깊이가 너무 낮게 설정된 경우), 기본 패턴을 포착하지 못합니다.
- 과적합: 모델이 너무 복잡할 때(예: 최대 깊이가 너무 높게 설정된 경우), 훈련 데이터의 노이즈를 포착하여 일반화 능력이 감소합니다.
파이썬에서의 의사 결정 나무 회귀 구현
Scikit-Learn의 DecisionTreeRegressor
를 사용한 실용적인 예제를 살펴보겠습니다. "캐나다 1인당 소득" 데이터 세트를 사용하여 연도를 기반으로 소득을 예측할 것입니다.
1단계: 라이브러리 임포트
123456789
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.metrics import r2_score sns.set()
2단계: 데이터 세트 로드
1234
# 데이터 세트 출처: https://www.kaggle.com/gurdit559/canada-per-capita-income-single-variable-data-setdata = pd.read_csv('canada_per_capita_income.csv')X = data.iloc[:, :-1]Y = data.iloc[:, -1]
3단계: 탐색적 데이터 분석
12345
print(data.head()) # 데이터 시각화sns.scatterplot(data=data, x='per capita income (US$)', y='year')plt.show()
출력:
123456
year per capita income (US$)0 1970 3399.2990371 1971 3768.2979352 1972 4251.1754843 1973 4804.4632484 1974 5576.514583
4단계: 데이터 분할
1
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=1)
5단계: 모델 구축 및 학습
12
model = DecisionTreeRegressor()model.fit(X_train, y_train)
6단계: 예측 수행
12
y_pred = model.predict(X_test)print(y_pred)
출력:
12
[15875.58673 17266.09769 37446.48609 25719.14715 3768.297935 5576.514583 16622.67187 18601.39724 41039.8936 16369.31725 ]
하이퍼파라미터 튜닝: 최대 깊이의 역할
의사 결정 나무에서 중요한 하이퍼파라미터 중 하나는 max_depth
로, 이는 나무의 최대 깊이를 제어합니다.
최대 깊이의 영향
- 낮은 최대 깊이 (예: 1):
- 장점: 단순성, 오버피팅 위험 감소.
- 단점: 잠재적인 과소적합, 복잡한 데이터에 대한 성능 저하.
- 예시:
max_depth=1
로 설정하면 모델이 주말이 배드민턴 경기 여부를 결정하는지만 고려하고 날씨와 같은 다른 요소는 무시할 수 있습니다.
- 높은 최대 깊이 (예: 25):
- 장점: 복잡한 패턴을 포착할 수 있는 능력.
- 단점: 오버피팅 위험 증가, 학습 시간 증가.
- 예시:
max_depth
를 25로 설정하면 모델이 과도하게 복잡해져서 기본 분포 대신 노이즈를 포착할 수 있습니다.
최적의 최대 깊이 찾기
최적의 최대 깊이는 편향과 분산의 균형을 맞추어 모델이 보지 못한 데이터에 잘 일반화되도록 합니다. 교차 검증과 같은 기술을 사용하여 최상의 값을 결정할 수 있습니다.
12345
# 예시: max_depth를 10으로 설정model = DecisionTreeRegressor(max_depth=10)model.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred))
출력:
1
0.9283605684543206
약 0.92의 R² 점수는 강력한 적합을 나타내지만, 다양한 깊이와 교차 검증을 통해 이를 검증하는 것이 중요합니다.
의사 결정 나무 시각화
시각화는 의사 결정 나무가 어떻게 예측을 수행하는지 이해하는 데 도움이 됩니다.
모델 시각화
- 특징 중요도: 나무가 가장 중요하게 여기는 특징을 결정합니다.
12
feature_importances = model.feature_importances_print(feature_importances)
- 나무 구조: Scikit-Learn의
plot_tree
를 사용하여 나무의 구조를 표시합니다.
12345
from sklearn import tree plt.figure(figsize=(12,8))tree.plot_tree(model, filled=True, feature_names=X.columns, rounded=True)plt.show()
실습 과제
- 모델 시각화:
plot_tree
를 사용하여 의사 결정 분할이 어떻게 이루어지는지 시각화하세요.
- 의사 결정 나무 직접 표시: 나무를 해석하여 특징 결정 방식을 이해하세요.
- 추가 탐구: Scikit-Learn의 의사 결정 나무 회귀 예제를 방문하여 심층적인 이해를 얻으세요.
모델 성능 평가
모델의 성능을 평가하는 것은 신뢰성을 보장하는 데 중요합니다.
1234
from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred)print(f"R² Score: {r2:.2f}")
출력:
1
R² Score: 0.93
1에 가까운 R² 점수는 모델이 목표 변수의 분산을 높은 비율로 설명함을 나타냅니다.
도전과제 및 한계
의사 결정 나무는 강력하지만, 특정 단점이 있습니다:
- 과적합: 깊은 나무는 노이즈를 포착하여 일반화 능력을 감소시킵니다.
- 시간 복잡도: 데이터 세트 크기와 특징 차원이 커질수록 학습 시간이 증가합니다.
- 공간 복잡도: 큰 나무를 저장하는 데 상당한 메모리가 소모될 수 있습니다.
- 범주형 데이터의 편향: 의사 결정 나무는 고차원 범주형 변수 처리에 어려움을 겪을 수 있습니다.
한계 극복하기
- 가지치기: 나무의 깊이를 제한하고 목표 변수를 예측하는 데 큰 영향을 미치지 않는 가지를 제거합니다.
- 앙상블 방법: 랜덤 포레스트나 그래디언트 부스팅과 같은 기법은 과적합을 완화하고 성능을 향상시킬 수 있습니다.
- 특징 엔지니어링: 특징 차원을 줄이고 범주형 변수를 효과적으로 인코딩합니다.
결론
의사 결정 나무 회귀는 머신러닝의 기본 기술로, 단순성과 해석 용이성을 제공합니다. 구조를 이해하고, max_depth
와 같은 하이퍼파라미터를 최적화하며, 한계를 극복함으로써 그 잠재력을 최대한 활용할 수 있습니다. 소득 수준, 주택 가격 또는 기타 연속 변수를 예측할 때, 의사 결정 나무는 강력한 출발점을 제공합니다.
추가 학습 자료
데이터 과학 도구 키트에서 의사 결정 나무의 힘을 활용하고, 모델을 새로운 차원으로 끌어올리기 위해 고급 주제를 계속 탐구하세요.