LGBMClassifier: przewodnik dla początkujących — KDnuggets

LGBMClassifier: przewodnik dla początkujących — KDnuggets

Węzeł źródłowy: 2793517

LGBMClassifier: przewodnik dla początkujących
Obraz autorstwa redaktora 
 

Istnieje ogromna liczba algorytmów uczenia maszynowego, które są w stanie modelować określone zjawiska. Podczas gdy niektóre modele wykorzystują zestaw atrybutów, aby przewyższyć inne, inne obejmują słabych uczniów, którzy wykorzystują pozostałe atrybuty do dostarczania dodatkowych informacji do modelu, zwanych modelami zespołowymi.

Założeniem modeli zespołowych jest poprawa wydajności modelu poprzez połączenie prognoz z różnych modeli poprzez zmniejszenie ich błędów. Istnieją dwie popularne techniki ensemblingu: bagging i boosting. 

Bagging, czyli agregacja Bootstrapped, trenuje wiele indywidualnych modeli na różnych losowych podzbiorach danych treningowych, a następnie uśrednia ich prognozy, aby uzyskać ostateczną prognozę. Z drugiej strony, boosting polega na sekwencyjnym szkoleniu poszczególnych modeli, gdzie każdy model próbuje naprawić błędy poprzednich modeli.

Teraz, gdy mamy już kontekst dotyczący modeli zespołowych, kliknijmy dwukrotnie model zespołowy wzmacniający, a konkretnie algorytm Light GBM (LGBM) opracowany przez firmę Microsoft. 

LGBMClassifier to skrót od Light Gradient Boosting Machine Classifier. Wykorzystuje algorytmy drzewa decyzyjnego do tworzenia rankingów, klasyfikacji i innych zadań uczenia maszynowego. LGBMClassifier wykorzystuje nowatorską technikę jednostronnego próbkowania opartego na gradiencie (GOSS) i ekskluzywnego łączenia funkcji (EFB) do dokładnego przetwarzania danych na dużą skalę, skutecznie przyspieszając je i zmniejszając zużycie pamięci.

Co to jest próbkowanie jednostronne oparte na gradiencie (GOSS)?

Tradycyjne algorytmy zwiększania gradientu wykorzystują wszystkie dane do uczenia, co może być czasochłonne w przypadku dużych zbiorów danych. Z drugiej strony GOSS LightGBM przechowuje wszystkie instancje z dużymi gradientami i przeprowadza losowe próbkowanie instancji z małymi gradientami. Intuicja za tym stoi, że instancje z dużymi gradientami są trudniejsze do dopasowania, a tym samym zawierają więcej informacji. GOSS wprowadza stały mnożnik dla instancji danych z małymi gradientami, aby zrekompensować utratę informacji podczas próbkowania.

Co to jest łączenie ekskluzywnych funkcji (EFB)?

W rzadkim zbiorze danych większość cech to zera. EFB to prawie bezstratny algorytm, który gromadzi/łączy wzajemnie wykluczające się cechy (cechy, które nie są jednocześnie niezerowe) w celu zmniejszenia liczby wymiarów, przyspieszając w ten sposób proces uczenia. Ponieważ te funkcje są „wyłączne”, oryginalna przestrzeń funkcji jest zachowywana bez znaczącej utraty informacji.

Pakiet LightGBM można zainstalować bezpośrednio za pomocą pip – menedżera pakietów Pythona. Wpisz polecenie udostępnione poniżej w terminalu lub w wierszu polecenia, aby pobrać i zainstalować bibliotekę LightGBM na swoim komputerze:

pip install lightgbm

 

Użytkownicy Anacondy mogą go zainstalować za pomocą polecenia „conda install”, jak podano poniżej.

conda install -c conda-forge lightgbm

 

W zależności od systemu operacyjnego możesz wybrać metodę instalacji za pomocą ten przewodnik.

Teraz zaimportujmy LightGBM i inne potrzebne biblioteki:

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

Przygotowanie zbioru danych

Korzystamy z popularnego zbioru danych Titanica, który zawiera informacje o pasażerach Titanica, ze zmienną docelową oznaczającą, czy przeżyli, czy nie. Możesz pobrać zestaw danych z Kaggle lub użyj następującego kodu, aby załadować go bezpośrednio z Seaborn, jak pokazano poniżej:

titanic = sns.load_dataset('titanic')

 

Usuń niepotrzebne kolumny, takie jak „pokład”, „embark_town” i „żywy”, ponieważ są zbędne lub nie przyczyniają się do przeżycia żadnej osoby na statku. Następnie zauważyliśmy, że cechy „wiek”, „opłata” i „zaokrętowanie” mają brakujące wartości – zauważ, że różnym atrybutom przypisuje się odpowiednie miary statystyczne.

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

 

Na koniec konwertujemy zmienne kategoryczne na zmienne numeryczne przy użyciu kodów kategorycznych pand. Teraz dane są przygotowane do rozpoczęcia procesu uczenia modelu.

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

Szkolenie modelu LGBMClassifier

Aby rozpocząć trenowanie modelu LGBMClassifier, musimy podzielić zbiór danych na cechy wejściowe i zmienne docelowe, a także zestawy treningowe i testowe za pomocą funkcji train_test_split z 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)

 

Zakodujmy etykietą dane kategorialne („kto”) i porządkowe („klasa”), aby zapewnić, że model jest zasilany danymi liczbowymi, ponieważ LGBM nie zużywa danych nieliczbowych.

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

 

Następnie podajemy hiperparametry modelu jako argumenty do konstruktora lub możemy przekazać je jako słownik do metody set_params.  

Ostatnim krokiem do zainicjowania szkolenia modelu jest załadowanie zestawu danych poprzez utworzenie instancji klasy LGBMClassifier i dopasowanie jej do danych treningowych. 

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)

 

Następnie oceńmy wydajność przeszkolonego klasyfikatora na niewidocznym lub testowym zbiorze danych.

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

Dostrajanie hiperparametrów

LGBMClassifier pozwala na dużą elastyczność dzięki hiperparametrom, które można dostroić w celu uzyskania optymalnej wydajności. Tutaj pokrótce omówimy niektóre z kluczowych hiperparametrów:

  • liczba_liści: Jest to główny parametr kontrolujący złożoność modelu drzewa. W idealnym przypadku wartość num_leaves powinna być mniejsza lub równa 2^(max_głębokość).
  • min_data_in_leaf: Jest to ważny parametr zapobiegający nadmiernemu dopasowaniu w drzewie liściastym. Jego optymalna wartość zależy od liczby próbek treningowych oraz num_leaves.
  • maksymalna głębokość: Możesz użyć tego, aby jawnie ograniczyć głębokość drzewa. Najlepiej dostroić ten parametr w przypadku przeuczenia.

Dostosujmy te hiperparametry i wytrenujmy nowy 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

 

Należy pamiętać, że rzeczywiste dostrajanie hiperparametrów to proces, który wymaga prób i błędów i może być również prowadzony przez doświadczenie i głębsze zrozumienie algorytmu wzmacniającego oraz wiedzę merytoryczną (znajomość dziedziny) problemu biznesowego, nad którym pracujesz.

W tym poście dowiedziałeś się o algorytmie LightGBM i jego implementacji w języku Python. Jest to elastyczna technika, która jest przydatna w przypadku różnych typów problemów z klasyfikacją i powinna być częścią zestawu narzędzi do uczenia maszynowego.
 
 
Widhi Chugh jest strategiem sztucznej inteligencji i liderem transformacji cyfrowej, pracującym na styku produktów, nauk ścisłych i inżynierii w celu tworzenia skalowalnych systemów uczenia maszynowego. Jest wielokrotnie nagradzaną liderem innowacji, autorką i międzynarodową mówczynią. Jej misją jest demokratyzacja uczenia maszynowego i przełamywanie żargonu, aby wszyscy mogli być częścią tej transformacji.
 

Znak czasu:

Więcej z Knuggety