Makine Öğrenmesi - Sınıflandırma Algoritmaları
LightGBM (Hafif Gradyan Artırma Makinesi)
LightGBM (Light Gradient Boosted Machine - Hafif Gradyan Artırma Makinesi), modelin verimliğini artırmak ve bellek kullanımını azaltmak için kullanılan bir kütüphanedir.
XGBoost ile birlikte popülerliği artan bir kütüphanedir.
LightGBM modülünü kullanabilmek için ilk olarak lightgbm'in indirilmesi gerekmektedir.
pip install lightgbm
Sınıflandırma pojelerinde kullanabilmek için "LGBMClassifier" kütüphanesinin içe aktarılması gerekmektedir.
from lightgbm import LGBMClassifier
Söz dizimi: LGBMRegressor(boosting_type='gbdt', num_leaves=31, max_depth=- 1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=- 1, importance_type='split', **kwargs)
Örnek-1: İris veri seti üzerinden, species sütununa LGBMClassifier sınıflandırma algoritmasını uygulayalım.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score
from sklearn.metrics import confusion_matrix,classification_report
from lightgbm import LGBMClassifier
Keşifsel Veri Analizi EDA
#Veri seti okunur
df=sns.load_dataset("iris")
df.head()
Çıktı:
# Veri seti hakkında bilgi
df.info()
Çıktı:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 150 entries, 0 to 149 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 sepal_length 150 non-null float64 1 sepal_width 150 non-null float64 2 petal_length 150 non-null float64 3 petal_width 150 non-null float64 4 species 150 non-null object dtypes: float64(4), object(1) memory usage: 6.0+ KB
#species sütunu eleman sayıları
df.species.value_counts()
Çıktı:
setosa 50 versicolor 50 virginica 50 Name: species, dtype: int64
#Veri seti açıklamaları
df.describe()
Çıktı:
#Sütunların birbirleri ile korelasyonu
df.corr()
Çıktı:
#Korelasyon görüntülenmesi
sns.heatmap(df.corr(),annot=True)
Çıktı:
#türe göre sepal ve petal length
sns.scatterplot(x="sepal_length",y="petal_length",hue="species",data=df)
Çıktı:
Model Oluşturma İşlemleri
#x(bağımsız değişkenler) ve y(hedef/tahmin değişkeni) ataması yapılır.
x,y=df.drop("species",axis=1),df[["species"]]
#train ve test verileri ayrılır
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=13)
x_train.shape,x_test.shape,y_train.shape,y_test.shape
Çıktı:
((120, 4), (30, 4), (120, 1), (30, 1))
#LGBMClassifier ataması yapılır
LGBM=LGBMClassifier()
#Model eğitme işlemi
LGBM.fit(x_train,y_train)
#x_test verilerini tahminleme işlemi
predict_LGBM=LGBM.predict(x_test)
confusion_matrix(y_test,predict_LGBM)
Çıktı:
array([[ 9, 0, 0], [ 0, 8, 0], [ 0, 2, 11]], dtype=int64)
#confusion_matrix değerlerinin grafikselleştirmesi
sns.heatmap(confusion_matrix(y_test,predict_LGBM),annot=True,linewidths=2)
Çıktı:
#Sınıflandırma raporu
print(classification_report(y_test,predict_LGBM))
Çıktı:
precision recall f1-score support setosa 1.00 1.00 1.00 9 versicolor 0.80 1.00 0.89 8 virginica 1.00 0.85 0.92 13 accuracy 0.93 30 macro avg 0.93 0.95 0.94 30 weighted avg 0.95 0.93 0.93 30
Sınıflandırma raporunda da görüldüğü gibi girilen 4 değere ('sepal_length', 'sepal_width', 'petal_length', 'petal_width') göre species sütununda bulunan türleri doğru tahmin etme yüzdesi accuracy değeri göz önüne alınırsa %93 olarak tahmin etmiş olundu.
Model Tahminleme İşlemleri
LGBMClassifier algoritması ile oluşturulan modele gireceğimiz değerlerin türünü tahmin ettirmek için;
LGBM.predict([[2.1,5.4,7.3,2.0]]) #'sepal_length', 'sepal_width', 'petal_length', 'petal_width'
Çıktı:
array(['virginica'], dtype='<U10')
Girilen değerlerin "virginica" türüne ait olduğu tahmin edilmiş oldu.