LGBMClassifier: En startveiledning - KDnuggets

LGBMClassifier: En startveiledning – KDnuggets

Kilde node: 2793517

LGBMClassifier: En startveiledning
Bilde av redaktør 
 

Det finnes et stort antall maskinlæringsalgoritmer som er egnet til å modellere spesifikke fenomener. Mens noen modeller bruker et sett med attributter for å overgå andre, inkluderer andre svake elever for å bruke resten av attributtene for å gi tilleggsinformasjon til modellen, kjent som ensemblemodeller.

Premisset for ensemblemodellene er å forbedre modellytelsen ved å kombinere spådommene fra forskjellige modeller ved å redusere feilene deres. Det er to populære ensembling-teknikker: bagging og boosting. 

Bagging, også kjent som Bootstrapped Aggregation, trener flere individuelle modeller på forskjellige tilfeldige delsett av treningsdataene og beregner deretter gjennomsnittet av spådommene deres for å produsere den endelige prediksjonen. Boosting, derimot, innebærer å trene individuelle modeller sekvensielt, der hver modell forsøker å rette opp feilene fra de tidligere modellene.

Nå som vi har kontekst om ensemblemodellene, la oss dobbeltklikke på den forsterkende ensemblemodellen, nærmere bestemt Light GBM (LGBM) algoritmen utviklet av Microsoft. 

LGBMClassifier står for Light Gradient Boosting Machine Classifier. Den bruker beslutningstrealgoritmer for rangering, klassifisering og andre maskinlæringsoppgaver. LGBMClassifier bruker en ny teknikk med Gradient-basert One-Side Sampling (GOSS) og Exclusive Feature Bundling (EFB) for å håndtere data i stor skala med nøyaktighet, noe som effektivt gjør det raskere og reduserer minnebruken.

Hva er Gradient-basert One-Side Sampling (GOSS)?

Tradisjonelle gradientforsterkende algoritmer bruker alle dataene til trening, noe som kan være tidkrevende når man arbeider med store datasett. LightGBMs GOSS, derimot, beholder alle forekomstene med store gradienter og utfører stikkprøver på forekomstene med små gradienter. Intuisjonen bak dette er at instanser med store gradienter er vanskeligere å passe og dermed bærer mer informasjon. GOSS introduserer en konstant multiplikator for dataforekomstene med små gradienter for å kompensere for informasjonstapet under sampling.

Hva er Exclusive Feature Bundle (EFB)?

I et sparsomt datasett er de fleste funksjonene null. EFB er en nesten tapsfri algoritme som samler/kombinerer gjensidig utelukkende funksjoner (funksjoner som ikke er null samtidig) for å redusere antall dimensjoner, og dermed akselerere treningsprosessen. Siden disse funksjonene er "eksklusive", beholdes den opprinnelige funksjonsplassen uten betydelig tap av informasjon.

LightGBM-pakken kan installeres direkte ved å bruke pip – pythons pakkebehandling. Skriv inn kommandoen som er delt nedenfor enten på terminalen eller ledeteksten for å laste ned og installere LightGBM-biblioteket på maskinen din:

pip install lightgbm

 

Anaconda-brukere kan installere den ved å bruke "conda install"-kommandoen som oppført nedenfor.

conda install -c conda-forge lightgbm

 

Basert på operativsystemet ditt kan du velge installasjonsmetoden ved hjelp av Denne guiden.

La oss nå importere LightGBM og andre nødvendige biblioteker:

import numpy as np
import pandas as pd
import seaborn as sns
import lightgbm as lgb
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

Forbereder datasettet

Vi bruker det populære Titanic-datasettet, som inneholder informasjon om passasjerene på Titanic, med målvariabelen som indikerer om de overlevde eller ikke. Du kan laste ned datasettet fra kaggle eller bruk følgende kode for å laste den direkte fra Seaborn, som vist nedenfor:

titanic = sns.load_dataset('titanic')

 

Slipp unødvendige kolonner som "dekk", "embark_town" og "alive" fordi de er overflødige eller ikke bidrar til å overleve noen person på skipet. Deretter observerte vi at funksjonene «alder», «fare» og «ombordstigning» mangler verdier – merk at forskjellige attributter tilskrives passende statistiske mål.

# Drop unnecessary columns
titanic = titanic.drop(['deck', 'embark_town', 'alive'], axis=1) # Replace missing values with the median or mode
titanic['age'] = titanic['age'].fillna(titanic['age'].median())
titanic['fare'] = titanic['fare'].fillna(titanic['fare'].mode()[0])
titanic['embarked'] = titanic['embarked'].fillna(titanic['embarked'].mode()[0])

 

Til slutt konverterer vi de kategoriske variablene til numeriske variabler ved å bruke pandaenes kategoriske koder. Nå er dataene forberedt for å starte modelltreningsprosessen.

# Convert categorical variables to numerical variables
titanic['sex'] = pd.Categorical(titanic['sex']).codes
titanic['embarked'] = pd.Categorical(titanic['embarked']).codes # Split the dataset into input features and the target variable
X = titanic.drop('survived', axis=1)
y = titanic['survived']

Trening av LGBMClassifier-modellen

For å begynne å trene LGBMClassifier-modellen, må vi dele opp datasettet i inputfunksjoner og målvariabler, samt trenings- og testsett ved å bruke train_test_split-funksjonen fra scikit-learn.

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

La oss merke kode kategoriske ("hvem") og ordinære data ("klasse") for å sikre at modellen leveres med numeriske data, siden LGBM ikke bruker ikke-numeriske data.

class_dict = { "Third": 3, "First": 1, "Second": 2
}
who_dict = { "child": 0, "woman": 1, "man": 2
}
X_train['class'] = X_train['class'].apply(lambda x: class_dict[x])
X_train['who'] = X_train['who'].apply(lambda x: who_dict[x])
X_test['class'] = X_test['class'].apply(lambda x: class_dict[x])
X_test['who'] = X_test['who'].apply(lambda x: who_dict[x])

 

Deretter spesifiserer vi modellhyperparametrene som argumenter til konstruktøren, eller vi kan sende dem som en ordbok til set_params-metoden.  

Det siste trinnet for å starte modellopplæringen er å laste inn datasettet ved å opprette en forekomst av LGBMClassifier-klassen og tilpasse den til treningsdataene. 

params = { 'objective': 'binary', 'boosting_type': 'gbdt', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9
}
clf = lgb.LGBMClassifier(**params)
clf.fit(X_train, y_train)

 

La oss deretter evaluere den trente klassifisererens ytelse på det usettede eller testdatasettet.

predictions = clf.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.84 0.89 0.86 105 1 0.82 0.76 0.79 74 accuracy 0.83 179 macro avg 0.83 0.82 0.82 179
weighted avg 0.83 0.83 0.83 179

Innstilling av hyperparameter

LGBMClassifieren tillater mye fleksibilitet via hyperparametre som du kan justere for optimal ytelse. Her vil vi kort diskutere noen av de viktigste hyperparametrene:

  • antall_blader: Dette er hovedparameteren for å kontrollere kompleksiteten til tremodellen. Ideelt sett bør verdien av num_leaves være mindre enn eller lik 2^(max_depth).
  • min_data_i_blad: Dette er en viktig parameter for å hindre overtilpasning i et bladvis tre. Dens optimale verdi avhenger av antall treningsprøver og antall_blader.
  • maks. dybde: Du kan bruke dette til å begrense tredybden eksplisitt. Det er best å justere denne parameteren i tilfelle overfitting.

La oss justere disse hyperparametrene og trene en ny modell:

model = lgb.LGBMClassifier(num_leaves=31, min_data_in_leaf=20, max_depth=5)
model.fit(X_train, y_train)

 

predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.85 0.89 0.87 105 1 0.83 0.77 0.80 74 accuracy 0.84 179 macro avg 0.84 0.83 0.83 179
weighted avg 0.84 0.84 0.84 179

 

Vær oppmerksom på at selve justeringen av hyperparametre er en prosess som involverer prøving og feiling og kan også være styrt av erfaring og en dypere forståelse av den økende algoritmen og fagekspertisen (domenekunnskap) til forretningsproblemet du jobber med.

I dette innlegget lærte du om LightGBM-algoritmen og dens Python-implementering. Det er en fleksibel teknikk som er nyttig for ulike typer klassifiseringsproblemer og bør være en del av maskinlæringsverktøysettet.
 
 
Vidhi Chugh er en AI-strateg og en digital transformasjonsleder som jobber i skjæringspunktet mellom produkt, vitenskap og ingeniørfag for å bygge skalerbare maskinlæringssystemer. Hun er en prisvinnende innovasjonsleder, en forfatter og en internasjonal foredragsholder. Hun er på et oppdrag for å demokratisere maskinlæring og bryte sjargongen for at alle skal være en del av denne transformasjonen.
 

Tidstempel:

Mer fra KDnuggets