Makine Öğrenmesi - II. Doğrusal Olmayan İlişkiler (Non-Linear Relationships)

Doğrusal Olmayan Regresyonları Birlikte Kullanma

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

Doğrusal olmayan regrasyon modelleri olarak;

  • K-En Yakın Komşu (KNN)
  • Destek Vektör Regresyonu (SVR)
  • Bernoulli Kısıtlı Boltzmann Makinası (RBM)
  • Karar Ağaçları
  • Torbalama Ağaçları
  • Rastgele Ormanlar
  • Ekstra Ağaçlar
  • Gradient Boosting
  • Extreme Gradient Boosting
  • Light Gradient Boosted Machine

olmak üzere 10 farklı lineer regresyon modeli incelenmiş oldu.

Yukarda sayılan regresyon modellerinde aynı veri seti üzerinde tahmin işlemi yapıldığında MSERMSEMAER2_Score değerlerinde farklılıklar olacaktır. İlgili değerlerinin hangi regresyon modelinde daha iyi sonuç verdiğini tek bir tabloda görebilmek için aşağıdaki fonksiyonu kullanabilir;

def nonLinearRegressionFunc(dataset,columnName):
    
    #İlgili kütüphaneler eklendi
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error,r2_score,mean_absolute_error
    from sklearn.neighbors import KNeighborsRegressor
    from sklearn.svm import SVR
    from sklearn.neural_network import MLPRegressor
    from sklearn.tree import DecisionTreeRegressor,ExtraTreeRegressor
    from sklearn.ensemble import BaggingRegressor,RandomForestRegressor,ExtraTreesRegressor,GradientBoostingRegressor
    from xgboost import XGBRegressor #yüklemek için: pip install xgboost
    from lightgbm import LGBMRegressor #yüklemek için: pip install lightgbm
    import warnings #uyarı çıktılarını gösterme
    warnings.filterwarnings("ignore")
    
    #Regresyon modelleri değişkenlere eşitlendi
    KNN=KNeighborsRegressor()
    svr=SVR()
    MLP=MLPRegressor()
    #Ber=BernoulliRBM()
    DTR=DecisionTreeRegressor()
    ETR=ExtraTreeRegressor()
    BR=BaggingRegressor()
    RFR=RandomForestRegressor()
    ETR2=ExtraTreesRegressor()
    GBR=GradientBoostingRegressor()
    XGB=XGBRegressor()
    LGBM=LGBMRegressor()
  
    #modelleri ve isimlerini bir liste halinde tutalım
    modelList=[KNN,svr,MLP,DTR,ETR,BR,RFR,ETR2,GBR,XGB,LGBM]
    modelNames=["KNeighborsRegressor","SVR","MLPRegressor","DecisionTreeRegressor","ExtraTreeRegressor",
                "BaggingRegressor","RandomForestRegressor","ExtraTreesRegressor","GradientBoostingRegressor",
                "XGBRegressor","LGBMRegressor"]
    
    #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
    #MSE,RMSE,MSA ve r2_score için boş bir liste oluşturalım
    MSE=[]
    RMSE=[]
    MAE=[]
    R2=[]
    
    for model in modelList:
        #model eğitildi
        model.fit(x_train,y_train)
        
        #x_test tahmin edildi
        predictModel=model.predict(x_test)
        
        #MSE,RMSE,MSA ve r2_score listelerine çıkan bu sonuçları eklendi
        MSE.append(mean_squared_error(y_test,predictModel))
        RMSE.append((mean_squared_error(y_test,predictModel)**.5))
        MAE.append(mean_absolute_error(y_test,predictModel))
        R2.append(r2_score(y_test,predictModel))
        
    #Şuan elimizde 11'er tane elemanı bulunan MSE,RMSE,MSA ve r2_score listesi bulunmakta.
    #Bu listeleri bir tablo halinde dışarıya aktaralım.
    datas={"MSE":MSE,"RMSE":RMSE,"MAE":MAE,"R2_SCORE":R2}
    result=pd.DataFrame(data=datas,index=modelNames)

    #Sonuçlar "r2_score" değerine göre sıralansın
    return result.sort_values("R2_SCORE",ascending=False) 

Yukarıda bulunan "nonLinearRegressionFunc" isimli yazmış olduğumuz fonksiyona verisetini ve regresyon yapmak istediğimiz değişken ismini verdiğimizde bize 11 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.

Örnek-1:

#cars veri seti
#"Price" sütununda lineer olmayan regresyon yapalım
import pandas as pd
dfCars=pd.read_excel("cars.xls")
dfCars.sample(2)

Çıktı:

 
nonLinearRegressionFunc(dfCars,"Price")

Çıktı:

Örnek-2:

#diamonds veri seti
#"price" sütununda regresyon yapalım
import seaborn as sns
dfDiamonds=sns.load_dataset("diamonds")
dfDiamonds.sample(2)

Çıktı:

nonLinearRegressionFunc(dfDiamonds,"price")

Çı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.