자료를 공개한 저자 오렐리앙 제롱과 강의자료를 지원한 한빛아카데미에게 진심어린 감사를 전합니다.
회귀모델의 평균제곱오차는 편향의 제곱과 분산의 합으로 근사됨.
$$\text{평균제곱오차} \approx \text{편향}^2 + \text{분산}$$
predict_proba()
메서드와 같은 확률 예측 기능을 지원해야 함.<그림출처: kaggle>
이항분포의 누적분포함수를 이용하여 앙상블 학습의 성능이 향상되는 이유를 설명할 수 있음.
from scipy.stats import binom
def ensemble_win_proba(n, p):
"""
p: 예측기 하나의 성능
n: 앙상블 크기, 즉 예측기 개수
반환값: 다수결을 따를 때 성공할 확률. 이항 분포의 누적분포함수 활용.
"""
return 1 - binom.cdf(int(n*0.4999), n, p)
적중률 51% 모델 1,000개의 다수결을 따르면 74.7% 정도의 적중률 나옴.
ensemble_win_proba(1000, 0.51)
0.7467502275561786
적중률 51% 모델 10,000개의 다수결을 따르면 97.8% 정도의 적중률 나옴.
ensemble_win_proba(10000, 0.51)
0.9777976478701533
적중률 80% 모델 10개의 다수결을 따르면 100%에 가까운 성능이 가능함.
ensemble_win_proba(10, 0.8)
0.9936306176
VotingClassifier
: 투표식 분류기 모델 제공voting='hard'
: 직접 투표 방식 지정 하이퍼 파라미터voting='soft'
: 간접 투표 방식 지정 하이퍼 파라미터SVC
모델 지정할 때 probability=True
사용해야 predict_proba()
메서드 지원됨.log_clf = LogisticRegression(solver="lbfgs", random_state=42)
rnd_clf = RandomForestClassifier(n_estimators=100, random_state=42)
svm_clf = SVC(gamma="scale", random_state=42)
# 투표식 분류기: 직접 투표
voting_clf = VotingClassifier(
estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],
voting='hard')
X_train
) 크기: 500n_estimators=500
: 결정트리 500개 사용max_samples=100
: 각 예측기가 100개 샘플 사용. 기본값은 1.0, 즉 전체 훈련 샘플 선택bootstrap=True
: 배깅 방식 사용(기본값). False
면 페이스팅 방식 사용.n_jobs=-1
: 모든 사용가능한 cpu 사용하여 훈련을 병렬처리함. 양의 정수일 경우 정해진 수의 cpu 사용.bag_clf = BaggingClassifier(DecisionTreeClassifier(random_state=42),
n_estimators=500, max_samples=100,
bootstrap=True, n_jobs=-1, random_state=42)
BaggingClassifier
의 oob_score=True
옵션oob_score_
속성에 저정됨.bag_clf = BaggingClassifier(DecisionTreeClassifier(random_state=42),
n_estimators=500, max_samples=100,
bootstrap=True, n_jobs=-1,
oob_score=True, random_state=42)
BaggingClassifier
는 특성에 대한 샘플링 기능도 지원: max_features
와 bootstrap_features
max_features
¶bootstrap_features
¶배깅/페이스팅 방법을 적용한 결정트리의 앙상블을 최적화한 모델
분류 용도: RandomForestClassifier
회귀 용도: RandomForestRegressor
rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16,
n_jobs=-1, random_state=42)
bag_clf = BaggingClassifier(DecisionTreeClassifier(splitter="random",
max_leaf_nodes=16,
random_state=42),
n_estimators=500, max_samples=1.0,
bootstrap=True, random_state=42)
BaggingClassifier
와 DecisionTreeClassifier
의 옵션을 거의 모두 가짐. 예외는 다음과 같음.DecisitionClassifier
의 옵션 중: splitter='random'
, presort=False
, max_samples=1.0
BaggingClassifier
의 옵션 중: base_estimator=DecisionClassifier(...)
splitter='random'
옵션: 특성 일부를 무작위적으로 선택한 후 최적의 임곗값 선택max_features='auto'
가 RandomForestClassifier
의 기본값임.
따라서 특성 선택에 무작위성 사용됨.extra_clf = ExtraTreesClassifier(n_estimators=500,
max_leaf_nodes=16,
n_jobs=-1,
random_state=42)
RandomForestClassifier
feature_importances_
속성에 저장됨.특성 | 중요도(%) |
---|---|
꽃잎 길이 | 44.1 |
곷잎 너비 | 42.3 |
꽃받침 길이 | 11.3 |
곷받침 너비 | 2.3 |
아래 이미지는 각 픽셀의 중요도를 보여준다.