Decision Tree와 Random Forest

학습 목표

학습 자료를 잘 맞춘 트리가 새 자료에서도 좋은지 확인해 모델 복잡도를 선택합니다.

트리 깊이와 일반화

시작 조건

Iris 데이터를 test_size=.3, random_state=7, stratify=y로 나눕니다. 깊이는 1,3,None입니다.

진행 방법

  1. 같은 데이터 분할에서 세 DecisionTreeClassifier를 학습하세요.
  2. Train·Test Accuracy와 Leaf 수를 기록하고 한 Test 표본의 결정 경로를 읽으세요.

남길 결과

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:

확인할 점

Random Forest와 비교

시작 조건

같은 분할에서 n_estimators=50, max_depth=3인 RandomForest와 비교합니다.

진행 방법

  1. 앞의 Train/Test 분할을 그대로 쓰고 RandomForestClassifier(n_estimators=50,max_depth=3,random_state=7)를 학습하세요.
  2. 앞에서 구한 깊이 3인 Decision Tree와 Random Forest의 Train·Test Accuracy를 같은 표에 적으세요.
  3. Test 표본 하나를 두 모델에 공통으로 넣고 정답·각 예측을 적으세요. 한 Tree와 여러 Tree의 결과를 결합하는 방식의 차이를 설명하세요.

남길 결과

from sklearn.ensemble import RandomForestClassifier
forest=RandomForestClassifier(n_estimators=50,max_depth=3,random_state=7)

결과 기록·자가 점검

모델·설정:

Train Accuracy:

Test Accuracy:

선택한 Test Index·정답·예측:

확인할 점

다른 입력에서도 확인하기

시작 조건

split seed=11로 한 번 더 나누어 모델 우열이 유지되는지 확인합니다.

진행 방법

  1. test_size=.3, stratify=y를 유지하고 분할의 random_state만 11로 바꾸세요.
  2. 앞 활동의 깊이 3인 Tree와 50개 Tree의 Forest를 새 Train에 다시 학습하세요. 모델의 나머지 설정은 유지합니다.
  3. split seed·모델명·Train Accuracy·Test Accuracy를 표로 적고 seed 7과 11에서 Test Accuracy의 대소관계가 유지되는지 설명하세요.

남길 결과

# 앞 활동의 데이터와 함수를 사용해 지정된 새 예제를 검사하세요.

결과 기록·자가 점검

분할 Seed:

모델:

Train·Test Accuracy:

두 모델 비교 결과:

확인할 점