Makine Öğrenmesi - I-Doğrusal İlişkiler (Linear Relationships)
Doğrusal Regresyonları Birlikte Kullanma
Doğrusal Regrasyon modelleri olarak;
- LinearRegrassion
- Ridge
- Lasso
- Elastic-Net
- PLSRegression
olmak üzere 5 farklı lineer regresyon modeli incelenmiş oldu.
Yukarda sayılan regresyon modellerinde aynı veri seti üzerinde tahmin işlemi yapıldığında MSE, RMSE, MAE, R2_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 kullanabiliriz
def linearRegressionFunc(dataset,columnName):
#Gerekli kütüphaneleri 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.linear_model import LinearRegression,Lasso,Ridge,ElasticNet
from sklearn.cross_decomposition import PLSRegression
import warnings
warnings.filterwarnings("ignore")
#Regresyon modelleri değişkenlere eşitlendi
L=LinearRegression()
La=Lasso()
R=Ridge()
E=ElasticNet()
PLS=PLSRegression()
#modelleri ve isimlerini bir liste halinde tutalım
modelList=[L,La,R,E,PLS]
modelNames=["LinearRegression","Lasso","Ridge","Elastic-Net","PLSRegression"]
#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:
#modeli 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 5'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 "linearRegressionFunc" isimli yazmış olduğumuz fonksiyona verisetini ve regresyon yapmak istediğimiz değişken ismini verdiğimizde bize 4 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 regresyon yapalım
import pandas as pd
dfCars=pd.read_excel("cars.xls")
dfCars.sample(2)
Çıktı:
linearRegressionFunc(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ı:
linearRegressionFunc(dfDiamonds,"price")
Çıktı: