Machine Learning Academy · Lektion

XGBoost: regularisering, tidigt stopp och egenskapernas betydelse

Ni kommer att träna en XGBClassifier, aktivera tidigt stopp på ett valideringsset och rita poäng för egenskapernas betydelse för att identifiera de mest prediktiva kolumnerna.

Lektion 2 av 413 steg

XGBoost: regularisering, tidigt stopp och egenskapernas betydelse är en gratis lektion i Machine Learning Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Machine Learning Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.

Vad är XGBoost?

XGBoost (eXtreme Gradient Boosting) är ett högoptimerat bibliotek för gradient boosting som dominerade Kaggle-tävlingar från och med 2014. Det förbättrar scikit-learns GradientBoostingClassifier på tre huvudsakliga sätt: (1) inbyggd L1- och L2-regularisering av trädvikter för att minska överanpassning, (2) en andra ordningens Taylorutveckling av förlusten för mer exakta gradientuppskattningar och (3) en mycket effektiv approximerad histogram-baserad algoritm för att hitta splitpunkter som kan skalas till dataset med miljontals rader.

Installera och importera XGBoost

XGBoost är ett fristående bibliotek som installeras separat från scikit-learn. Det tillhandahåller ett sklearn-kompatibelt API genom XGBClassifier och XGBRegressor, så att Ni kan använda det med cross_val_score, GridSearchCV och Pipelines precis som vilken scikit-learn-estimator som helst. XGBoost:s ursprungliga API använder xgb.DMatrix och xgb.train() och erbjuder mer detaljerad kontroll över early stopping och anpassade målfunktioner.

# Install: pip install xgboost
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = xgb.XGBClassifier(n_estimators=200, learning_rate=0.1, max_depth=3,
                           use_label_encoder=False, eval_metric='logloss', random_state=42)
model.fit(X_train, y_train)
print('XGBoost test accuracy:', model.score(X_test, y_test))

XGBoost-regularisering: lambda och alpha

XGBoost tillhandahåller två regulariseringstermer: reg_lambda (L2-straff på lövv ikter, standardvärde=1) och reg_alpha (L1-straff på lövv ikter, standardvärde=0). L2-regularisering krymper lövv ikterna mjukt mot noll; L1 kan sätta vissa lövv ikter till exakt noll (en gles trädstruktur). Båda minskar överanpassning på brusiga dataset. Dessutom kräver min_child_weight en minsta summa av observationsvikter i en barnnod innan en split görs, vilket fungerar som en begränsning av minsta antal observationer per löv.

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score

X, y = load_breast_cancer(return_X_y=True)
for lam in [0, 1, 5, 10]:
    model = xgb.XGBClassifier(n_estimators=100, reg_lambda=lam, eval_metric='logloss',
                               random_state=42, verbosity=0)
    score = cross_val_score(model, X, y, cv=5).mean()
    print(f'reg_lambda={lam:3d}: CV accuracy={score:.4f}')

Early stopping: stoppa när förbättringarna upphör

Early stopping övervakar ett valideringsmått efter varje boosting-omgång och stoppar träningen när måttet inte har förbättrats under ett angivet antal omgångar (early_stopping_rounds). Detta förhindrar överanpassning och sparar beräkningsresurser — Ni kan tryggt ange ett mycket högt värde för n_estimators (t.ex. 1000) och låta early stopping hitta det optimala antalet omgångar. Den bästa omgången lagras i model.best_iteration och används automatiskt för prediktioner.

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

model = xgb.XGBClassifier(n_estimators=1000, learning_rate=0.05, max_depth=3,
                           eval_metric='logloss', verbosity=0, random_state=42)
model.fit(X_train, y_train,
          eval_set=[(X_val, y_val)],
          early_stopping_rounds=20,
          verbose=False)
print('Best iteration:', model.best_iteration)
print('Test accuracy:', model.score(X_val, y_val))

XGBoost-funktionernas betydelse

XGBoost tillhandahåller tre typer av feature importance: 'weight' (antal gånger en feature används i splittar), 'gain' (genomsnittlig förbättring av förlusten när en feature används för splitting — vanligtvis den mest informativa) och 'cover' (genomsnittligt antal observationer som påverkas av splittar på en feature). Ni kan komma åt dem via model.feature_importances_ (använder gain som standard i sklearn-API:t) eller model.get_booster().get_score(importance_type='gain').

import xgboost as xgb
import pandas as pd
from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()
X, y = data.data, data.target

model = xgb.XGBClassifier(n_estimators=100, eval_metric='logloss', random_state=42)
model.fit(X, y)

importances = pd.Series(model.feature_importances_, index=data.feature_names)
print(importances.sort_values(ascending=False).head(5))

Visualisera feature importance

XGBoost innehåller verktyget xgb.plot_importance(model) för inbyggd visualisering, som skapar ett horisontellt stapeldiagram över feature importance. För mer anpassning kan Ni använda Series från model.feature_importances_ och rita diagrammet med matplotlib. Feature importance från boosting beräknas annorlunda än från random forests — den återspeglar hur mycket varje feature bidrog till att minska förlusten över alla träd, viktat efter användningsfrekvens eller genomsnittlig gain.

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
import matplotlib.pyplot as plt

data = load_breast_cancer()
model = xgb.XGBClassifier(n_estimators=100, eval_metric='logloss', random_state=42)
model.fit(data.data, data.target)
# xgb.plot_importance(model, max_num_features=10)  # uncomment in Jupyter
# plt.show()
print('Top feature:', data.feature_names[model.feature_importances_.argmax()])

Subsampling-parametrar i XGBoost

XGBoost tillhandahåller tre parametrar för delurval som ger ytterligare regularisering: subsample (andelen träningsrader som används per träd, t.ex. 0.8), colsample_bytree (andelen egenskaper som används per träd, t.ex. 0.8) och colsample_bylevel (andelen egenskaper per djupnivå). Tillsammans introducerar dessa slumpmässighet på ett sätt som liknar delurval av egenskaper i random forests, vilket minskar korrelationen mellan träden. Typiska startvärden är subsample=0.8 och colsample_bytree=0.8.

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score

X, y = load_breast_cancer(return_X_y=True)
model = xgb.XGBClassifier(
    n_estimators=200,
    learning_rate=0.1,
    max_depth=4,
    subsample=0.8,
    colsample_bytree=0.8,
    reg_lambda=2,
    eval_metric='logloss',
    random_state=42
)
print('XGBoost with subsampling CV:', cross_val_score(model, X, y, cv=5).mean().round(4))

XGBoost för regression

XGBRegressor använder samma motor men optimerar en regressionsförlust (som standard kvadratfel, eller Tweedie, gamma, kvantil med mera). Early stopping med ett regressionsmått (t.ex. RMSE) fungerar på exakt samma sätt. XGBoost är särskilt konkurrenskraftigt för tabulära regressionsuppgifter eftersom det hanterar saknade värden inbyggt (lär sig den bästa riktningen för att skicka noder med saknade värden under konstruktionen av trädet) och stöder monotonitetsbegränsningar för domänspecifika samband mellan egenskaper.

import xgboost as xgb
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
import numpy as np

X, y = fetch_california_housing(return_X_y=True)
model = xgb.XGBRegressor(n_estimators=200, learning_rate=0.1, max_depth=4,
                          subsample=0.8, eval_metric='rmse', random_state=42)
rmse = np.sqrt(-cross_val_score(model, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print('XGBoost Regression RMSE:', round(rmse, 4))

XGBoost med korsvalidering och GridSearch

Eftersom XGBClassifier implementerar scikit-learns estimatorgränssnitt fungerar det sömlöst med GridSearchCV. De hyperparametrar som ger störst effekt att justera är learning_rate, n_estimators (med early stopping), max_depth, subsample och colsample_bytree. En strategi i två steg fungerar bra: ange först en låg learning rate (0.05) och ett högt värde för n_estimators med early stopping för att hitta rätt antal träd. Kör sedan en grid search över de övriga parametrarna med detta fasta antal träd.

Hantering av saknade värden i XGBoost

XGBoost hanterar saknade värden (NaN) inbyggt utan imputering. När ett attribut har ett saknat värde för vissa träningsexempel under konstruktionen av trädet provar XGBoost båda riktningarna (vänster eller höger barnnod) för saknade värden och väljer den riktning som maximerar vinsten. Den inlärda riktningen sparas i trädet och används vid prediktion. Detta är en betydande fördel jämfört med scikit-learn-modeller som kräver explicit imputering före träningen.

Parallell bearbetning och hastighet i XGBoost

Trots att träden byggs sekventiellt parallelliserar XGBoost steget split finding inom varje träd: alla möjliga delningar över alla egenskaper utvärderas samtidigt med flera CPU-trådar. Ange n_jobs=-1 (eller nthread i det inbyggda API:t) för att använda alla tillgängliga kärnor. För GPU-acceleration installerar ni versionen med CUDA-stöd och anger device='cuda'. På en modern GPU kan XGBoost vara 5–50 gånger snabbare än CPU för stora datamängder, vilket gör det praktiskt för datamängder med miljontals rader.

import xgboost as xgb
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
import numpy as np

X, y = fetch_california_housing(return_X_y=True)
# Use all CPU threads
model_parallel = xgb.XGBRegressor(n_estimators=100, n_jobs=-1, eval_metric='rmse',
                                   verbosity=0, random_state=42)
rmse = np.sqrt(-cross_val_score(model_parallel, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print('XGBoost parallel RMSE:', round(rmse, 4))

Snabbtest

Testa er förståelse av XGBoost-funktionerna från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har ni lärt er att XGBoost lägger till L1-/L2-regularisering och andragradens gradienter till standardiserad gradient boosting, att early stopping förhindrar överanpassning genom att övervaka ett valideringsmått under träningen och att egenskapernas betydelse kan mätas med vikt, vinst eller täckning över alla träd. Härnäst utforskar vi LightGBM:s strategi för lövvis tillväxt och dess hastighetsfördelar.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”XGBoost: regularisering, tidigt stopp och egenskapernas betydelse” gratis?

Ja – hela texten till ”XGBoost: regularisering, tidigt stopp och egenskapernas betydelse” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Machine Learning Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”XGBoost: regularisering, tidigt stopp och egenskapernas betydelse”?

Ni kommer att träna en XGBClassifier, aktivera tidigt stopp på ett valideringsset och rita poäng för egenskapernas betydelse för att identifiera de mest prediktiva kolumnerna. Ni övar på Machine Learning Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Machine Learning Academy?

Du behöver inga förkunskaper. Utbildningen i Machine Learning Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”XGBoost: regularisering, tidigt stopp och egenskapernas betydelse”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Machine Learning Academy-lektionen?

Ja. Varje Machine Learning Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Intuition för boosting: sekventiell felkorrigering
  2. XGBoost: regularisering, tidigt stopp och egenskapernas betydelse
  3. LightGBM: lövvis tillväxt och hastighetsfördelar
  4. Viktiga hyperparametrar: learning rate, n_estimators och max_depth
← Tillbaka till Machine Learning Academy