기계 학습 -그라디언트 부스팅 알고리즘/앙상블 학습

이 게시물은 예제와 함께 기계 학습 알고리즘을 다룹니다.



항목은 다룹니다 :

1. What is Boosting ?

2. What is a Boosting Algorithms ?

3. Examples of Boosting Algorithm

종단 간 구현에 대해서는 다음을 참조하십시오. HealthCare Predicting Length of stay with boosting algorithms

Git Hub에서 코드 풀링: Github/swapanroy

1. 부스팅이란?



Boosting("to Boost", 영어로 증가 또는 개선을 돕거나 장려하는 의미)은 기계 학습에서 기계 모델의 예측 정확도 및 성능을 개선하는 데 사용되는 방법입니다.

2. 부스팅 알고리즘이란?



앙상블 학습 또는 부스팅은 기계 학습 영역에서 가장 유망한 접근 방식 중 하나가 되었습니다. 앙상블 방법은 다중 예측을 생성하고 개별 분류기 간의 평균 투표를 생성하는 원리를 기반으로 합니다.

부스팅 알고리즘의 두 가지 구현

에이다부스트



AdaBoost 또는 Adaptive Boosting은 Boosting 앙상블 모델이며 통계적 분류 메타 알고리즘은 boosted classifier를 교육하는 특정 방법을 나타냅니다. 이 메서드는 현재 반복의 실제 성능을 기반으로 데이터에 대한 매개 변수를 자동으로 조정합니다.

CAT부스트



CATBoost - 다른 기능 중에서 기존 알고리즘과 비교하여 순열 구동 대안을 사용하여 범주형 기능을 해결하려고 시도하는 그래디언트 부스팅 프레임워크를 제공합니다. Catboost는 각 데이터 포인트의 잔차를 계산하고 다른 데이터로 훈련된 모델을 사용합니다. 이러한 방식으로 각 데이터 포인트는 서로 다른 잔차 데이터를 얻습니다. 이러한 데이터는 목표로 평가되며 일반 모델의 학습 시간은 반복 횟수만큼입니다. 많은 모델이 정의에 따라 구현되기 때문에 이 계산 복잡성은 매우 비싸고 시간이 너무 많이 걸립니다.


Python 구현은 Sklearn 및 Catboost 라이브러리를 사용합니다.

데이터 출처: 체류 기간을 예측하기 위한 Kaggle-HealthCare 데이터



주요 라이브러리




데이터 분석에 필요한 라이브러리
import pandas as pd
import numpy as np


모델 및 시각화에 필요한 라이브러리
import matplotlib.pyplot as plt
import seaborn as sns


전처리에 필요한 라이브러리
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler


모델에 필요한 라이브러리
from sklearn.ensemble import AdaBoostClassifier
from catboost import CatBoostClassifier, Pool
from catboost.utils import get_confusion_matrix


검증에 필요한 라이브러리
from sklearn.metrics import confusion_matrix, classification_report, make_scorer, accuracy_score
from sklearn.model_selection import cross_val_score, train_test_split
`

모델의 데이터 읽기 및 데이터 전처리



`df_train=pd.read_csv('../input/av-healthcare-analytics-ii/healthcare/train_data.csv',sep=',')

'plt.figure(무화과 크기=(20,5))
x = sns.countplot(df_train['머물러'], order = df_train['머물러'].value_counts().index)
x.containers의 i에 대해:
x.bar_label(i,)'

다차원에서 훈련과 테스트를 병합하여 데이터를 전처리합니다.


df_merge = [df_train, df_test]
df_merge[0]

비닝


age_value = {'0-10': 0, '11-20': 1, '21-30': 2, '31-40': 3, '41-50': 4, '51-60': 5, '61-70': 6, '71-80': 7, '81-90': 8, '91-100': 9}
stay_value = {'0-10': 0, '11-20': 1, '21-30': 2, '31-40': 3, '41-50': 4, '51-60': 5, '61-70': 6, '71-80': 7, '81-90': 8, '91-100': 9, 'More than 100 Days': 10}

Age 및 Stay를 Int 값으로 바꾸기


df_merge[0]['Age'] = df_merge[0]['Age'].replace(age_value.keys(), age_value.values())
df_merge[0]['Stay'] = df_merge[0]['Stay'].replace(stay_value.keys(), stay_value.values())
df_merge[1]['Age'] = df_merge[1]['Age'].replace(age_value.keys(), age_value.values())


Adaboost 분류기 적용



AdaBoost 분류자는 원래 데이터 세트에 분류자를 맞추는 것으로 시작한 다음 동일한 데이터 세트에 분류자의 추가 사본을 맞추지만 오류 분류 인스턴스의 가중치가 조정되는 메타 추정기입니다.

ada_classifier = AdaBoostClassifier(n_estimators=5)
ada_classifier.fit(X_train, y_train)
pred_ada = ada_classifier.predict(X_test)

# Cross-validation
scores = cross_val_score(ada_classifier,X_test,y_test, cv=12)
print('Accuracy score',round(scores.mean() * 100,2))
print('Confusion Matrix\n',confusion_matrix(y_test, pred_ada))

Accuracy score 33.8

CatBoost 적용 - 그래디언트 알고리즘



그래디언트 부스팅 알고리즘은 각 모델이 이전 모델에서 남은 오류를 예측하려고 시도하는 더 단순한(약한) 예측 모델을 순차적으로 구축하여 작동합니다. 검색, 추천 시스템, 개인 비서, 자율주행차, 일기예보 등에 사용됩니다.


CatBoost 모델의 중요한 매개변수
  • 반복 - 훈련할 트리 수를 지정하는 정수를 허용합니다. 기본값은 1000입니다.
  • learning_rate - 훈련 과정 중 학습률을 지정합니다. 기본값은 0.03입니다.
  • l2_leaf_reg - 손실 함수의 L2 정규화 계수를 지정하는 float를 허용합니다. 기본값은 3입니다.
  • loss_function - 훈련 중에 사용되는 메트릭을 지정하는 문자열을 허용합니다. 그래디언트 부스팅 알고리즘은 상황에 따라 손실 함수 출력을 최소화/최대화하려고 합니다.
  • eval_metric - 교육 중에 제공된 평가 세트에서 평가할 메트릭을 지정하는 문자열을 허용합니다. loss_function과 동일한 옵션이 있습니다.

  • model = CatBoostClassifier(iterations=1000,
                               learning_rate=0.3,
                               depth=10,
                               l2_leaf_reg = 3,
                               random_strength =2,
                               loss_function='MultiClass',
                               eval_metric='MultiClass')
    




    피팅 모델 및 예측 정확도



    model.fit(X_train,
              y_train,
              eval_set=eval_dataset,
              verbose=True)
    
    print(model.get_best_score())
    cm = get_confusion_matrix(model, eval_dataset)
    print(cm)
    predict_accuracy_on_test_set = (cm[0,0] + cm[1,1])/(cm[0,0] + cm[1,1]+cm[1,0] + cm[0,1])
    ax = sns.heatmap(cm, linewidth=1)
    plt.show()
    print("catboost Acc : ", predict_accuracy_on_test_set)
    

    Accuracy : 0.40188104509483735
    참조:
    https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html

    https://github.com/catboost/catboost

    Unsplash의 Jen Theodore 님의 사진

    좋은 웹페이지 즐겨찾기