본문 바로가기
IT & 개발공부/파이썬(Python)

머신러닝 코드 실습 - 부스팅(GBM, XGBoost, LightGBM) - 1

by 규딩코딩 2023. 8. 26.

 

- 이번 글에서는 Ensemble의 Boosting  에서 영향을 받은 여러 알고리즘들에 대하여 학습을 진행해보도록 하겠다.

 

1. GBM(Gradient Boosting Machine)

- 부스팅 알고리즘은 여러 개의 약한 학습기(weak learner)를 결합하여 강력한 앙상블 모델을 생성하는 알고리즘이다. GBM은 데이터의 이전 학습기에서의 오차를 보완하도록 다음 학습기를 학습시키는 방식으로 동작한다. 쉽게말해, 이전 학습기의 오차를 줄이기 위해 새로운 학습기를 추가해 나가는 방식으로 모델을 개선시킨다. 이때 각 학습기는 이전 학습기들이 만든 오차의 경사(gradient)를 활용하여 더 나은 예측을 하도록 업데이트된다.

 

- GBM 은 CART 기반의 다른 알고리즘과 마찬가지로 분류와 회귀 모두 가능하다. 사이킷런에서 제공하는 GradientBoostingClassifier 클래스를 이용하여 사용자 행동 데이터 세트를 예측 분류하는 코드를 작성하고, 흔히 GBM의 큰 단점으로 알려져있는 수행 시간을 같이 측정해보자.

 

1-1 데이터 불러오기

- 이전 글에서 사용했던 human dataset을 사용해주도록 하겠다.

def get_human_dataset( ):

    # 각 데이터 파일들은 공백으로 분리되어 있으므로 read_csv에서 공백 문자를 sep으로 할당.
    DATA_PATH = '/content/drive/MyDrive/YOURPATH'
    feature_name_df = pd.read_csv(DATA_PATH + '/human_activity/features.txt',sep='\s+',
                        header=None,names=['column_index','column_name'])

    # 중복된 피처명을 수정하는 get_new_feature_name_df()를 이용, 신규 피처명 DataFrame생성.
    new_feature_name_df = get_new_feature_name_df(feature_name_df)

    # DataFrame에 피처명을 컬럼으로 부여하기 위해 리스트 객체로 다시 변환
    feature_name = new_feature_name_df.iloc[:, 1].values.tolist()

    # 학습 피처 데이터 셋과 테스트 피처 데이터을 DataFrame으로 로딩. 컬럼명은 feature_name 적용
    X_train = pd.read_csv(DATA_PATH + '/human_activity/train/X_train.txt',sep='\s+', names=feature_name )
    X_test = pd.read_csv(DATA_PATH + '/human_activity/test/X_test.txt',sep='\s+', names=feature_name)

    # 학습 레이블과 테스트 레이블 데이터을 DataFrame으로 로딩하고 컬럼명은 action으로 부여
    y_train = pd.read_csv(DATA_PATH + '/human_activity/train/y_train.txt',sep='\s+',header=None,names=['action'])
    y_test = pd.read_csv(DATA_PATH + '/human_activity/test/y_test.txt',sep='\s+',header=None,names=['action'])

    # 로드된 학습/테스트용 DataFrame을 모두 반환
    return X_train, X_test, y_train, y_test

 

 

- 데이터 불러오기

from sklearn.ensemble import GradientBoostingClassifier
import time
import warnings

warnings.filterwarnings('ignore')
X_train, X_test, y_train, y_test = get_human_dataset()

 

1-2 수행시간 측정하기

start_time = time.time()
gb_clf = GradientBoostingClassifier(random_state=0)
gb_clf.fit(X_train, y_train)
gb_pred = gb_clf.predict(X_test)
gb_accuracy = accuracy_score(y_test, gb_pred)
print('GBM 정확도: {0:.4f}'.format(gb_accuracy))
print("수행시간: {0:.1f}초 ".format(time.time() - start_time))

>>>

GBM 정확도: 0.9386

수행시간: 1027.1초

보통의 알고리즘 모델 K-fold 를 10으로 설정했을 때도 1-2분 걸리는 기기에서 17분 이상이 소요되는 기적을 만들어내신 모습

 

- 대다수의 GBM 이 랜덤 포레스트 보다는 예측 성능이 조금 뛰어난 것으로 알려져있으나, 확인한 것처럼 수행 시간이 오래 걸리고 하이퍼 파라미터 튜닝 노력도 더 필요한 단점이 존재한다.

- 이러한 GBM의 처리 속도를 개선하고자 GBM 기반의 다양한 머신 러닝 모델 중 XGBoost 와 LigthGBM이 있다.

* GBM 하이퍼 파라미터

더보기

- 트리 기반이므로 n_estimators, max_depth, max_features를 GBM에서도 사용한다.

n_estimators

  • weak learner의 개수
  • weak learner 가 순차적으로 오류를 보정하므로 개수가 많을수록 에측 성능이 일정 수준까지는 좋아질 수 있다.
  • 하지만 개수가 많을 수록 수행 시간이 오래 걸리는 단점
  • 디폴트값은 100

max_ features

  • 최적 분할을 위해 고려할 최대 피처 개수. 디폴트값은 없어서 데이터의 모든 피처를 사용해 분할 수행
  • int 형으로 지정하면 대상 피처 개수, float 형으로 지정하면 전체 피처 중 대상 피처의 퍼센트
  • "sqrt" 로 지정하면 전체 피처개수의 제곱근 수 만큼 선정한다("auto" 도 동일).
  • "log"로 지정하면 전체 피처 중 log2(전체 피처개수) 선정

max_depth

  • 트리의 최대 깊이를 규정하는 파라미터
  • 디폴트값은 없어서, 완벽하게 클래스 결정 값이 될 때까지 깊이를 계속 키우며 분할하거나 노드가 가지는 데이터 개수가 min_samples_split 보다 작아질 때까지 계속 깊이를 증가시킴
  • 깊이가 깊어지면 min_samples_split 설정대로 최대 분할하여 과적합할 수 있으므로 적절한 값으로 제어해주어야 한다.

 min_samples_split

노드를 분할하기 위한 최소한의 샘플 데이터 수로 과적합을 제어하는 데 사용되며, 디폴트값은 2로 작게 설정할수록 분할되는 노드가 많아져 과적합 가능성이 증가하는 결정 트리 파라미터로, LightGBM에서는 min_child_samples를 사용하여 유사한 효과를 얻을 수 있다

 

learning_rate

  • GBM이 학습을 진행할 때마다 적용하는 학습률, Weak learner가 순차적으로 오류 값을 보정해 나가는 데 적용하는 계수
  • 기본값은 0.1으로, 0~1 사이의 값을 지정할 수 있음.
  • 너무 작은 값을 적용하면 업데이트 되는 값이 작아져서 최소 오류 값을 찾아 예측 성능이 높아질 가능성이 높다.
  • 많은 Weak learner는 순차적인 반복이 필요해서 수행시간이 오래 걸리고, 너무 작게 설정하면 모든 Weak learner 의 반복이 완료되어도 최소 오류 값을 찾지 못할 수 있다.
  • 반대로 큰 값을 적용하면 최소 오류 값을 찾지 못하고 그냥 지나쳐 버려 에측 성능이 떨어질 가능성이 높아지지만, 빠른 수행이 가능해진다.

 

2. XGBoost(eXtreme Gradient Boosting)

- GBM을 기반으로한 강력한 머신 러닝 알고리즘으로, GBM의 성능을 높이기 위해 여러 가지 기술적인 개선을 적용하여 개발되었다. 이 알고리즘은 데이터 분석 및 예측 모델링에서 널리 사용되며, 특히 구조화된 데이터에서 좋은 성능을 보이는 특징을 가지고 있다. 

- GBM 의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 해결해서 매우 각광받고 있다. 이는 병렬 CPU환경에서 병렬 학습이 가능하여 기존 GBM 보다 빠르게 학습할 수 있기 때문이다.

* 주요 장점

  • XGBoost 은 뛰어난 예측 성능, GBM 대비 빠른 수행시간, 과적합 규제 기능 뿐아니라 다른 장점도 가지고 있다.
  • Tree pruning(나무 가지치기) : 해당 기능으로 더 이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수를 더 줄여준다.
  • 자체 내장된 교차 검증 : 반복 수행마다 내부적으로 학습 데이터 세트와 평가 데이터 세트에 대한 교차 검증을 수행하여 최적화된 반복 수행 횟수를 가질 수 있다. 지정된 반복 횟수가 아니라 교차 검증을 통해 평가 데이터 세트의 평가 값이 최적화되면 반복을 중간에 멈출 수 있는 조기 중단 기능도 있다.
  • 결손값 자체 처리 기능도 가지고 있다

* XGBoost 하이퍼 파라미터

: XGBoost 는 GBM 과 유사한 하이퍼 파라미터를 동일하게 가지고 있으며, 조기중단(early stopping)과 과적합을 규제하기 위한 하이퍼 파라미터 등이 추가 되었다. 또한, 자체적으로 교차 검증, 성능 평가 피처 중요도 시각화 기능을 가지고 있다.

조기중단(early stopping)기능은 모델의 수행 속도를 향상시키 위한 대표적인 기능이다. 기본 GBM의 경우 n_estimators(또는 num_boost_rounds)에 지정된 횟수만큼 반복적으로 학습 오류를 감소시키며 학습을 진행하여 중간에 반복을 멈출 수 없고 n_estimators에서 지정된 횟수를 다 완료해야 한다. XGBoost와 다음에 소개할 LightGBM에는 모두 조기 중단 기능이 있어 지정한 부스팅 반복 횟수에 도달하지 않더라도 예측 오류가 더 이상 개선되지 않으면 반복을 끝까지 수행하지 않고 중지하여 수행 시간을 개선할 수 있다.

예를 들어 n_estimators가 200이고, 조기 중단 파라미터 값을 50으로 설정하면, 1부터 200회까지 부스팅을 반복하다가 50회를 반복하는 동안 학습 오류가 감소하지 않으면 더 이상 부스팅을 진행하지 않고 종료한다.

더 상세한 예로 설명하자면 100회째의 학습 오류 값이 0.8인데 101회~150회 반복하는 동안 예측 오류가 0.8보다 작은 값이 하나도 없으면 부스팅을 종료하는 기능이다.

 

* 학습 태스크 파라미터

더보기

objective : 최소값을 가져야 할 손실 함수를 정의. XGBoost는 많은 유형의 손실함수를 사용할 수 있고, 주로 사용되는 손실함수는 이진 분류인지 다중 분류인지에 따라 다르다.

 

binary:logistic : 이진 분류일 때 적용

 

multi:softmax : 다중 분류일 때 적용. 손실함수가 multi:softmax 일 경우에는 레이블 클래스의 개수인 num_class 파라미터를 지정해야함

 

multi:softprob : multi:softmax와 유사하나 개별 레이블 클래스의 해당되는 예측 확률을 반환

 

eval_metric : 검증에 사용되는 함수를 정의합니다. 기본값은 회귀인 경우 RMSE, 분류일 경우 Error

     종류 : RMSE / MAE / Logloss / Error / merror / mlogloss / AUC

 

* 주요 부스터 파라미터

더보기

eta [default=0.3, alias: learning_rate] : GBM의 학습률(learning rate)과 같은 파라미터이다. 0에서 1 사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트 되는 학습률 값.

파이썬 래퍼 기반의 XGBoost 에서는 디폴트가 0.3 이고, 사이킷런 래퍼 클래스를 이용할 경우 eta > learning_rate 파라미터로 대체되며 디폴트가 0.1이다. 보통은 0.01~0.2 사이의 값을 선호

 

num_boost_rounds  =  GBM의 n_estimators

 

min_child_weight [default = 1] : 트리에서 추가적으로 가지를 나눌지를 결정하기 위해 필요한 데이터들의 weight 총합. 값이 클수록 분할을 자제하며, 과적합을 조절하기 위해 사용

 

gamma [default=0, alias: min_split_loss] : 트리의 리프 노드를 추가적으로 나눌지 결정할 최소 손실 감소 값. 해당 값보다 큰 손실(loss)이 감소된 경우에 리프 노드를 분리하고, 값이 클수록 과적합 감소 효과가 있다.

 

max_depth [default=6] = 우리가 아는 그거, 0을 지정하면 깊이에 제한이 없음. 값이 높으면 특정 피처 조건에 특화되어 룰 조건이 만들어지므로 과적합 가능성이 높아지며 보통은 3~10 사이의 값을 적용

 

sub_sample [default=1] : GBM에서도 동일한 이름으로 사용. 트리가 커져서 과적합되는 것을 제어하기 위해 데이터를 샘플링하는 비율을 지정. 값이 0.5라면 전체 데이터의 절반을 트리를 생성하는데 사용한다. 0에서 1사이의 값이 가능하며, 일반적으로 0.5~1사이의 값을 사용

 

※과적합 문제가 심각할 때?

더보기
  • eta(learning_rate)값을 낮춰본다. eta 값을 낮출 경우 num_round(또는 n_estimators)는 반대로 높여줘야 한다.
  • max_depth 값을 낮춰본다
  • min_child_weight 값을 높여본다.
  • gamma 값을 높여본다
  • subsample 과 colsample_bytree를 조정하는 것도 트리가 너무 복잡하게 생성되는 것을 막아 과적합 문제에 도움이 된다.

 

★ 실습

: 위스콘신 대학병원 유방암 데이터 세트를 분류 모델인 XGBClassifier를 이용해 예측해보도록 하자.

 

1. 데이터 설명

- 위스콘신 유방암 데이터 세트는 종양의 크기, 모양 등의 다양한 속성값을 기반으로 악성 종양 / 양성 종양을 분류한 데이터 세트이다.

 

2. 라이브러리 불러오기 및 설정

import xgboost as xgb
from xgboost import plot_importance
import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings('ignore')

 

3. 데이터 불러오기

dataset = load_breast_cancer()
X_features = dataset.data # 독립변수
y_label = dataset.target # 종속변수

cancer_df = pd.DataFrame(data = X_features, columns=dataset.feature_names) # 독립변수
cancer_df['target'] = y_label # 종속변수
cancer_df.head(3)

 

- 종양의 크기와 모양에 관련된 많은 속성이 숫자형 값으로 되어있다. 타깃 레이블 값은 악성인 'malignant' 가 0, 양성인 'benign'이 1로 되어있다. 타켓 값들의 분포를 확인해보면 다음과 같다.

 

- 악성인 0값이 212개이고, 양성인 1값이 357개 이다.

print(dataset.target_names)
print(cancer_df['target'].value_counts())

4. 데이터 분리

- 데이터 세트의 80%를 학습용으로, 20%를 테스트용으로 추출한 뒤 이 80%의 학습용 데이터에서 90%를 최종학습용, 10%를 검증용으로 분할하도록 하겠다. 검증용 데이터 세트를 별도 분할하는 이유는 XGBoost에서 제공하는 검증 성능 평가와 조기 중단(Early stopping)을 실습해보기 위함이다.

- cancer_df의 맨 마지막 칼럼이 타겟 속성들의 레이블이므로 피처용 DataFrame은 첫번째 칼럼에서 맨 마지막 두번째 칼럼까지를 슬라이싱으로 추출했다.

# 종속변수와 독립변수로 분리
X_features = cancer_df.iloc[:, :-1] # 마지막컬럼(타겟) 제외 후, 나머지 컬럼 가져오기
y_label = cancer_df.iloc[:, -1] # 3 마지막컬럼만 가져오기

# 전체 데이터 중 80% 학습 데이터, 20% 테스트용 데이터로 분리
X_train, X_test, y_train, y_test = train_test_split(X_features, y_label, test_size=0.2, random_state=1)

# X_train 과 y_train 데이터를 다시 쪼개어 90% 학습 데이터, 10% 검증용 데이터로 분리
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.1, random_state=1)

print(X_train.shape, X_tr.shape, X_val.shape, X_test.shape)

 

결과적으로 학습용으로 455개와 테스트용 114개를 먼저 나누고, 학습용에서 다시 최종 학습용 409개와 검증용 46개로 나누어 다음과 같은 결과가 print 된다.

=> (455, 30), (409, 30), (46, 30), (114, 30) 

 

5. 데이터 변환

- 파이썬 래퍼의 XGBoost와 사이킷런의 차이는 여러 가지가 있지만, 먼저 눈에 띄는 차이는 XGBoost만의 전용 데이터 객체인 DMatrix를 사용한다는 점이다. 때문에 Numpy 또는 Pandas 로 되어 있는 학습/검증/테스트용 데이터 세트를 모두 전용 객체인 DMatrix로 생성하여 모델에 입력해 줘야한다. DMatrix의 주요 입력 파라미터는 data 와 label 이다. data는 피처 데이터 세트이며, label은 분류의 경우에 레이블 데이터 세트 회귀의 경우 숫자형인 종속값 데이터 세트이다.

 

- 다음 코드는 실제 DataFrame 기반의 학습 데이터 세트와 테스트 데이터 세트를 DMatrix로 변환하는 코드이다.

# 만약 구버전 XGB에서 DataFrame으로 DMatrix 생성이 안 될 경우 X-train.values로 넘파이 변환.

dtr = xgb.DMatrix(data = X_tr, label=y_tr) # 학습
dval = xgb.DMatrix(data = X_val, label=y_val) # 검증
dtest = xgb.DMatrix(data = X_test, label=y_test) # 테스트

 

6. 하이퍼 파라미터 설정

- 하이퍼 파라미터는 간단하게 몇 가지만 다음과 같이 설정해주도록 하겠다. 주로 딕셔너리 형태로 입력한다.

# 학습률 eta는 XGBClassifier를 사용할 경우 learning_rate
# 예제 데이터가 0 또는 1인 이진 분류이므로 목적함수(objective)는 이진 로지스틱(binary:logistic)
# 오류 함수의 성능 평가 지표는 logloss, num_round(부스팅 반복 횟수)는 300회
params = {
    'max_depth' : 3,
    'eta' : 0.05,
    'objective' : 'binary:logistic',
    'eval_metric' : 'logloss' # 오차
}

num_rounds = 300

 

7. 모델 학습

- 설정한 하이퍼 파라미터로 모델을 학습시켜볼 차례이다. 여기서 위의 4.데이터 분리에서 언급했던 조기 중단 기능을 사용해보도록 하자. 조기 중단은 수행 성능을 개선하기 위해 더 이상 지표 개선이 없을 경우에 num_boost_round 횟수를 모두 채우지 않고 중간에 빠져 나올 수 있도록 하는 기능이다.

"더 이상 지표개선이 없다" 라는 판단을 하기 위해 주로 별도의 검증 데이터 세트를 이용한다. XGBoost는 학습 반복 시마다 검증 데이터 세트를 이용해 성능을 평가할 수 있는 기능을 제공하고 있다. 조기 중단은 XGBoost의 train() 함수에 early_stopping_rounds 파라미터를 입력하여 설정한다. 해당 기능을 사용하기 위해서는 반드시 평가용 데이터 세트 지정과 eval_metric을 함께 설정해야 한다. XGBoost는 반복마다 지정된 평가용 데이터 세트에서 eval_metric 의 지정된 평가 지표로 예측 오류를 측정한다.

* eval_metric 은 평가 세트에 적용할 성능 평가 방법으로 분류일 경우 주로 'error' (분류오류) 'logloss'를 적용한다.

 

- 위 내용을 코드로서 다음과 같이 구현할 수 있다.

# 학습 데이터 셋은 train, 평가 데이터 셋은 eval로 명명
eval_list = [(dtr, 'train'), (dval, 'eval')]

# 하이퍼 파라미터와 early stopping 파라미터를 train() 함수의 파라미터로 전달
xgb_model = xgb.train(params=params, dtrain=dtr, num_boost_round=num_rounds,
                      early_stopping_rounds=50, evals = eval_list)

 

- 이제 학습 반복 시마다 evals 에 설정된 데이터 세트에 대해 평가 지표 결과가 출력되고, train()은 학습이 완료된 모델 객체를 반환한다.

(중략)

- train() 으로 학습을 수행하며 반복 시마다 train-logloss 와 eval-logloss 가 지속적으로 감소하고 있는데, num_boost_round를 300으로 설정했음에도 300 번을 반복하지 않고 237번째 반복에서 완료했음을 볼 수 있다. 출력 결과를 자세히 보면 187번째 반복에서 eval-logloss 로 표시되는 검증 데이터에 대한 logloss 값이 0.7978로 가장 낮다. 이후 188번부터 237번까지 early_stopping_rounds로 지정된 50회 동안 logloss 값이 이보다 향상되지 않았기 때문에 더 이상 반복하지 않고 멈춘 것이다.

 

8. 예측

- 모델 학습이 완료되었으면 이를 이용해 테스트 데이터 세트에 예측을 수행해보자. 파이썬 래퍼 XGBoost는 train() 함수를 호출해 학습이 완료된 모델 객체를 반환하게 되는데, 이 모델 객체는 예측을 위해 predict() 메서드를 이용한다.

유의할 점 한가지는 사이킷런의 predict() 메서드는 예측 결과 클래스 값(0 또는 1)을 반환하는데 반해 XGBoost의 predict() 는 예측 결과값이 아닌 예측 결과를 추정할 수 있는 확률값을 반환한다는 것이다.

 

- 본 실습에서는 암이 악성인지 양성인지를 판단하는 이진 분류이므로 예측 확률이 0.5보다 크면 1 그렇지 않으면 0으로 예측 값을 결정하는 로직을 다음 코드와 같이 추가해주면 된다.

pred_probs = xgb_model.predict(dtest)
print('predict( ) 수행 결과값을 10개만 표시, 예측 확률 값으로 표시됨')
print(np.round(pred_probs[:10],3))

# 예측 확률이 0.5 보다 크면 1 , 그렇지 않으면 0 으로 예측값 결정하여 List 객체인 preds에 저장
preds = [ 1 if x > 0.5 else 0 for x in pred_probs ] # 리스트 컴프리헨션
print('예측값 10개만 표시:',preds[:10])

 

9. 평가

- 다음과 같이 정의된 get_clf_eval 함수를 적용하여 XGBoost 모델의 예측 성능을 평가할 수 있다.

from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.metrics import precision_score, recall_score
from sklearn.metrics import f1_score, roc_auc_score

def get_clf_eval(y_test, pred=None, pred_proba=None):
    confusion = confusion_matrix( y_test, pred)
    accuracy = accuracy_score(y_test , pred)
    precision = precision_score(y_test , pred)
    recall = recall_score(y_test , pred)
    f1 = f1_score(y_test,pred)
    # ROC-AUC 추가
    roc_auc = roc_auc_score(y_test, pred_proba)
    print('오차 행렬')
    print(confusion)
    # ROC-AUC print 추가
    print('정확도: {0:.4f}, 정밀도: {1:.4f}, 재현율: {2:.4f},\
    F1: {3:.4f}, AUC:{4:.4f}'.format(accuracy, precision, recall, f1, roc_auc))

get_clf_eval(y_test, preds, pred_probs)

 

-  테스트 실제 레이블 값을 가지는 y_test 와 예측 레이블인 preds, 그리고 예측 확률인 pred_proba 를 인자로 입력하면 다음과 같이 결과를 얻을 수 있다.

 

10. 피처 중요도 시각화

- XGBoost의 plot_importance() API는 피처 중요도를 막대그래프 형식으로 나타내준다. plot_importance() 호출 시 파라미터로 앞에서 학습이 완료된 모델 객체 및 맷플러립의 ax 객체를 입력하기만 하면 된다.

- 그래프는 F스코어를 기반으로 해당 피처의 중요도를 나타낸다. F score는 해당 피처가 트리 분할 시 얼마나 자주 사용되었는지를 지표로 나타낸 값이다.

import matplotlib.pyplot as plt
%matplotlib inline

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

 

11. 기타 참고 사항

- 결정트리에서 보여준 트리 기반 규칙 구조도 시각화할 수 있다. xgboost.to_graphviz( ) API 활용

 

- 사이킷런의 GridSearchCV와 유사하게 데이터 세트에 대한 교차 검증 수행 후 최적 파라미터를 구할 수 있는 방법을 cv( ) API로 제공한다. xgb.cv의 반환값은 데이터 프레임이다.
xgboost.cv(...) <= 주요 인자

  • params (dict) : 부스터 파라미터
  • dtrain (DMatrix) : 학습 데이터
  • num_boost_round(int) : 부스팅 반복 횟수
  • nfold(int) : CV 폴드 개수
  • stratified (bool) : CV 수행 시 층화 표본 추출 수행 여부
  • metrics (string or list of strings) : CV 수행 시 모니터링할 성능 평가 지표
  • early_stopping_rounds (int) : 조기 중단 활성화

 

 

 

 

 

이 글은 파이썬 머신러닝 완벽 가이드 개정 2판(권철민, 2022)을 일부 참고하여 작성하였습니다.

반응형