본문 바로가기
Data Analytics with python/[Theory]

[Machine Learning][Classification] Classifier Algorithms

by 보끔밥0130 2023. 2. 16.
728x90

▶ 랜덤 포레스트

 

Bagging (Bootstrap aggregating): 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘

 

데이터 세트가 전체 데이터에서 일부가 중첩되게 샘플링 됩니다. 이를 부트스트래핑이라 합니다.

 

bootstrapping : 여러 개의 데이터 세트를 중첩되게 분리하는 것

 

배깅의 대표적인 알고리즘입니다.

 

여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 후 최종적으로 모든 분류기가 보팅을 하여 최종 예측 결정을 합니다.

 

from sklearn.ensemble import RandomForestClassifier as RFC

rf_clf = RFC(random_state= 0)
rf_clf.fit(X_trian, y_train)
y_pred = rf_clf.predict(X_test)
accuracy_score(y_test, y_pred)

 

랜덤 포레스트 하이퍼 파라미터

● n_estimators :결정 트리의 개수 (default 10)

● max_features : 최적의 분할을 위한 최대 피처 개수 (default 'sqrt') # sqrt : root (전체 피처 개수)

● max_depth, min_samples_leaf : 과적합 개선하기 위한 파라미터

 

교차검증과 하이퍼 파라미터 튜닝

https://knote.tistory.com/238

 

[Regression/Classification] 교차 검증과 하이퍼 파라미터 튜닝 + pipeline

GridSearchCV 교차검증과 하이퍼 파라미터 튜닝을 합니다. 랜덤 포레스트 하이퍼 파라미터 튜닝으로 예시 from sklearn.model_selection import GridSearchCV params = { 'n_estimators':[100], 'max_depth' : [6, 8, 10], 'min_samples

knote.tistory.com

 

▶ GBM

Gradient Boosting Machine

 

부스팅 알고리즘 : 여러 개의 약한 학습기를 순차적으로 학습,예측 하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선하면서 학습하는 방식

 

가중치 업데이트를 경사 하강법(Gradient Descent)을 이용합니다.

 

경사하강법은 오류 값 (실제값 - 예측값)을 적게 만드는 함수 즉 , 예측 함수가 F(x)라 하면 h(x) = y - F(x) (오류)를 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트하는 방법입니다. 

 

from sklearn.ensemble import GradientBooostingClassifier

gb_clf = GradientBoostingClassifier(random_state = 0)
gb_clf.fit(X_train, y_train)
y_pred = gb_clf.predict(X_test)
accuracy_score(y_test,y_pred)

 

GBM 하이퍼 파라미터

● n_estimators, max_depth, max_features는 트리 기반 자체의 파라미터

● loss : 비용함수 (default 'deviance')

● learning_rate : 학습률 0~1사이의 값 (default 0.1)

 

◆ XGBoost

eXtra Gradient Boost

 

GBM의 단점 (느린 수행 시간, 과적합 규제)을 해결하였습니다.

 

from xgboost import XGBClassifier as xgb
from xgboost import plot_importance
import matplotlib.pyplot as plt
%matplotlib inline

xgb_wrapper = XGB(n_estimators = 400, learning_rate = 0.1, max_depth = 3)
xgb_wrapper.fit(X_train, y_train)
y_preds = xgb_wrapper.predict(X_test)
y_pred_proba = xgb_wrapper.predict_proba(X_test)[:,1]

fig, ax = plt.subplots(figsize = (10,12))
plot_importance(xgb_wrapper. ax= ax)

 

◆ LightGBM

 

XGBoost보다 학습에 걸리는 시간이 훨씬 적습니다.

 

일반 GBM 계열의 트리 분할 방법인 균형 트리 분할(Level Wise)가 아닌 리프 중심 분할 (Leaf Wise) 방식을 사용하기 때문입니다.

 

최대 손실 값을 가지는 리프 노드를 지속적으로 분할하여 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성됩니다.

 

단, 적은 데이터 세트에 적용할 경우 과적합이 발생하기 쉽습니다.

 

적은 데이터 세트의 기준은 10,000건 이하의 데이터 세트 정도입니다.

 

from lightgbm import LGBMClassifier as LGBM
from lightgbm import plot_importance
import matplotlib.pyplot as plt
%matplotlib inline

lgbm_clf = LGBM(n_estimators = 400)
lgbm_clf.fit(X_train, y_train, early_stopping_rounds = 100, eval_metric = 'logloss', verbose = True)
y_preds = lgbm_clf.predict(X_test)
y_pred_proba = lgbm_clf.predict_proba(X_test)[:, 1]

fig, ax = plt.subplots(figsize = (10,12))
plot_importance(lgbm_clf, ax = ax)

 

728x90

댓글