XGBoost는 기본적으로 회귀 트리 를 기본 학습자로 사용하는 것으로 보입니다 . XGBoost (또는 일반적으로 그라디언트 부스팅)는 여러 기본 학습자를 결합하여 작동합니다. 회귀 트리는 훈련 데이터의 패턴을 추정 할 수 없으므로 3보다 크거나 1보다 작은 입력은 정확하게 예측할 수 없습니다. 모델은 구간에서 입력에 대한 출력을 예측하도록 훈련되었으며 [1,3]
, 3보다 높은 입력에는 3과 동일한 출력이 제공되고 1보다 작은 입력에는 1과 동일한 출력이 제공됩니다.
또한 회귀 트리는 데이터 가 비모수 적 모델이므로 데이터를 직선 으로 간주하지 않으므로 이론적으로 직선보다 복잡한 모양에 적합 할 수 있습니다. 대략적으로, 회귀 트리는 새로운 입력 데이터를 훈련하는 동안 본 훈련 데이터 포인트 중 일부에 할당하고 그에 따라 결과를 생성함으로써 작동합니다.
이는 실제로 데이터에 맞는 초평면 (최상의 직선 )의 최상의 매개 변수를 찾는 파라 메트릭 회귀 (예 : 선형 회귀 ) 와 대조적 입니다. 선형 회귀 는 데이터를 기울기와 절편이있는 직선으로 간주합니다.
당신은 추가하여 GLM (일반화 선형 모델)에 XGBoost 모델의 기본 학습자를 변경할 수 있습니다 "booster":"gblinear"
모델에 params
:
import pandas as pd
import xgboost as xgb
df = pd.DataFrame({'x':[1,2,3], 'y':[10,20,30]})
X_train = df.drop('y',axis=1)
Y_train = df['y']
T_train_xgb = xgb.DMatrix(X_train, Y_train)
params = {"objective": "reg:linear", "booster":"gblinear"}
gbm = xgb.train(dtrain=T_train_xgb,params=params)
Y_pred = gbm.predict(xgb.DMatrix(pd.DataFrame({'x':[4,5]})))
print Y_pred
일반적으로 XGBoost 모델이 특정 방식으로 동작하는 이유를 디버그하려면 모델 매개 변수를 참조하십시오.
gbm.get_dump()
기본 학습자가 선형 모델 인 경우 get_dump 출력은 다음과 같습니다.
['bias:\n4.49469\nweight:\n7.85942\n']
위 코드에서 기본 학습자를 트리 화하므로 출력은 다음과 같습니다.
['0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=2.85\n\t\t4:leaf=5.85\n\t2:leaf=8.85\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=1.995\n\t\t4:leaf=4.095\n\t2:leaf=6.195\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=1.3965\n\t\t4:leaf=2.8665\n\t2:leaf=4.3365\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.97755\n\t\t4:leaf=2.00655\n\t2:leaf=3.03555\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.684285\n\t\t4:leaf=1.40458\n\t2:leaf=2.12489\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.478999\n\t\t4:leaf=0.983209\n\t2:leaf=1.48742\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.3353\n\t\t4:leaf=0.688247\n\t2:leaf=1.04119\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.23471\n\t\t4:leaf=0.481773\n\t2:leaf=0.728836\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.164297\n\t\t4:leaf=0.337241\n\t2:leaf=0.510185\n',
'0:[x<2] yes=1,no=2,missing=1\n\t1:leaf=0.115008\n\t2:[x<3] yes=3,no=4,missing=3\n\t\t3:leaf=0.236069\n\t\t4:leaf=0.357129\n']
팁 : 실제로 xgb.XGBRegressor 또는 xgb.XGBClassifier 클래스는 sci-kit learn API를 따르기 때문에 선호합니다 . sci-kit learn에는 많은 머신 러닝 알고리즘 구현이 있기 때문에 XGB를 추가 라이브러리로 사용하면 XGBoost의 sci-kit 인터페이스를 사용할 때만 워크 플로를 방해하지 않습니다.