2022.03.19 토
Ensemble
: 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법
종류
더 많지만 위 두가지가 가장 효과적임
Random Forest
: 여러 다른 여러 결정 트리 묶음
과대적합 회피 가능
아이디어 : 예측 good + 일부에 과대적합 → 서로 다른 방향으로 과대적합된 트리 많이 만들기 (대신 많이 만들어야 함)
🔼 무작위성 주입
→ 결과 평균내기 → 과대적합 양 ⬇️ 가능!
생성할 트리 개수 정하기**
2) 데이터의 부트스트랩 샘플 생성
3) 결정 트리 만들기 각 노드에서 후보 특성 무작위로 선택 → 그 중 최선의 테스트 찾음
원래
max_features
회귀 예측 평균 내기 → 최종 예측
분류 약한 투표 전략 : 가능성 있는 출력 레이블의 확률을 제공 → 간접적 예측
코드
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons
X,y = make_moons(n_samples=100, noise=0.25, random_state=3)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
forest = RandomForestClassifier(n_estimators=5, random_state=2)
forest.fit(X_train,y_train)
# 그래프
fig,axes = plt.subplots(2,3,figsize=(20,10))
# 5개 랜덤한 결정 트리
for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)):
ax.set_title("트리 {}".format(i))
mglearn.plots.plot_tree_partition(X, y, tree, ax=ax)
# 랜덤 포레스트
mglearn.plots.plot_2d_separator(forest, X, fill=True, ax=axes[-1,-1], alpha=.4)
axes[-1,-1].set_title("랜덤 포레스트")
mglearn.discrete_scatter(X[:,0], X[:,1],y)
n_estimators
RandomForestClassifier.random_state
enumerate()
ravel()
estimators_ 속성
→ 다섯 개의 랜덤한 결정 트리
→ 랜덤 포레스트 - 예측한 확률을 평균 내어 만든 결정 경계
X_train, X_test, y_train, y_test = train_test_split(
cancer.data, cancer.target, random_state=0)
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train,y_train)
print("훈련 세트 정확도: {:.3f}".format(forest.score(X_train,y_train)))
print("테스트 세트 정확도: {:.3f}".format(forest.score(X_test,y_test)))
훈련 세트 정확도: 1.000 테스트 세트 정확도: 0.972
→ 아무 매개변수 튜닝 없이도 정확도 good
→ max_features or 사전 가지치기 가능 (없어도 좋은 결과 多)
특성 중요도 각 트리의 특성 중요도를 취합하여 계산 하나의 트리에서 제공하는 것보다 신뢰 ⬆️
plot_feature_importances_cancer(forest)
→ 단일 트리보다 훨씬 많은 특성이 0이상 값 가짐
→ 많은 정보를 가진 특성 = worst perimeter
→ 공통적으로 worst radius도 중요하다고 보고 있음
⇒ 더 넓은 시각으로 데이터 바라 볼 수 있음
장단점
단일 트리 단점 보완 & 장점은 그대로 가짐