1. 앙상블 기법
앙상블이란 여러 머신 러닝 모델을 결합하여 각각의 모델에서 발생할 수 있는 오류를 줄이고, 전체적인 예측 성능을 향상시키는 기법입니다.
앙상블 기법의 주요 장점으로는 성능 개선, 과적합 감소, 그리고 일반화 능력의 향상이 있습니다.
여러 모델의 예측을 결합함으로써 단일 모델보다 높은 정확도와 신뢰성을 달성할 수 있습니다.
또한, 다양한 모델을 결합함으로써 각 모델이 특정 데이터에 과적합되는 경향을 줄일 수 있으며, 서로 다른 모델들의 결합은 모델의 일반화 능력을 향상시켜 새로운 데이터에 대한 예측력을 강화합니다.
2. 보팅(Voting)
보팅은 다수결 원칙을 기계 학습 알고리즘에 적용한 방법으로, 여러 개의 분류 모델의 예측을 종합하여 최종 결정을 내리는 과정입니다.
보팅은 각 모델이 독립적으로 예측을 수행하고, 그 결과를 '투표'에 의해 종합합니다.
이 방식을 통해 각 모델의 예측 능력을 결합하여 단일 모델의 불확실성을 줄이고 전반적인 예측 정확도를 높일 수 있습니다.
※ 장점
1) 다양한 모델들이 서로 다른 방식으로 데이터의 특성을 학습하기 때문에, 보팅을 통해 개별 모델보다 더 정확한 예측을 할 수 있습니다.
2) 단일 모델이 특정 데이터에 과적합되는 것을 방지하고, 다양한 모델을 결합함으로써 일반화 능력을 향상시킵니다.
※ 단점
1) 앙상블에 포함된 모델의 성능이 다양할 때, 성능이 낮은 모델이 최종 결과에 부정적인 영향을 줄 수 있습니다.
2) 비슷한 유형의 오류를 범하는 모델들이 많다면, 다수결이 그 오류를 반영할 수 있으며, 이는 잘못된 결정을 내릴 가능성을 높입니다.
3) 여러 모델을 훈련시키고 조합해야 하므로, 단일 모델보다 계산 비용이 더 많이 듭니다.
3. 보팅의 종류
3.1 하드보팅(Hard Voting)
하드보팅은 앙상블 학습법 중 하나로, 여러 개의 다른 머신러닝 모델로부터 얻은 예측값들을 투표하여 가장 많은 표를 얻은 클래스를 최종 예측 결과로 선정하는 방법입니다.
각 모델은 동일한 데이터셋에 대해 독립적으로 학습하고 예측을 수행합니다.
3.2 소프트보팅(Soft Voting)
소프트 보팅은 여러 개의 머신러닝 모델의 예측 확률을 평균내어, 가장 확률이 높은 클래스를 최종 예측 결과로 선정 하는 앙상블 학습 기법입니다.
이 방법은 각 모델의 확신도를 고려하므로, 하드보팅에 비해 더 세밀하고 정확한 결정을 내릴 수 있게 합니다.
이러한 소프트 보팅 기법은 모델 간의 확률적 합의를 통해 더 견고한 예측을 도출할 수 있습니다.
4. 보팅 코드
4.1 데이터셋 로드
import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
submission = pd.read_csv('sample_submission.csv')
# 독립변수/ 종속변수 설정
x_train = train.drop(['index', 'type', 'quality'], axis = 1)
y_train = train['quality']
# 테스트 데이터셋에서 예측에 사용할 특성을 선택
x_test = test.drop(['index', 'type'], axis = 1)
x_train.head()
4.2 모델 정의 및 학습
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.ensemble import ExtraTreesClassifier
# 모델 정의
rf_model = RandomForestClassifier(n_estimators = 10)
gb_model = GradientBoostingClassifier(n_estimators = 10)
et_model = ExtraTreesClassifier(n_estimators = 10)
# 모델 학습
rf_model.fit(x_train, y_train)
gb_model.fit(x_train, y_train)
et_model.fit(x_train, y_train)
4.3.1 하드보팅
# 모델 예측값 획득
rf_pred = rf_model.predict(x_test)
gb_pred = gb_model.predict(x_test)
et_pred = et_model.predict(x_test)
# 하드보팅을 위한 데이터 프레임 생성
pred_df = pd.DataFrame(
{'pred1':rf_pred, 'pred2':gb_pred, 'pred3':et_pred}
)
# 각 모델별 예측한 분류결과
display(pred_df.head())
# pred_df의 각 행에서 등장 빈도가 가장 높은 값을 제출 파일에 할당
submission['quality'] = pred_df.mode(axis = 1)[0]
display(submission.head())
4.3.2 소프트보팅
# 모델별 클래스 예측 확률
rf_soft = rf_model.predict_proba(x_test)
gb_soft = gb_model.predict_proba(x_test)
et_soft = et_model.predict_proba(x_test)
soft_pred_mean = pd.DataFrame((rf_soft + gb_soft + et_soft) / 3)
display(soft_pred_mean.head())
print(f'모델에 매핑된 클래스는 : {rf_model.classes_} 입니다.')
# 최대값을 가지는 칼럼을 반환하는 idxmax() 메서드
soft_max_col = soft_pred_mean.idxmax(axis = 1)
# soft_max_col의 값이 0부터 시작하므로 3을 더해서 값을 맞춰줍니다.
submission['quality'] = soft_max_col + 3
submission.head()
'머신러닝 > 머신러닝: 심화 내용' 카테고리의 다른 글
머신러닝 앙상블 기법 2 : 스태킹(Stacking) (1) | 2024.12.27 |
---|---|
LightGBM 모델 (0) | 2024.12.25 |
피처 선택(Feature Selection) (0) | 2024.12.24 |
피처 중요도(Feature Importance) (0) | 2024.12.24 |
피처 생성(Feature Generation) 2 : 다항식 피처 생성 (0) | 2024.12.24 |