LGBMClassifier: Vodnik za začetek - KDnuggets

LGBMClassifier: Vodnik za začetek – KDnuggets

Izvorno vozlišče: 2793517

LGBMClassifier: Vodnik za začetek
Slika urednika 
 

Obstaja ogromno algoritmov strojnega učenja, ki so primerni za modeliranje specifičnih pojavov. Medtem ko nekateri modeli uporabljajo niz atributov, da prekašajo druge, drugi vključujejo šibke učence, da uporabijo preostale atribute za zagotavljanje dodatnih informacij modelu, znani kot modeli ansambla.

Predpostavka modelov ansambla je izboljšati zmogljivost modela s kombiniranjem napovedi iz različnih modelov z zmanjšanjem njihovih napak. Obstajata dve priljubljeni tehniki združevanja: bagging in boosting. 

Bagging, alias Bootstrapped Aggregation, usposablja več posameznih modelov na različnih naključnih podmnožicah podatkov o usposabljanju in nato izračuna povprečje njihovih napovedi, da ustvari končno napoved. Po drugi strani boostiranje vključuje zaporedno usposabljanje posameznih modelov, kjer vsak model poskuša popraviti napake, ki so jih naredili prejšnji modeli.

Zdaj, ko imamo kontekst o modelih ansambla, dvokliknimo model ansambla za povečanje, natančneje algoritem Light GBM (LGBM), ki ga je razvil Microsoft. 

LGBMClassifier je kratica za Light Gradient Boosting Machine Classifier. Uporablja algoritme odločitvenega drevesa za rangiranje, razvrščanje in druge naloge strojnega učenja. LGBMClassifier uporablja novo tehniko enostranskega vzorčenja na podlagi gradienta (GOSS) in ekskluzivnega združevanja funkcij (EFB) za natančno obdelavo podatkov velikega obsega, kar učinkovito pospeši in zmanjša porabo pomnilnika.

Kaj je enostransko vzorčenje na podlagi gradienta (GOSS)?

Tradicionalni algoritmi za povečevanje gradienta uporabljajo vse podatke za usposabljanje, kar je lahko zamudno pri delu z velikimi nabori podatkov. LightGBM-jev GOSS po drugi strani hrani vse primerke z velikimi gradienti in izvaja naključno vzorčenje primerkov z majhnimi gradienti. Intuicija za tem je, da je primere z velikimi prelivi težje prilagoditi in zato prenašajo več informacij. GOSS uvaja stalni množitelj za primerke podatkov z majhnimi gradienti, da nadomesti izgubo informacij med vzorčenjem.

Kaj je združevanje ekskluzivnih funkcij (EFB)?

V redkem naboru podatkov je večina funkcij ničel. EFB je algoritem skoraj brez izgub, ki združuje/združuje medsebojno izključujoče funkcije (funkcije, ki niso hkrati različne od nič), da zmanjša število dimenzij in s tem pospeši proces usposabljanja. Ker so te funkcije "ekskluzivne", se prvotni prostor funkcij ohrani brez večje izgube informacij.

Paket LightGBM je mogoče namestiti neposredno z uporabo upravitelja paketov pip – python. V terminal ali ukazni poziv vnesite spodnji ukaz, da prenesete in namestite knjižnico LightGBM na vaš računalnik:

pip install lightgbm

 

Uporabniki Anaconde jo lahko namestijo z ukazom »conda install«, kot je navedeno spodaj.

conda install -c conda-forge lightgbm

 

Glede na vaš OS lahko izberete način namestitve z uporabo ta vodnik.

Zdaj pa uvozimo LightGBM in druge potrebne knjižnice:

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

Priprava nabora podatkov

Uporabljamo priljubljen nabor podatkov o Titaniku, ki vsebuje podatke o potnikih na Titaniku, pri čemer ciljna spremenljivka označuje, ali so preživeli ali ne. Nabor podatkov lahko prenesete iz Kaggle ali uporabite naslednjo kodo, da jo naložite neposredno iz Seaborna, kot je prikazano spodaj:

titanic = sns.load_dataset('titanic')

 

Izpustite nepotrebne stolpce, kot so »deck«, »embark_town« in »alive«, ker so odveč ali ne prispevajo k preživetju nobene osebe na ladji. Nato smo opazili, da imajo značilnosti »starost«, »prevoznina« in »vkrcano« manjkajoče vrednosti – upoštevajte, da so različni atributi pripisani z ustreznimi statističnimi merami.

# 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])

 

Nazadnje pretvorimo kategorične spremenljivke v numerične spremenljivke z uporabo pandinih kategoričnih kod. Zdaj so podatki pripravljeni za začetek procesa usposabljanja modela.

# 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']

Usposabljanje modela LGBMClassifier

Za začetek usposabljanja modela LGBMClassifier moramo nabor podatkov razdeliti na vhodne funkcije in ciljne spremenljivke ter nize za usposabljanje in testiranje s funkcijo train_test_split iz 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)

 

Označimo kodiranje kategoričnih (»kdo«) in ordinalnih podatkov (»razred«), da zagotovimo, da je model opremljen z numeričnimi podatki, saj LGBM ne porablja neštevilčnih podatkov.

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])

 

Nato podamo hiperparametre modela kot argumente konstruktorju ali pa jih kot slovar posredujemo metodi set_params.  

Zadnji korak za začetek usposabljanja modela je nalaganje nabora podatkov z ustvarjanjem primerka razreda LGBMClassifier in njegovim prilagajanjem učnim podatkom. 

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)

 

Nato ocenimo uspešnost usposobljenega klasifikatorja na nevidnem ali testnem naboru podatkov.

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

Uglaševanje hiperparametrov

LGBMClassifier omogoča veliko prilagodljivosti prek hiperparametrov, ki jih lahko nastavite za optimalno delovanje. Tukaj bomo na kratko razpravljali o nekaterih ključnih hiperparametrih:

  • število_listov: To je glavni parameter za nadzor kompleksnosti drevesnega modela. V idealnem primeru bi morala biti vrednost num_leaves manjša ali enaka 2^(max_depth).
  • min_data_in_leaf: To je pomemben parameter za preprečevanje prekomernega opremljanja v listnem drevesu. Njegova optimalna vrednost je odvisna od števila učnih vzorcev in num_leaves.
  • največja_globina: To lahko uporabite za eksplicitno omejitev globine drevesa. Najbolje je, da ta parameter nastavite v primeru pretiranega opremljanja.

Prilagodimo te hiperparametre in urimo nov model:

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

 

Upoštevajte, da je dejansko uglaševanje hiperparametrov postopek, ki vključuje poskuse in napake in ga lahko vodijo tudi izkušnje in globlje razumevanje algoritma za povečanje ter strokovno znanje o predmetu (poznavanje področja) poslovnega problema, na katerem delate.

V tej objavi ste spoznali algoritem LightGBM in njegovo implementacijo Python. To je prilagodljiva tehnika, ki je uporabna za različne vrste težav s klasifikacijo in bi morala biti del vašega orodja za strojno učenje.
 
 
Vidhi Chugh je strateg za umetno inteligenco in vodja digitalne transformacije, ki dela na presečišču izdelkov, znanosti in inženiringa za izgradnjo razširljivih sistemov strojnega učenja. Je nagrajena vodja inovacij, avtorica in mednarodna govornica. Njena misija je demokratizirati strojno učenje in razbiti žargon za vse, da bi bili del te preobrazbe.
 

Časovni žig:

Več od KDnuggets