Makine Öğrenmesi - Sınıflandırma Algoritmaları

Sınıflandırma Algoritmalarını Birlikte Kullanma

Yayın tarihi :20-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

Sınıflandırma algoritmaları olarak;   

  • GaussianNB
  • MultinomialNB
  • ComplementNB
  • BernoulliNB
  • CategoricalNB
  • KNeighborsClassifier
  • LogisticRegression
  • DecisionTreeClassifier
  • ExtraTreeClassifier
  • RandomForestClassifier
  • SVC
  • MLPClassifier
  • GradientBoostingClassifier
  • XGBClassifier
  • LGBMClassifier

olmak üzere 15 farklı sınıflandırma algortiması incelenmiş oldu.

Yukarda sayılan sınıflandırma algoritmalarına aynı veri seti üzerinde tahmin işlemi yapıldığında Accuracy score, Precision score, Recall score, F-1 score değerlerinde farklılıklar olacaktır. İlgili değerlerinin hangi sınıflandırma modelinde daha iyi sonuç verdiğini tek bir tabloda görebilmek için aşağıdaki fonksiyonu kullanabilir

def classification(dataset,columnName):
    #İlgili kütüphaneler eklendi
    import pandas as pd
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    %matplotlib inline
    import warnings #uyarı çıktılarını gösterme
    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 sklearn.naive_bayes import GaussianNB,MultinomialNB,ComplementNB,BernoulliNB,CategoricalNB
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.linear_model import LogisticRegression
    from sklearn.tree import DecisionTreeClassifier,ExtraTreeClassifier
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.svm import SVC
    from sklearn.neural_network import MLPClassifier
    from sklearn.ensemble import GradientBoostingClassifier
    from xgboost import XGBClassifier #yüklemek için: pip install xgboost
    from lightgbm import LGBMClassifier #yüklemek için: pip install lightgbm
    
    #Sınıflandırma modelleri değişkenlere eşitlendi
    GNB=GaussianNB()
    MNB=MultinomialNB()
    CNB=ComplementNB()
    BNB=BernoulliNB()
    #DNB=CategoricalNB() #bilinmeyen test verilerinde hata verdiği için kaldırıldı.
    KNN=KNeighborsClassifier()
    LR=LogisticRegression()
    DTC=DecisionTreeClassifier()
    ETC=ExtraTreeClassifier()
    RFC=RandomForestClassifier()
    svc=SVC()
    MLP=MLPClassifier()
    GBC=GradientBoostingClassifier()
    XGB=XGBClassifier(eval_metric='mlogloss')
    LGBM=LGBMClassifier()
    
    #modelleri ve isimlerini bir liste halinde tutalım
    modelList=[GNB,MNB,CNB,BNB,KNN,LR,DTC,ETC,RFC,svc,MLP,GBC,XGB,LGBM]
    modelNames=["GaussianNB", "MultinomialNB", "ComplementNB", "BernoulliNB", "KNeighborsClassifier", 
                "LogisticRegression", "DecisionTreeClassifier", "ExtraTreeClassifier", "RandomForestClassifier",
                "SVC","MLPClassifier", "GradientBoostingClassifier", "XGBClassifier", "LGBMClassifier"]
    
    #x ve y değerlerine atama yapıldı
    dataset=dataset.dropna(axis=0) #veri setinde boş değişken değeri varsa o satırı kaldıralım.
    x,y=dataset.drop(columnName,axis=1),dataset[[columnName]]
    
    #x değerlerine get_dummies modülü uygulandı
    x=pd.get_dummies(x,drop_first=True)   
    
    #x ve y değerlerine train_test_split modülü uygulandı
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=.2,random_state=13)    
    
    #Model eğitme ve tahminleme işlemleri
    # Accuracy score, Precision score, Recall score, F-1 score için boş bir liste oluşturalım
    AScore=[]
    PScore=[]
    RScore=[]
    F1Score=[]
    for model in modelList:
        #modeli eğitildi
        model.fit(x_train,y_train)  
        
        #x_test tahmin edildi
        predictModel=model.predict(x_test)
        
        # Accuracy score, Precision score, Recall score, F-1 score listelerine çıkan bu sonuçları eklendi
        try: #Precision score, Recall score, F-1 score average değerleri varsayılan olarak binary(ikili) sistem
            AScore.append(accuracy_score(y_test,predictModel))
            PScore.append(precision_score(y_test,predictModel))
            RScore.append(recall_score(y_test,predictModel))
            F1Score.append(f1_score(y_test,predictModel))
        except:#Eğer hedef sütunu binary değilse Precision score, Recall score, F-1 score average değerlerini micro seç.
            PScore.append(precision_score(y_test,predictModel,average="micro"))
            RScore.append(recall_score(y_test,predictModel,average="micro"))
            F1Score.append(f1_score(y_test,predictModel,average="micro"))
    #Şuan elimizde 14'er tane elemanı bulunan Accuracy score, Precision score, Recall score, F-1 score listesi bulunmakta.
    #Bu listeleri bir tablo halinde dışarıya aktaralım.
    datas={"Accuracy score":AScore,"Precision score":PScore,"Recall score":RScore,"F-1 score":F1Score}
    result=pd.DataFrame(data=datas,index=modelNames)

    #Sonuçlar "Accuracy score" değerine göre sıralansın
    return result.sort_values("F-1 score",ascending=False)

Yukarıda bulunan "classification" isimli yazmış olduğumuz fonksiyona veri setini ve sınıflandırma yapmak istediğimiz değişken ismini verdiğimizde bize 14 tane regresyon modelinde tahminleme yaprak sonucu döndürecektir. Bunu test etmek için bir kaç tane veri setini kullanalım. Ama dikkat edilmesi gereken konu veri seti fonksiyona verilmeden önce EDA işlemleri yapılarak temizlenmelidir, deneme amaçlı temiz veri setleri verelim.

import pandas as pd
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")

Örnek-1:

#iris veri seti
#"species" sütununda sınıflandırma işlemleri yapalım
dfIris=sns.load_dataset("iris")
dfIris.head()

Çıktı:

 
classification(dfIris,"species")

Çıktı:

Örnek-2:

#titanic veri seti
#"survived" sütununda sınıflandırma işlemleri yapalım
dfTitanic=sns.load_dataset("titanic")
dfTitanic.sample(2)

Çıktı:

# Veri seti temizleme

#age sütununda 177 tane boş alan olduğundan, ortalama değer ile boş alanları dolduralım.
dfTitanic.age.fillna(dfTitanic.groupby("sex")["age"].transform("mean"),inplace=True)

#embarked gemiye binilen yerin kısaltması 2 tane eksik alan olduğundan onlar en çok olan değerle doldurulabilir.
dfTitanic.embarked.fillna(dfTitanic.embarked.mode()[0],inplace=True)

#class ve pclass değerleri birbirleri ile aynı olduğundan class sütununu silelim
del dfTitanic["class"]

#deck(güverte) alanında da 688 boş alan var,203 alan doludur. 
#Önem derecesine bağlı olarak silinebilir veya en çok değerle doldurulabilir. 
#Değerinin fazla olmadığını düşünerek ilgili sütunu silelim.
del dfTitanic["deck"]

#alive değerleri surivived tahmin sütununun tekrarı olduğundan silinebilir.
del dfTitanic["alive"]

#alone değerleri 0 ve 1 olarak değiştirilebilir.
dfTitanic.alone=dfTitanic.alone.map(lambda x:1 if x==True else 0)

#embarked sütunu ile embark_town sütun değerlerinin kısaltması olduğundan embark_town kaldırılabilir
del dfTitanic["embark_town"]
classification(dfTitanic,"survived")

Çıktı:

Örnek-3:

#heart veri seti
#"target" sütununda sınıflandırma işlemleri yapalım
dfHeart=pd.read_csv("heart.csv")
dfHeart.sample(2)

Çıktı:

classification(dfHeart,"target")

Çıktı:

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.