LGBMClassifier: un ghid introductiv - KDnuggets

LGBMClassifier: un ghid introductiv – KDnuggets

Nodul sursă: 2793517

LGBMClassifier: un ghid de început
Imagine de editor 
 

Există un număr mare de algoritmi de învățare automată care sunt apți pentru a modela fenomene specifice. În timp ce unele modele utilizează un set de atribute pentru a le depăși pe altele, altele includ cursanți slabi pentru a utiliza restul de atribute pentru a furniza informații suplimentare modelului, cunoscute sub numele de modele de ansamblu.

Premisa modelelor de ansamblu este de a îmbunătăți performanța modelului prin combinarea predicțiilor de la diferite modele prin reducerea erorilor acestora. Există două tehnici populare de asamblare: însacarea și stimularea. 

Bagging, alias Bootstrapped Aggregation, antrenează mai multe modele individuale pe diferite subseturi aleatorii ale datelor de antrenament și apoi face media predicțiilor acestora pentru a produce predicția finală. Boosting, pe de altă parte, implică antrenarea secvenţială a modelelor individuale, în care fiecare model încearcă să corecteze erorile făcute de modelele anterioare.

Acum că avem context despre modelele de ansamblu, să facem dublu clic pe modelul de ansamblu de stimulare, în special algoritmul Light GBM (LGBM) dezvoltat de Microsoft. 

LGBMClassifier înseamnă Light Gradient Boosting Machine Classifier. Utilizează algoritmi de arbore de decizie pentru clasare, clasificare și alte sarcini de învățare automată. LGBMClassifier folosește o tehnică nouă de eșantionare unilaterală bazată pe gradient (GOSS) și grupare de caracteristici exclusive (EFB) pentru a gestiona datele la scară largă cu acuratețe, făcându-le efectiv mai rapide și reducând utilizarea memoriei.

Ce este eșantionarea unilaterală bazată pe gradient (GOSS)?

Algoritmii tradiționali de creștere a gradientului folosesc toate datele pentru antrenament, ceea ce poate consuma mult timp atunci când se lucrează cu seturi de date mari. GOSS de la LightGBM, pe de altă parte, păstrează toate instanțele cu gradienți mari și efectuează eșantionare aleatorie pe instanțele cu gradienți mici. Intuiția din spatele acestui lucru este că cazurile cu gradienți mari sunt mai greu de încadrat și, astfel, transportă mai multe informații. GOSS introduce un multiplicator constant pentru instanțele de date cu gradienți mici pentru a compensa pierderea de informații în timpul eșantionării.

Ce este Exclusive Feature Bundling (EFB)?

Într-un set de date rar, majoritatea caracteristicilor sunt zerouri. EFB este un algoritm aproape fără pierderi care reunește/combină caracteristici care se exclud reciproc (funcții care nu sunt diferite de zero simultan) pentru a reduce numărul de dimensiuni, accelerând astfel procesul de antrenament. Deoarece aceste caracteristici sunt „exclusive”, spațiul original al caracteristicilor este păstrat fără pierderi semnificative de informații.

Pachetul LightGBM poate fi instalat direct folosind pip – managerul de pachete python. Tastați comanda partajată mai jos fie pe terminal, fie pe linia de comandă pentru a descărca și instala biblioteca LightGBM pe computer:

pip install lightgbm

 

Utilizatorii Anaconda îl pot instala folosind comanda „conda install”, după cum este listat mai jos.

conda install -c conda-forge lightgbm

 

Pe baza sistemului de operare, puteți alege metoda de instalare folosind Acest ghid.

Acum, să importăm LightGBM și alte biblioteci necesare:

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

Pregătirea setului de date

Folosim popularul set de date Titanic, care conține informații despre pasagerii de pe Titanic, variabila țintă indicând dacă au supraviețuit sau nu. Puteți descărca setul de date de la Kaggle sau utilizați următorul cod pentru a-l încărca direct de la Seaborn, după cum se arată mai jos:

titanic = sns.load_dataset('titanic')

 

Aruncă coloane inutile, cum ar fi „punte”, „embark_town” și „alive”, deoarece sunt redundante sau nu contribuie la supraviețuirea vreunei persoane de pe navă. În continuare, am observat că caracteristicile „vârstă”, „tarif” și „imbarcat” au valori lipsă – rețineți că diferite atribute sunt imputate cu măsuri statistice adecvate.

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

 

În cele din urmă, convertim variabilele categoriale în variabile numerice folosind codurile categoriale ale panda. Acum, datele sunt pregătite pentru a începe procesul de formare a modelului.

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

Antrenarea modelului LGBMClassifier

Pentru a începe antrenarea modelului LGBMClassifier, trebuie să împărțim setul de date în caracteristici de intrare și variabile țintă, precum și seturi de antrenament și testare folosind funcția train_test_split de la 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)

 

Să etichetăm codificarea datelor categorice ("cine") și ordinale ("clasă") pentru a ne asigura că modelul este furnizat cu date numerice, deoarece LGBM nu consumă date nenumerice.

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

 

Apoi, specificăm hiperparametrii modelului ca argumente pentru constructor sau îi putem transmite ca dicționar la metoda set_params.  

Ultimul pas pentru a iniția antrenamentul modelului este încărcarea setului de date prin crearea unei instanțe a clasei LGBMClassifier și potrivirea acesteia la datele de antrenament. 

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)

 

În continuare, să evaluăm performanța clasificatorului antrenat pe setul de date nevăzut sau de testare.

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

Reglarea hiperparametrului

Clasificatorul LGBMC permite multă flexibilitate prin hiperparametri pe care îi puteți regla pentru performanțe optime. Aici, vom discuta pe scurt câțiva dintre hiperparametrii cheie:

  • num_frunze: Acesta este parametrul principal pentru controlul complexității modelului arborelui. În mod ideal, valoarea num_leaves ar trebui să fie mai mică sau egală cu 2^(max_depth).
  • min_date_in_leaf: Acesta este un parametru important pentru a preveni supraadaptarea într-un copac frunze. Valoarea sa optimă depinde de numărul de mostre de antrenament și de numărul_frunze.
  • adancime maxima: Puteți utiliza acest lucru pentru a limita în mod explicit adâncimea arborelui. Cel mai bine este să reglați acest parametru în caz de supraajustare.

Să reglam acești hiperparametri și să antrenăm un nou 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

 

Rețineți că reglarea efectivă a hiperparametrilor este un proces care implică încercări și erori și poate fi, de asemenea, ghidată de experiență și de o înțelegere mai profundă a algoritmului de stimulare și a expertizei în materie (cunoștințe de domeniu) a problemei de afaceri la care lucrați.

În această postare, ați aflat despre algoritmul LightGBM și implementarea lui Python. Este o tehnică flexibilă care este utilă pentru diferite tipuri de probleme de clasificare și ar trebui să facă parte din setul dvs. de instrumente de învățare automată.
 
 
Vidhi Chugh este un strateg AI și un lider în transformarea digitală care lucrează la intersecția dintre produs, științe și inginerie pentru a construi sisteme scalabile de învățare automată. Ea este un lider în inovare premiat, o autoare și un vorbitor internațional. Ea are misiunea de a democratiza învățarea automată și de a rupe jargonul pentru ca toată lumea să facă parte din această transformare.
 

Timestamp-ul:

Mai mult de la KDnuggets