CodeBlanks Logo Icon CodeBlanks

Doğruluk

Doğruluk (accuracy), doğru tahminlerin toplam tahminlere oranıdır.

Doğruluk

Doğruluk, doğru tahminlerin tüm tahminlere oranıdır. Sınıflandırıcıların score yöntemi bunu döndürür:

from sklearn.metrics import accuracy_score
y_true = [1, 0, 1, 1, 0]
y_pred = [1, 0, 0, 1, 0]
print(accuracy_score(y_true, y_pred))   # 0.8
print((np.array(y_true) == np.array(y_pred)).mean())   # aynısı

Anlaşılması en kolay metriktir ve sınıflar dengeliyken iyi bir özet verir.

Dengesiz sınıflarda tuzak

Sahte işlemlerin %1 olduğu bir veride "her şey normal" diyen model %99 doğruluk alır ama hiçbir sahtekârlığı yakalamaz:

y_true = np.array([0] * 99 + [1])
y_pred = np.zeros(100, dtype=int)
print(accuracy_score(y_true, y_pred))   # 0.99, ama işe yaramaz

Bu yüzden dengesiz problemlerde doğruluğun yanında karmaşıklık matrisi, kesinlik ve duyarlılık incelenir.

Uygulama Temel çizgiyle karşılaştır

DummyClassifier(strategy="most_frequent") ile her zaman en sık sınıfı tahmin eden bir temel model kur. Hem onun hem LogisticRegression(max_iter=5000) modelinin test doğruluğunu round(..., 3) ile alt alta yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)

temel = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
m = LogisticRegression(max_iter=5000).fit(X_train, y_train)
print(round(temel.score(X_test, y_test), 3))
print(round(m.score(X_test, y_test), 3))

Beklenen çıktı

0.629
0.937

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 200 tahminin 170'i doğruysa doğruluk kaçtır?

  • 0.70
  • 1.18
  • 0.85 Doğru cevap
  • 0.17

Açıklama: 170 / 200 = 0.85.

2 Doğruluğu metrik fonksiyonuyla hesapla.

Soru
acc = ____(y_test, y_pred)
Cevap
acc = accuracy_score(y_test, y_pred)

Açıklama: accuracy_score(y_true, y_pred): önce gerçek, sonra tahmin.

3 Durumları eşleştir.

Kavram Anlamı
Dengeli sınıflar Doğruluk anlamlı
%99 tek sınıf Doğruluk yanıltıcı
m.score(X, y) Sınıflandırıcıda doğruluk
y_true == y_pred Doğru tahmin maskesi

Başlangıç bölümündeki tüm dersler