Kaggle Champions는 Xgboost의 맹세 – 당신도 할 수 있습니다.
머신 러닝을하고 있다면 Kaggle 경쟁을 지배하고 보스와 같은 표 형 데이터를 처리하는 모델의 속삭임을 들었을 가능성이 있습니다. 예, 우리는 이야기하고 있습니다. xgboost.
그러나 Xgboost가 그렇게 강력하게 만드는 이유는 무엇입니까? 더 중요한 것은 매개 변수와 전문 용어의 정글에서 길을 잃지 않고 실제로 어떻게 사용합니까?
이것은 설치에서 최적화에 이르기까지 Xgboost에 대한 실습적이고 인간 친화적 인 가이드입니다.
모두가 Xgboost를 좋아하는 이유 (Kaggle Grandmasters 포함)
Xgboost는 극단적 인 그라디언트 부스트. 그 중심에는 그라디언트 부스트 의사 결정 트리의 효율적이고 확장 가능한 구현입니다. 그것은 평범한 영어로 의미하는 바 : 그것은 종이 비행기를 완성하려는 아이처럼, 반복적으로 실수로부터 배워서 모델을 구축합니다.
그러나 기존 GBDT 모델과 달리 XGBoost는 속도와 정확성에 대해 최적화되어 있습니다. 병렬화를 지원하고 누락 데이터를 우아하게 처리하며 대형 데이터 세트에서 전투 테스트를 거쳐 있습니다.
시작하기 : 설치 및 설정
터미널 (또는 Jupyter Notebook)을 열고 패키지를 설치하십시오.
pip install xgboost
올바르게 설치된 것을 다시 확인하려면 :
import xgboost as xgb
print(xgb.__version__)
모델을 훈련합시다 (Iris, ML의 “Hello World”)
우리는 3 가지 꽃 유형의 고전적인 분류 작업 인 유명한 아이리스 데이터 세트를 사용할 것입니다. 데이터를 준비하는 방법은 다음과 같습니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
만나다 DMatrix
: Xgboost의 비밀 무기
데이터를 모델에 공급하기 전에 Xgboost의 최적화 된 형식으로 래핑하십시오.
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)
훈련합시다
params = {
'objective': 'multi:softmax',
'num_class': 3,
'max_depth': 3,
'eta': 0.2,
'seed': 42
}
model = xgb.train(params, dtrain, num_boost_round=10)
preds = model.predict(dtest)
성능 평가 :
from sklearn.metrics import accuracy_score
print("Accuracy:", accuracy_score(y_test, preds))
상자에서 ~ 95%+ 정확도가 약을 볼 수 있습니다. 나쁘지 않습니다.
기계 조정 : GridSearch in action
기본 설정이 실제 작업에 충분한 척하지 마십시오. 더 나은 모델로가는 방법을 그리드 검색하는 방법은 다음과 같습니다.
from sklearn.model_selection import GridSearchCV
from xgboost import XGBClassifier
param_grid = {
'max_depth': [3, 5],
'learning_rate': [0.1, 0.3],
'n_estimators': [50, 100]
}
grid = GridSearchCV(XGBClassifier(use_label_encoder=False), param_grid, scoring='accuracy', cv=3)
grid.fit(X_train, y_train)
print("Best params:", grid.best_params_)
기능 중요성 : 누가 가장 중요합니까?
블랙 박스 내부를 들여다보고 싶습니까?
import matplotlib.pyplot as plt
xgb.plot_importance(model)
plt.show()
모델이 가장 많이 의존 한 기능을 볼 수 있습니다. 간단하지만 놀랍게도 통찰력이 있습니다.
SHAP : Pro와 같은 예측을 설명하십시오
모델 설명에 대해 Nerdy를 얻으려면 Shap을 설치하십시오.
pip install shap
그 다음에:
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)
이제 당신은 단지 훈련 모델이 아닙니다 그들을 이해합니다.
보너스 : 회귀 및 이진 작업을위한 xgboost
분류는 XGBoost가하는 것이 아닙니다. 주택 가격을 예측하고 싶습니까?
params = {'objective': 'reg:squarederror', 'eta': 0.1}
이진 분류를 위해?
params = {'objective': 'binary:logistic', 'eta': 0.3}
나머지 프로세스는 거의 동일합니다.
고급 부록 : XGBOOST를 통한 분산 교육
데이터 세트가 수백만 행에 도달하기 시작하거나 모든 성능을 짜내려면 배포 할 때입니다.
옵션 1 : 멀티 GPU 교육
XGBoost에는 GPU 지원이 내장되어 있습니다. 방금 설정했습니다 tree_method
에게 gpu_hist
:
params = {
'tree_method': 'gpu_hist',
'predictor': 'gpu_predictor',
'objective': 'binary:logistic',
'max_depth': 4,
'eta': 0.3
}
XGBoost의 GPU 지원 버전을 설치하고 CUDA가 설정되어 있는지 확인해야합니다.
옵션 2 : Dask가있는 분산 CPU/GPU
Dask는 클러스터 (로컬 또는 클라우드)를 통해 XGBoost를 확장하는 좋은 방법입니다.
from dask.distributed import Client
from dask_cuda import LocalCUDACluster
from xgboost.dask import DaskDMatrix, train
client = Client(LocalCUDACluster())
# Assume X_dask and y_dask are Dask arrays or DataFrames
dtrain = DaskDMatrix(client, X_dask, y_dask)
params = {"objective": "reg:squarederror", "tree_method": "gpu_hist"}
output = train(client, params, dtrain, num_boost_round=100)
Dask는 데이터를 중단하고 여러 GPU 또는 CPU에 걸쳐 스케줄링하는 무거운 리프팅을 처리합니다.
옵션 3 : XGBOOST4J와 함께 Spark를 사용하십시오
Apache Spark를 실행하는 엔터프라이즈 규모 시스템의 경우 Xgboost는 JVM 호환 솔루션을 제공합니다. XGBOOST4J. Spark ML 파이프 라인에 직접 통합되며 높은 처리량으로 거대한 데이터를 처리 할 수 있습니다.
설정은 조금 더 복잡하지만 이미 Spark Infrastructure를 실행하고 있다면 그만한 가치가 있습니다.
최종 생각 : xgboost를 사용해야합니까?
예 – 데이터를 구조화하고 빠르고 강력하며 유연한 것이 필요한 경우. Xgboost는은 총알이 아니지만 가깝습니다.
이 가이드는 표면을 간신히 긁지 않습니다. 고급 정규화, 맞춤형 손실 기능, 조기 정지 및 분산 GPU 교육으로 야생으로 갈 수 있습니다. 그러나 대부분의 사용 사례에서 우리가 여기에서 다루는 것을 마스터하면 사용자의 90%가 앞서 나옵니다.
Post Comment