Makine Öğrenmesi - Sınıflandırma İçin Model Değerlendirmesi

Accuracy score, Precision score, Recall score, F-1 score

Yayın tarihi :16-Oca-22

Makine öğrenmesi sınıflandırma ile oluşturulan modellerinin başarı oranlarını ölçmek için Accuracy score, Precision score, Recall score ve F-1 score yapılarını kullanabiliriz.

İlgili yapıları aşağıdaki tablo üzerinden aktaralım. ** Aşağıdaki tablo, ikili (binary) sınıflandırma için kurulmuş olan bir modelin çıktısıdır. Bu yapıda Pozitif ve Negatif terimleri doğruluk veya yanlışlığı değil ayrıştırılmak istenen sınıfları (örn: kanser/kanser değil) temsil etmektedir.

Bir hastanın kanser olup olmadığını tahmin eden bir sınıflandırma projesi üzerinde çalıştığımızı varsayarsak;

  • True Pozitif (TP), doğru tahmin edilen pozitif değerlerdir. Gerçekte hasta kanser değildir, sizde kanser olmadığını söylediğinizde True Pozitif alanına girer.
  • True Negatif (TN), doğru tahmin edilen negatif değerdir. Gerçekte hasta kanserdir, siz de kanser olduğunu söylediğinizde True Negatif alanına girer.
  • False Negatif (FN), gerçekte yanlış ama tahmin edilen doğru olan değerlerdir. Gerçekte hasta kanserdir, siz de kanser olmadığını söylediğinizde False Negatif alanına girer.
  • False Pozitif (FP), gerçekte doğru ama tahmin edilen yanlış olan değerlerdir. Gerçekte hasta kanser değildir, siz de kanser olduğunu söylediğinizde False Pozitif alanına girer.

Aşağıdaki konu detaylarında anlatılmak üzere x ve y adında iki liste oluşturalım. X değerleri gerçek olan liste, y değerleri de x değerlerine göre tahmin edilen liste değerlerinden oluşsun.

#0=Kanser Değil
#1=Kanser

#gerçek değerler
x=[1,1,0,0,0,1,1,0,0,0]

#tahmin edilen değerler
y=[1,0,1,0,0,0,1,1,0,0]

x ve y değerlerini yukardaki tablo gibi ifade etmek gerekirse; TP=4, FN=2, FP=2 ve TN=2 değerleri oluşur.

1. Accuracy score (Doğruluk sınıflandırma puanı): Benzersiz olarak hedef değeri 2 (binary) veya daha fazla öğeden oluşan veri setlerinin doğruluk oranını hesaplar.

Formülü: (TP+TN) / (TP + TN + FN + FP)

Kullanabilmek için kütüphanesinin içeri aktarılması gerekmektedir.

from sklearn.metrics import accuracy_score

Söz dizimi: accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None)

  • y_true, gerçek değerlerin olduğu listeyi temsil eder.
  • y_pred, tahmin edilen değerlerin olduğu listeyi temsil eder.
  • normalize, y_true ve y_pred arasındaki doğruluk milktarını temsil eder. Varsayılan olarak 1.0 üzerinden benzerlik oranını verirken normalize=False olduğu durumda benzerlik sayısını verir.
accuracy_score(x,y)

Çıktı:

0.6

x ve y listeleri 1.0 üzerinden 0.6 yani %60 oranında benzerdir, sonucu çıkmıştır. 

#Kaç tane benzer değer var?
accuracy_score(x,y,normalize=False)

Çıktı:

6

2. Precision score (Kesinlik skoru): Sezgisel olarak sınıflandırıcının negatif olan bir örneği pozitif olarak etiketlememe yeteneğidir.

Formülü: (TP) / (TP + FP)

Kullanabilmek için kütüphanesinin içeri aktarılması gerekmektedir.

from sklearn.metrics import precision_score

Söz dizimi: precision_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)

  • y_true, gerçek değerlerin olduğu listeyi temsil eder.
  • y_pred, tahmin edilen değerlerin olduğu listeyi temsil eder.
  • average, binary(ikili)(0/1 veya kanser/kanser değil) olmayan yapılar(çok sınıflı/çok etiketli yapılar) için gereklidir. 5 farklı değer alabilir: "binary","micro", "macro", "samples", "weighted". Varsayılan olarak binary'dir. **Eğer binary(ikili) olmayan yapılarda seçim yapılmadan çalıştırılmak istenirse hata verecektir.
    • binary, yalnızca belirtilen sınıf için sonuçları rapor eder.
    • micro, Toplam doğru pozitifleri(TP), yanlış negatifleri(FN) ve yanlış pozitifleri(FP) sayarak metrikleri global olarak hesapllar.
    • macro, her etiket için metrikleri hesaplar ve bunların ağırlıksız ortalamasını bulur.
    • samples, her bir örnek için metrikleri hesaplar ve ortalamalarını bulur.
    • weighted, her etiket için metrikleri hesaplar ve desteğe (her etiket için gerçek örnek sayısı) göre ağırlıklandırılmış ortalamalarını bulur.
precision_score(x,y)

Çıktı:

0.5

x ve y listeleri 1.0 üzerinden 0.5 yani %50 oranında kesin olarak doğrudur. 

3. Recall score (Geri çağırma skoru): Sezgisel olarak sınıflandırıcının tüm pozitif örnekleri bulma yeteneğidir. Doğru tahmin edilen pozitif gözlemlerin gerçek sınıftaki tüm değerlere oranıdır.

Formülü: (TP) / (TP + FN)

Kullanabilmek için kütüphanesinin içer aktarılması gerekmektedir.

from sklearn.metrics import recall_score

Söz dizimi: recall_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')

  • y_true, gerçek değerlerin olduğu listeyi temsil eder.
  • y_pred, tahmin edilen değerlerin olduğu listeyi temsil eder.
  • average, binary(ikili)(0/1 veya kanser/kanser değil) olmayan yapılar(çok sınıflı/çok etiketli yapılar) için gereklidir. 5 farklı değer alabilir: "binary","micro", "macro", "samples", "weighted". Varsayılan olarak binary'dir. **Eğer binary(ikili) olmayan yapılarda seçim yapılmadan çalıştırılmak istenirse hata verecektir.
    • binary, yalnızca belirtilen sınıf için sonuçları rapor eder.
    • micro, Toplam doğru pozitifleri(TP), yanlış negatifleri(FN) ve yanlış pozitifleri(FP) sayarak metrikleri global olarak hesapllar.
    • macro, her etiket için metrikleri hesaplar ve bunların ağırlıksız ortalamasını bulur.
    • samples, her bir örnek için metrikleri hesaplar ve ortalamalarını bulur.
    • weighted, her etiket için metrikleri hesaplar ve desteğe (her etiket için gerçek örnek sayısı) göre ağırlıklandırılmış ortalamalarını bulur.
recall_score(x,y,average="binary")
#veya
#recall_score(x,y)

Çıktı:

0.5

x ve y listeleri 1.0 üzerinden 0.5 yani %65 oranında geri Recall score sahiptir.

4. F-1 score: Precision score (Kesinlik skoru) ve Recall score (Geri çağırma skoru)'nun ağırlıklı ortalamasıdır.  Bu nedenle de kesinlik skorundan gelen yanlış pozitifleri ve geri çağırma skorundan gelen yanlış negatifleri hesaba katar.

Formülü: F1: 2 * (precision * recall) / (precision + recall)

Kullanabilmek için kütüphanesinin içeri aktarılması gerekmektedir.

from sklearn.metrics import f1_score

Söz dizimi: f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')

  • y_true, gerçek değerlerin olduğu listeyi temsil eder.
  • y_pred, tahmin edilen değerlerin olduğu listeyi temsil eder.
  • average, binary(ikili)(0/1 veya kanser/kanser değil) olmayan yapılar(çok sınıflı/çok etiketli yapılar) için gereklidir. 5 farklı değer alabilir: "binary","micro", "macro", "samples", "weighted". Varsayılan olarak binary'dir. **Eğer binary(ikili) olmayan yapılarda seçim yapılmadan çalıştırılmak istenirse hata verecektir.
    • binary, yalnızca belirtilen sınıf için sonuçları rapor eder.
    • micro, Toplam doğru pozitifleri(TP), yanlış negatifleri(FN) ve yanlış pozitifleri(FP) sayarak metrikleri global olarak hesapllar.
    • macro, her etiket için metrikleri hesaplar ve bunların ağırlıksız ortalamasını bulur.
    • samples, her bir örnek için metrikleri hesaplar ve ortalamalarını bulur.
    • weighted, her etiket için metrikleri hesaplar ve desteğe (her etiket için gerçek örnek sayısı) göre ağırlıklandırılmış ortalamalarını bulur.
f1_score(x,y,average="binary")
#veya
#f1_score(x,y)

Çıktı:

0.5

Sonuç olarak; Yukarıda sayılmış olunan sınıflandırma modellerinin doğruluklarının ölçülmesi yöntemlerinden sadece "Accuracy Score" değerine bakıp, modelin doğruluğunu buna göre belirlemek hatalara neden olabilecektir. Saymış olduğumuz diğer 3 yöntemi de gelen projenin amacına uygun bir şekilde değerlendirmek gerekecektir. 

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.