728x90

1. 부스팅(Boosting) 알고리즘
▶ 부스팅 알고리즘
: 여러 개의 약한 학습기(weak learner)를 순차적으로 학습하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선해나가는 학습 방식
- 빨간 점과 초록 점을 분류하는 문제
-
- 여러 개의 선(learner)를 그려봐서 빨간 점과 초록 점을 가장 잘 구분하는 선을 그리기
- 여러 개의 learner를 합친 ensemble을 통해 성능을 올리는 것
▶ 부스팅 알고리즘의 종류
■ Gradient Boosting Model
- 특징
- 가중치 업데이트를 경사하강법을 통해 진행
- Python 라이브러리
- sklearn.ensemble.GradientBoostingClassifier
- sklearn.ensemble.GradientBoostingRegressor
■ XGBoost
- 특징
- 트리기반 앙상블 기법으로, 가장 각광받는 Kaggle의 상위 알고리즘
- 병렬학습이 가능해 속도가 빠름
- Python 라이브러리
- xgboost.XGBRegressor
- xgboost.XGBRegressor
■ LightGBM
- 특징
- XGBoost와 함께 가장 각광받는 알고리즘
- XGBoost보다 학습시간이 짧고 메모리 사용량이 작음
- 작은 데이터(10,000건 이하)의 경우 과적합 발생
- Python 라이브러리
- lightgbm.LGBMClassifier
- lightgbm.LGBMRegressor
▶ 부스팅 알고리즘 실습
* 타이타닉 데이터셋
: 생존율을 가장 잘 예측하는 주요 변수 찾아내기
: 학습을 가장 잘 하는 알고리즘 모델 찾기
# 라이브러리 가져오기
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import GradientBoostingClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
# 타이타닉 데이터 읽어오기
# Kaggle 타이타닉 데이터셋 다운로드
titanic_df = pd.read_csv('titanic/train.csv')
# 데이터 전처리
# Pclass: LabelEncoder
# Sex : LabelEncoder
# Age : 결측치 -> 평균으로 대체
# Embarked : 결측치 -> 가장 빈도 수가 높은 값으로 대체
le = LabelEncoder()
titanic_df['Sex'] = le.fit_transform(titanic_df['Sex'])
le2 = LabelEncoder()
titanic_df['Pclass'] = le2.fit_transform(titanic_df['Pclass'])
le3 = LabelEncoder()
titanic_df['Embarked'] = le3.fit_transform(titanic_df['Embarked'])
age_mean = titanic_df['Age'].mean()
titanic_df['Age'] = titanic_df['Age'].fillna(age_mean)
titanic_df['Embarked'] = titanic_df['Embarked'].fillna('S')
# 부스팅 알고리즘 모델링
model_gbm = GradientBoostingClassifier()
model_xgb = XGBClassifier()
model_lgb = LGBMClassifier()
X_features = ['Pclass','Sex', 'Age', 'Fare', 'Embarked']
X = titanic_df[X_features]
y = titanic_df['Survived']
model_gbm.fit(X,y)
model_xgb.fit(X,y)
model_lgb.fit(X,y)
y_gbm_pred = model_gbm.predict(X)
y_xgb_pred = model_xgb.predict(X)
y_lgb_pred = model_lgb.predict(X)
# 정확도(Accuracy)와 f1-score를 출력하는 함수 만들기
def get_score(model_name, y_true, y_pred):
acc = accuracy_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred, average='weighted')
print(model_name, ':', 'acc 스코어: ', acc, ',', 'f1 스코어: ', f1)
# 모델링 결과 출력
get_score('gbm', y, y_gbm_pred)
get_score('xgb', y, y_xgb_pred)
get_score('lgb', y, y_lgb_pred)

728x90
댓글