Decision Tree와 Random Forest
학습 목표
학습 자료를 잘 맞춘 트리가 새 자료에서도 좋은지 확인해 모델 복잡도를 선택합니다.
트리 깊이와 일반화
시작 조건
Iris 데이터를 test_size=.3, random_state=7, stratify=y로 나눕니다. 깊이는 1,3,None입니다.
진행 방법
- 같은 데이터 분할에서 세 DecisionTreeClassifier를 학습하세요.
- Train·Test Accuracy와 Leaf 수를 기록하고 한 Test 표본의 결정 경로를 읽으세요.
남길 결과
- 깊이 3조건 표와 한 표본의 경로 설명.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
X,y=load_iris(return_X_y=True)
Xtr,Xte,ytr,yte=train_test_split(X,y,test_size=.3,random_state=7,stratify=y)
model=DecisionTreeClassifier(max_depth=3,random_state=7).fit(Xtr,ytr)
print(model.score(Xte,yte))
결과 기록·자가 점검
max_depth:
Leaf 수:
Train Accuracy:
Test Accuracy:
확인할 점
- Test 자료로 깊이를 계속 조정하지 않았는가?
Random Forest와 비교
시작 조건
같은 분할에서 n_estimators=50, max_depth=3인 RandomForest와 비교합니다.
진행 방법
- 앞의 Train/Test 분할을 그대로 쓰고
RandomForestClassifier(n_estimators=50,max_depth=3,random_state=7)를 학습하세요. - 앞에서 구한 깊이 3인 Decision Tree와 Random Forest의 Train·Test Accuracy를 같은 표에 적으세요.
- Test 표본 하나를 두 모델에 공통으로 넣고 정답·각 예측을 적으세요. 한 Tree와 여러 Tree의 결과를 결합하는 방식의 차이를 설명하세요.
남길 결과
- 같은 분할의 Tree·Forest 비교 표와 공통 Test 표본의 예측.
from sklearn.ensemble import RandomForestClassifier
forest=RandomForestClassifier(n_estimators=50,max_depth=3,random_state=7)
결과 기록·자가 점검
모델·설정:
Train Accuracy:
Test Accuracy:
선택한 Test Index·정답·예측:
확인할 점
- 두 모델을 같은 Train/Test 자료로 비교했는가?
다른 입력에서도 확인하기
시작 조건
split seed=11로 한 번 더 나누어 모델 우열이 유지되는지 확인합니다.
진행 방법
test_size=.3,stratify=y를 유지하고 분할의random_state만 11로 바꾸세요.- 앞 활동의 깊이 3인 Tree와 50개 Tree의 Forest를 새 Train에 다시 학습하세요. 모델의 나머지 설정은 유지합니다.
- split seed·모델명·Train Accuracy·Test Accuracy를 표로 적고 seed 7과 11에서 Test Accuracy의 대소관계가 유지되는지 설명하세요.
남길 결과
- 분할 Seed·모델별 Accuracy 표와 비교 결과의 변화.
# 앞 활동의 데이터와 함수를 사용해 지정된 새 예제를 검사하세요.
결과 기록·자가 점검
분할 Seed:
모델:
Train·Test Accuracy:
두 모델 비교 결과:
확인할 점
- 자료 분할 Seed만 바꾸고 모델 설정은 유지했는가?