"Enter"a basıp içeriğe geçin

Python ile Regresyon Modelleri için Performans Değerlendirme

Bir önceki yazımızda regresyon modellerinin performansını değerlendirmek üzere dört farklı yönteme değinmiştik:

  • Ortalama Mutlak Hata (Mean Absolute Error – MAE)
  • Ortalama Karesel Hata (Mean Squared Error – MSE)
  • Kök Ortalama Karesel Hata (Root Mean Squared Error – RMSE)
  • R Kare Skor (R Square Score – R2 Score)

Bu yazımızda ise Jupyter Notebook üzerinde yapacağımız python uygulamaları ile bu bilgilerimizi pratiğe çevireceğiz.

Pratik uygulamamız için sklearn kütüphanesinin sağladığı diabetes veri setini kullanacağız.

from sklearn.datasets import load_diabetes
dataset = load_diabetes()

load_diabetes diğer sklearn veri setleri gibi bize Python dilinde sıkça kullanılan dictionary yapısına benzer bunch nesnesi döndürür.

dataset olarak adlandırdığımız bunch nesnesine ait .DESCR stringi veri setini tanımamıza yardımcı olacaktır:

print(dataset.DESCR)

Kısaca özetlemek gerekirse 442 kişiye ait yaş, cinsiyet, beden kütle indeksi, ortalama kan basıncı ve S1, S2, S3, S4, S5, S6 olarak isimlendirilen kan ölçümlerine karşılık hastalık ilerlemesinin nicel bir ölçümünü barındırmaktadır. Bu pratik ile biz de verilen özelliklere karşılık olarak hastalık ilerlemesinin nicel ölçümünü tahmin etmeye çalışşacağız.

Elbette veri bilimi uygulamalarında ilgili alana ait olan süreci anlamanın çok önemli olduğunu ve burada yapılacak örneğin hiç bir tıbbi maksat ile kullanılamayacağını hatırlatalım. Gerçek uygulamalar için yapılacak çalışmalarda uzman görüşleri ile ilerlemek ve süreci kavramak gerekmektedir.

Veri setine ilişkin keşifsel veri analizi yapmak da pratik kazanmak ve veriyi anlamak açısından faydalı olacaktır.

Veri setine ilişkin özellik seti ile etiketleri için nesneleri tanımlayarak devam edelim:

features = dataset.data
labels = dataset.target

Veri setini elde ettiğimize göre, sırada eğitim (train) ve test setlerine ayrıştırmayı gerçekleştirebiliriz:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size = 0.20, shuffle = True)

X_train ve y_train eğitim (training) için, X_test ve y_test ise test için kullanılacak.

Doğrusal Regresyon modelini seçerek eğitmek için aşağıdaki kod parçasını çalıştırıyoruz:

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train)

Modelimizi eğittiğimize göre, test için ayırdığımız X_test içerisindeki tüm örnekler için tahmin yaptırabiliriz:

y_pred = regressor.predict(X_test)

Tahminleme adımı da tamamlandığına göre, eğitilmiş regresyon modelinin performans ölçümleri hesaplanabilir. Regresyon Modelleri için Performans Değerlendirme adlı yazıda öğrendiğimiz Ortalama Mutlak Hata, Ortalama Karesel Hata, Kök Ortalama Karesel Hata ve R kare skorunu hesaplayabiliriz.

from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
#ortalama mutlak hata
mae = mean_absolute_error(y_test, y_pred)
#ortalama karesel hata
mse = mean_squared_error(y_test,y_pred, squared=True)
#kök ortalama karesel hata
rmse = mean_squared_error(y_test,y_pred, squared=False)
#R kare skoru
r2 = r2_score(y_test,y_pred)
print('ortalama mutlak hata değeri: '+str(mae))
print('ortalama karesel hata değeri: '+str(mse))
print('kök ortalama karesel hata değeri: '+str(rmse))
print('R kare skoru değeri: '+str(r2))

Yukarıdaki kod parçası da çalıştırıldığında aşağıdakine yakın ölçümler elde etmiş olacaksınız:

ortalama mutlak hata değeri: 40.97365951733657
ortalama karesel hata değeri: 2557.5070106019875
kök ortalama karesel hata değeri: 50.57180054736026
R kare skoru değeri: 0.5593711241414976

R kare değerinin 1’e yakın olmaması nedeni ile başarılı bir model geliştirildiğini söylemek güç. Ancak daha iyi anlamak için görselleştirmek istersek:

import matplotlib.pyplot as plt
import numpy as np
plt.figure()
colored = np.abs((y_test-y_pred))
plt.scatter(y_test, y_pred,  c=colored, cmap='Spectral')
plt.xlabel('actual values')
plt.ylabel('predicted values')
plt.title('Diabetes dataset')
plt.colorbar()
plt.show()

Kod parçası çalıştırıldığında aşağıdaki scatter plot elde edilir. Bu sayede, tahmin değerleri gerçek değerlere yaklaştıkça daha kırmızı, uzaklaştıkça daha mor olarak görecek şekilde görselleştirmiş olduk. Matplotlib’e ait farklı cmap değerleri ile farklı renklendirmeler elde etmek mümkün.

Farklı modeller ya da farklı parametreler ile daha iyi metrik değerleri elde etmek mümkün. Ancak her halükarda istenilen sonucun elde edilip edilmediğini anlamak için görselleştirmeye özen göstermek gerekir.

Uygulamanın github reposuna erişmek için tıklayın.

Keyifli öğrenmeler 🙂

İlk Yorumu Siz Yapın

Bir Cevap Yazın

Translate »
%d blogcu bunu beğendi: