1. Ensemble Learning 개요
여러 개의 예측 모델을 조합하여, 강력하고 안정적인 예측 모델을 생성하는 기법
(각기 다른 모델을 사용하기도, 동일 모델을 사용하기도 함)

: 편향과 분산을 줄이고 일반화 성능을 향상
2. Voting
다양한 예측 모델들의 결과에 대해 투표하여 최종 예측을 수행하는 방법
각 model의 예측 결과 중 가장 많이 예측된 class를 최종 예측으로 선택하는 방식

각 model의 예측 결과에 대한 확률 값을 평균하여 최종 예측을 수행하는 방식
(일반적으로 hard voting보다 soft voting이 성능 더 좋음)


from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
cancer=load_breast_cancer()
#데이터 나누기
X_train, X_test, y_train, y_test= train_test_split(cancer.data, cancer.target, test_size=0.2)
logistic_regression=LogisticRegression()
knn=KNeighborsClassifier(n_neighbors=8)
voting_model=VotingClassifier(estimators=[('LogisticRegression', logistic_regression), ('KNN', knn)], voting='soft')
voting_model.fit(X_train, y_train)

pred=voting_model.predict(X_test)
print(f'Accuracy : {accuracy_score(y_test,pred)}')

classifiers = [logistic_regression, knn]
for classifier in classifiers:
classifier.fit(X_train, y_train)
pred = classifier.predict(X_test)
class_name = classifier.__class__.__name__
print(f'{class_name} : {accuracy_score(y_test, pred)}')

3. Bagging
: Bootstrap Aggregating 중 하나인 Random Forest에 대해서만 다룸
Bootstrap을 이용하여 주어진 data set을 Resampling 하고, 여러 학습 모델을 훈련 시킨 뒤 결과를 voting 하는 방법
(기존 voting과 달리, 동일한 알고리즘으로 여러 분류기를 만든 후 voting)
Bagging model 중 하나로, 여러 개의 Decision Tree를 생성하고
각 Tree의 예측 결과를 조합하여 최종 결과를 예측하는 방식

Step1. Bootstrap Sampling : 원본 데이터에서 중복을 허용하여 임의로 샘플링
Step2. 랜덤 특성 선택 및 모델 학습 : 각 Decision Tree의 특성을 랜덤하게 하여 각 트리 모델 간 상관관계를 줄이고, 다양성을 높여 학습
Step3. 앙상블 예측 : 모든 Tree의 예측 결과를 조합하여 최종 결과 예측
Voting vs Bagging
4. Boosting
: AdaBoost / Gradient Boosting / XGBoost / LightGBM
약한 모델(Weak Model)을 여러 개 결합하여, 강한 모델(Strong Model)을 만드는 방법
(학습 데이터에서 잘못 예측된 샘플에 집중하여 반복적으로 학습)
Boosting 알고리즘 종류
오분류된 Sample에 집중하여 학습하는 방식
(한 개의 약한 모델은 성능이 낮지만, 여러 개의 약한 모델을 순차적으로 학습시키면서 잘못 분류된 샘플에 더 집중하도록)

Step1. 초기화 : 모든 샘플에 동일한 가중치 할당
Step2. 약한 모델 학습
1) 약한 분류기 학습
2) 분류기 중요도 계산
3) 샘플 가중치 업데이트
4) 가중치 정규화
Step3. 데이터 Resampling 및 약한 모델 학습 : 순차적으로 약한 모델 학습
Step4. 최종 예측 : 모든 약한 학습기의 예측 결과를 결합
이전 학습기의 오차를 보완하여 모델을 강화하는 방식

Step1. Create First Leaf (초기 모델 생성)
Step2. Calculate Pseudo Residual (잔차 계산)
Step3. 잔차를 예측하는 모델 학습
Step4. Update, Prediction
Learning rate
overfitting의 가능성이 크기에, 실제 값에 조금씩 가까워지는 방향으로 학습 필요
Extreme Gradient Boost의 약자로, 기존 GBM의 overfitting 문제를 해결하기 위한 기법이 추가된 방식
Regularization
: 모델의 복잡성을 제어하여, 과적합 방지
Step1. 초기 모델 설정
Step2. 분기 기준 찾기 : 각 Root/Leaf에 대해 Similarity Score 계산
Step3. 분기 실행 : Gain 계산 및 가장 큰 값으로 분기
Bagging vs Boosting