LightGBM

Son yıllarda veri boyutu ve çeşitliliğin hızla artması ile algoritma optimizasyonlarına verilen önem giderek artmaktadır. Bu sebeple Gradient Boosting algoritmasına alternatif olarak XGBoost, LightGBM, Catboost gibi Gradient Boosting’in versiyonları kabul edilebilecek algoritmalar geliştirilmiştir. Bu algoritmalar ile daha hızlı eğitim ve daha yüksek doğruluk elde edilmesi amaçlanmıştır.

Yazıda öncelikle LightGBM algoritmasının alt yapısı incelenecek, sonrasında Python uygulaması yapılarak Gradient Boosting ve XGBoost ile performansları karşılaştırılaştırılacaktır. Yazıdan daha iyi verim alabilmek için karar ağaçları ve boosting algoritmalarının yapısı hakkında genel bilgi sahibi olunması kolaylık sağlayacaktır. Gradient Boosting ve XGBoost ile ilgili yazılarıma link‘ten ulaşabilirsiniz.

LightGBM, Microsoft DMTK (Distributed Machine Learning Toolkit) projesi kapsamında 2017 yılında geliştirilmiş bir boosting algoritmasıdır. Diğer boosting algoritmaları ile karşılaştırıldığında yüksek işlem hızı, büyük verileri işleyebilmesi, daha az kaynak(RAM) kullanımı, yüksek tahmin oranı, paralel öğrenme ve GPU öğrenimini desteklemesi gibi avantajları vardır. Modelin tanıtıldığı “LightGBM: A Highly Efficient Gradient Boosting Decision Tree” makalesine göre, yapılan çalışmalarda LightGBM’in diğer modellere göre 20 kat daha hızlı olduğu sonucuna ulaşılmıştır. Makeleye buradan erişebilirsiniz.

NASIL ÇALIŞIR?

LightGBM, histogram tabanlı çalışan bir algoritmadır. Sürekli değere sahip olan değişkenleri kesikli(discrete bin) hale getirerek hesaplama maliyetini azaltır. Karar ağaçlarının eğitim süresi yapılan hesaplama ve dolayısıyla bölünme sayısı ile doğru orantılıdır. Bu yöntem sayesinde hem eğitim süresi kısalmakta hem de kaynak kullanımı düşmektedir.

Karar ağaçlarında öğreniminde seviye odaklı (level-wise or depth-wise) veya yaprak odaklı(leaf-wise) olarak iki strateji kullanılabilir. Seviye odaklı stratejide ağaç büyürken ağacın dengesi korunur. Yaprak odaklı stratejide ise kaybı azaltan yapraklardan bölünme işlemi devam eder. LightGBM bu özelliği sayesinde diğer boosting algoritmalarından ayrılmaktadır. Model yaprak odaklı strateji ile daha az hata oranına sahip olur ve daha hızlı öğrenir. Ancak yaprak odaklı büyüme stratejisi veri sayısının az olduğu durumlarda modelin aşırı öğrenmeye yatkın olmasına sebebiyet verir. Bu nedenle algoritma büyük verilerde kullanılmak için daha uygundur. Ayrıca ağaç derinliği, yaprak sayısı gibi parametreler optimize edilip aşırı öğrenmenin önüne geçmeye çalışılabilir.

LightGBM ayrıca diğer algoritmalardan farklı iki teknik kullanmaktadır. Bunlar, veri örneklerinin ve değişkenlerin sayısı ile ilgilenen Gradyan Tabanlı Tek Yönlü Örnekleme ve Özel Değişken Paketi’dir.

Gradyan Tabanlı Tek Yönlü Örnekleme (Gradient-based One-Side Sampling – GOSS): GOSS, karar ağaçlarının doğruluk oranını korurken veri sayısını azaltmayı amaçlamaktadır. Geleneksel Gradient Boosting her bir değişken(feature) için bilgi kazancını (information gain) hesaplamak adına tüm veri örneklerini tarar, ancak GOSS yalnızca önemli verileri kullanır. Böylece, verinin dağılımını fazla etkilemeden veri sayısını azaltılır.

Özel Değişken Paketi (Exclusive Feature Bundling – EFB): EFB, doğruluk oranına zarar vermeden değişken sayısını azaltmayı ve buna bağlı olarak model eğitiminin verimliliğini arttırmayı amaçlamaktadır. EFB’nin iki işlem adımı vardır. Bunlar, paket oluşturmak ve değişkenleri aynı pakette birleştirmektir. EFB ile seyrek özellikleri birleştirilip daha yoğun özellikler oluşturulur. Buna bağlı olarak karmaşıklığın azalmasına ve daha düşük bellek tüketimi ile birlikte daha hızlı eğitim sürecine yol açar.

Özetle, GOSS daha az önemli sayılabilecek verileri ihmal ederek bilgi kazanımını hesaplamak için veri boyutunu azaltırken, EFB boyutsallığı azaltmak için değişkenleri bir araya getirir. Bu iki işlev ile LightGBM eğitim sürecinin verimliliğini arttırır.

PARAMETRE OPTİMİZASYONU

LightGBM’de aşırı öğrenmeyi engellemek için learning_rate, max_dept, num_leaves, min_data_in_leaf parametreleri, öğrenim süresini hızlandırmak için feature_fraction, bagging_fraction ve num_iteration parametreleri optimize edilebilir.

Num_leaves, ağaçta bulunacak yaprak sayısıdır. Ağacın karmaşıklığını kontrol etmede kullanılan en önemli parametredir. Aşırı öğrenmeden kaçınmak için 2^(max_dept)’den küçük olması gerekmektedir. Örneğin, max_depth = 7 olduğunda, num_leaves değerini 127 olarak ayarlamak aşırı öğrenmeye neden olabilir. 70 veya 80 olarak ayarlamak daha iyi doğruluk elde edebilir.

Max_dept, kurulacak ağacın derinliğini limitlemek için kullanılır. Aşırı öğrenmeden kaçınmak için optimum seviyeye getirilmelidir. Çok dallanma aşırı öğrenmeye, az dallanma eksik öğrenmeye sebep olacaktır.

Min_data_in_leaf, aşırı öğrenmeyi engellemek için kullanılacak önemli parametrelerden biridir. Optimum değeri veri büyüklüğüne ve num_leaves’e bağlıdır. Büyük bir değer olarak ayarlamak ağacın büyümesini engelleyebilir ve eksik öğrenmeye neden olabilir.

Learning_rate, kurulan ağaçları ölçeklendirmek için 0-1 arasında verilen bir değerdir. Bu değerin küçük olması daha iyi tahmin gücüne yardımcı olacaktır. Ancak öğrenim süresini arttıracak ve aşırı öğrenme ihtimalini arttıracaktır.

Feature_fraction, her bir iterasyonda kullanılacak değişken; bagging_fraction, her iterasyonda kullanılacak veri sayısının ayarlanabileceği parametrelerdir. Num_iteration, öğrenme sürecinde yapılacak iterasyon sayısıdır. feature_fraction, bagging_fraction ve num_iteration sayıları öğrenim süresi ile doğrudan ilgilidir. Bu sayılar ne kadar az olursa öğrenim süresi o kadar az olacaktır. Ancak eksik öğrenmeye dikkat edilmesi çok önemlidir. Birçok deneme yapılarak  optimum sayı bulunabilir.

UYGULAMA

Uygulamada XGBoost’un incelendiği “XGBoost Nasıl Çalışır? Neden İyi Performans Gösterir?” yazısında da kullanılan, Kaggle web sitesinden erişilebilen “Human Activity Recognition” veri seti kullanılmıştır. 30 gönüllü denek ile oluşturulan bu veri setinde, gönüllülere akıllı telefonlar üzerlerindeyken yürüme, merdiven çıkma, merdiven inme, oturma, kalkma ve uzanma hareketleri yaptırılmıştır. Veri setinin amacı elde edilen verilerle insan davranışlarının tahminlenmesidir. Veri setine link‘ten ulaşabilirsiniz.

Uygulama Windows 10 işletim sisteminde, Python ile Jupyter Notebook kullanılarak yapılmıştır.

#Uygulamada kullanılacak kütüphaneler tanımlanmıştır.
import os
import pandas as pd
import numpy as np

from warnings import filterwarnings
filterwarnings('ignore')
df = pd.read_csv('Simplified_Human_Activity_Recognition.csv')
df = df.drop(labels=['rn'], axis=1)
df.head()
df.shape
(3609, 562)

Datada 3.609 satır ve 562 sütun bulunmaktadır.

#bağımlı ve bağımsız değişkenler belirlenmiştir.
y = df[['activity']]
X = df.iloc[:,1:]

Uygulamada tahmini biraz daha zorlaştırmak için bağımlı değişken sayısı 561’den 20’ye düşürülmüştür.

X=X.sample(n=20, axis=1, random_state=1)
X.shape
(3609, 20)
#Veri seti %70 train, %30 test olarak bölünmüştür.
from sklearn.model_selection import train_test_split, GridSearchCV
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, random_state = 42)

Algoritmaların çalışma sürelerini ölçmek için “time” kütüphanesinden yaralanılmıştır.

#Gradient Boosting Uygulaması
from sklearn.ensemble import GradientBoostingClassifier
from time import time
t0 = time()
gbm_model = GradientBoostingClassifier()
gbm_model.fit(X_train, y_train)
gbm_time = time() - t0
gbm_acc = accuracy_score(y_test, gbm_model.predict(X_test))
#XGBoost Uygulaması
from xgboost import XGBClassifier
t0 = time()
xgb_model = XGBClassifier()
xgb_model.fit(X_train, y_train)
XGBoost_time = time() - t0
XGBoost_acc = accuracy_score(y_test, xgb_model.predict(X_test))
#LightGBM Uygulaması
import lightgbm as lgb
t0 = time()
lgb_model = lgb.LGBMClassifier()
lgb_model.fit(X_train, y_train)
lgb_time = time() - t0
lgb_acc = accuracy_score(y_test, lgb_model.predict(X_test))
#Doğru Tahmin Oranları ve Eğitim Süreleri Görselleştirilmiştir.
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
objects = ['GBM', 'XGBoost', 'LightGBM']
y_pos = np.arange(len(objects))
performance_time = [gbm_time, xgboost_time, lgb_time]
performance_acc = [gbm_acc, xgboost_acc, lgb_acc]
ax1.set_ylabel('Saniye')
ax1.bar(y_pos, performance_time, color='forestgreen')
ax1.tick_params(axis='y')
ax2 = ax1.twinx()
ax2.set_ylabel('Doğru Tahmin Oranı') 
ax2.plot(y_pos, performance_acc, color='red')
plt.xticks(y_pos, objects)
fig.tight_layout() 
plt.title('Model Performansları')
plt.show()

SONUÇ

Yazıda LightGBM algoritmasını arkasındakitemeller ve diğer boosting algoritmalarından farkları üzerinde durulmuştur. Yapılan geliştirmeler ile benzeri algoritmalardan hem tahmin gücü hem de öğrenim süresi olarak daha iyi olduğu iddia edilmiştir. Yazı kapsamında yapılan analiz sonucuna göre de bu doğrulanmıştır. Karşılaştırmayı yukarıdaki grafikten inceleyebilirsiniz.

LightGBM tahmin başarısı olarak hem GBM’in hem de XGboost’un üzerindedir. Ayrıca öğrenim süresi en düşük olan algoritmadır. Yapılan analizde hazır bir veri seti kullanılmış olup veri seti fazla büyük değildir. Bu sebeple öğrenim süresinde XGBoost ile ciddi bir fark gözlemlenmemiştir. Ancak büyük verilerle çalışıldığında bu farkın çok daha bariz olacağı tecrübe ile sabittir 🙂

Bir sonraki yazıda Catboost algoritması incelenecektir. Soru ve yorumlarınızı yazının altında paylaşabilirsiniz.

KAYNAKLAR

LightGBM: A Highly Efficient Gradient Boosting Decision TreeGuolin Ke, Qi Meng, Thomas Finley, Taifeng Wang, Wei Chen, Weidong Ma, Qiwei Ye, Tie-Yan Liu

https://github.com/microsoft/LightGBM

Simplifying Balance Sheet Adjustment Process In Commercial Loan Applications Using Machine Learning Methods – İbrahim Tozlu

An Ensemble Learning Model For Wide-Area Measurement Based Transient Stability Assessment In Power Systems – Can Berk Saner

Human Activity Prediction Using Lifelogging Data – Gizem Sarıarslan

Crop Classification With Polarimetric Synthetic Aperture Radar Images: Comparative Analysis – Mustafa Üstüner

Yazar Hakkında
Toplam 11 yazı
Emre Rıdvan Muratlar
Emre Rıdvan Muratlar
2016 yılından bu yana finans sektöründe veri bilimi üzerine çalışmaktadır. Yıldız Teknik Üniversitesi İstatistik bölümü doktora öğrencisidir.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara