Makine Öğrenmesi - Sınıflandırma İçin Model Değerlendirmesi
Accuracy score, Precision score, Recall score, F-1 score
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.