머신러닝 | 부스팅 (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

    댓글