LGBMClassifier: Aloitusopas - KDnuggets

LGBMClassifier: Aloitusopas – KDnuggets

Lähdesolmu: 2793517

LGBMClassifier: Aloitusopas
Kuvan toimittaja 
 

On olemassa suuri määrä koneoppimisalgoritmeja, jotka soveltuvat mallintamaan tiettyjä ilmiöitä. Vaikka jotkin mallit käyttävät attribuuttijoukkoa suorituskyvyn parantamiseksi toisia, toiset sisältävät heikkoja oppijoita hyödyntämään loput attribuutit lisätietojen antamiseksi mallille, joita kutsutaan ensemble-malleiksi.

Ensemble-mallien lähtökohtana on parantaa mallin suorituskykyä yhdistämällä eri mallien ennusteita vähentämällä niiden virheitä. On olemassa kaksi suosittua yhdistelmätekniikkaa: pussittaminen ja tehostaminen. 

Bagging, eli Bootstrapped Aggregation, kouluttaa useita yksittäisiä malleja koulutusdatan eri satunnaisille osajouksille ja laskee sitten niiden ennusteiden keskiarvon lopullisen ennusteen tuottamiseksi. Boostointi puolestaan ​​tarkoittaa yksittäisten mallien peräkkäistä koulutusta, jossa jokainen malli yrittää korjata aikaisempien mallien tekemät virheet.

Nyt kun meillä on konteksti ensemble-malleista, kaksoisnapsauta tehostavaa kokonaisuusmallia, erityisesti Microsoftin kehittämää Light GBM (LGBM) -algoritmia. 

LGBMClassifier tulee sanoista Light Gradient Boosting Machine Classifier. Se käyttää päätöspuualgoritmeja luokitteluun, luokitteluun ja muihin koneoppimistehtäviin. LGBMClassifier käyttää uutta tekniikkaa Gradient-based One-Side Sampling (GOSS) ja Exclusive Feature Bundling (EFB) käsitelläkseen laajamittaista dataa tarkasti, mikä tekee niistä tehokkaasti nopeampia ja vähentää muistin käyttöä.

Mikä on gradienttipohjainen yksipuolinen näytteenotto (GOSS)?

Perinteiset gradienttitehostusalgoritmit käyttävät kaikkea dataa harjoitteluun, mikä voi viedä aikaa suurien tietojoukkojen käsittelyssä. LightGBM:n GOSS puolestaan ​​säilyttää kaikki esiintymät, joissa on suuria liukuvärejä, ja suorittaa satunnaisen näytteenoton instansseille, joissa on pieniä gradientteja. Tämän taustalla on intuitio, että instansseja, joissa on suuria gradientteja, on vaikeampi sovittaa ja siten kuljettaa enemmän tietoa. GOSS ottaa käyttöön vakiokertoimen pienillä gradienteilla oleville data-ilmentymille kompensoimaan näytteenoton aikana tapahtuvaa tiedon menetystä.

Mikä on Exclusive Feature Bundling (EFB)?

Harvassa tietojoukossa useimmat ominaisuudet ovat nollia. EFB on lähes häviötön algoritmi, joka niputtaa/yhdistää toisensa poissulkevia ominaisuuksia (ominaisuuksia, jotka eivät ole samanaikaisesti nollasta poikkeavia) ulottuvuuksien määrän vähentämiseksi, mikä nopeuttaa koulutusprosessia. Koska nämä ominaisuudet ovat "yksinomaisia", alkuperäinen ominaisuustila säilyy ilman merkittävää tiedon menetystä.

LightGBM-paketti voidaan asentaa suoraan pip – pythonin paketinhallinnan avulla. Lataa ja asenna LightGBM-kirjasto koneellesi kirjoittamalla alla jaettu komento joko terminaaliin tai komentokehotteeseen:

pip install lightgbm

 

Anaconda-käyttäjät voivat asentaa sen käyttämällä "conda install" -komentoa alla luetellulla tavalla.

conda install -c conda-forge lightgbm

 

Käyttöjärjestelmästäsi riippuen voit valita asennustavan käyttämällä Tämän oppaan.

Tuodaan nyt LightGBM ja muut tarvittavat kirjastot:

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

Tietojoukon valmistelu

Käytämme suosittua Titanicin tietojoukkoa, joka sisältää tietoa Titanicin matkustajista, ja kohdemuuttuja osoittaa, selvisivätkö he hengissä vai eivät. Voit ladata tietojoukon osoitteesta Kaggle tai käytä seuraavaa koodia ladataksesi sen suoraan Seabornista alla olevan kuvan mukaisesti:

titanic = sns.load_dataset('titanic')

 

Pudota tarpeettomat sarakkeet, kuten "kansi", "embark_town" ja "alive", koska ne ovat tarpeettomia tai eivät edistä kenenkään aluksella olevan henkilön selviytymistä. Seuraavaksi havaitsimme, että ominaisuuksilla "ikä", "hinta" ja "alettu" puuttuvat arvot – huomaa, että eri attribuutit lasketaan asianmukaisilla tilastollisilla mittareilla.

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

 

Lopuksi muunnamme kategoriset muuttujat numeerisiksi muuttujiksi pandan kategorisilla koodeilla. Nyt tiedot ovat valmiit mallin koulutusprosessin aloittamiseksi.

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

LGBMClassifier-mallin koulutus

LGBMClassifier-mallin harjoittamisen aloittamiseksi meidän on jaettava tietojoukko syöttöominaisuuksiin ja kohdemuuttujiin sekä koulutus- ja testaussarjoihin käyttämällä scikit-learnin train_test_split-funktiota.

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

 

Merkitään kategoriset ("who") ja järjestystiedot ("luokka") sen varmistamiseksi, että malli toimitetaan numeerisella tiedolla, koska LGBM ei kuluta ei-numeerista dataa.

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

 

Seuraavaksi määritämme mallin hyperparametrit argumenteiksi rakentajalle tai voimme välittää ne sanakirjana set_params-metodille.  

Viimeinen vaihe mallikoulutuksen aloittamiseksi on ladata tietojoukko luomalla LGBMClassifier-luokan esiintymä ja sovittamalla se opetustietoihin. 

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)

 

Seuraavaksi arvioikaamme koulutetun luokittelijan suorituskykyä näkymättömällä tai testidatajoukolla.

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

Hyperparametrien viritys

LGBMClassifier mahdollistaa paljon joustavuutta hyperparametrien avulla, joita voit säätää optimaalista suorituskykyä varten. Tässä keskustelemme lyhyesti joistakin tärkeimmistä hyperparametreistä:

  • lehtien_määrä: Tämä on tärkein parametri puumallin monimutkaisuuden hallintaan. Ihannetapauksessa lehtien lukumäärän arvon tulisi olla pienempi tai yhtä suuri kuin 2^(max_depth).
  • min_data_in_leaf: Tämä on tärkeä parametri, jotta estetään liikaistuminen lehtimaiseen puuhun. Sen optimaalinen arvo riippuu harjoitusnäytteiden määrästä ja num_leaves.
  • max_depth: Voit käyttää tätä rajoittamaan puun syvyyttä nimenomaisesti. Parasta on virittää tämä parametri ylisovitettaessa.

Viritetään nämä hyperparametrit ja opetetaan uusi malli:

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

 

Huomaa, että hyperparametrien varsinainen viritys on prosessi, joka sisältää yrityksen ja erehdyksen, ja sitä voi ohjata myös kokemus ja syvempi ymmärrys tehostamisalgoritmista ja aiheen asiantuntemus (toimialuetuntemus) käsittelemäsi liiketoimintaongelmasta.

Tässä viestissä opit LightGBM-algoritmista ja sen Python-toteutuksesta. Se on joustava tekniikka, joka on hyödyllinen erityyppisissä luokitusongelmissa, ja sen pitäisi olla osa koneoppimisen työkalupakkia.
 
 
Vidhi Chugh on tekoälystrategi ja digitaalisen muutoksen johtaja, joka työskentelee tuotteiden, tieteiden ja tekniikan risteyksessä rakentaakseen skaalautuvia koneoppimisjärjestelmiä. Hän on palkittu innovaatiojohtaja, kirjailija ja kansainvälinen puhuja. Hänen tehtävänsä on demokratisoida koneoppimista ja murtaa ammattikieltä, jotta kaikki voivat olla osa tätä muutosta.
 

Aikaleima:

Lisää aiheesta KDnuggets