머신러닝 | 부스팅 (Boosting) 알고리즘 | 지도학습 | 회귀, 분류 분석

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