Doğruluk
- Makine Öğrenmesi kursu
- Başlangıç
- Ders 62/112
- 5 dk
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 yaramazBu 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
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
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.
acc = ____(y_test, y_pred)
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 |