Menu
CoddyTech

Kesinlik ve Duyarlılık

Coddy'nin Machine Learning Journey'sinin Denetimli Öğrenme bölümünün bir parçası. Ders 22 / 58.

İki soru, bir testin grip yanıtlarını değerlendirir. Grip alarmı verdiklerinden kaçı doğruydu? Gerçek grip vakalarının kaçını yakaladı?

Grip testinin karışıklık matrisi iki kez çizilmiş. Solda, Precision 42 / 45 = 0.933 başlıklı; grip denilen sütun vurgulanmış: 3 yanlış alarm ve 42 yakalanan vaka. Sağda, Recall 42 / 47 = 0.894 başlıklı; grip satırı vurgulanmış: 5 kaçırılan vaka ve 42 yakalanan vaka

Kesinlik ilk soruyu yanıtlar: 45 alarmdan 42'si. Duyarlılık ikinci soruyu yanıtlar: 47 vakadan 42'si.

from sklearn.metrics import precision_score, recall_score

print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}")

:.3f her zaman 3 ondalık basamak gösterir, bu yüzden 0.9 değeri 0.900 olarak yazdırılır. Şu çıktı yazdırılır:

0.933
0.894

Daha maliyetli hataya göre seçim yap. Atlanan bir grip vakası yayılır, bu nedenle bu testin duyarlılığa ihtiyacı vardır. Gerçek e-postaları gözden kaçıran bir spam filtresinin ise kesinliğe ihtiyacı vardır.

challenge icon

Görev

Orta

Bir mağazanın filtresi sahte görünen yorumları gizler. Başlangıç kodu tek bir modelden strict_pred ve eager_pred olmak üzere iki sürüm oluşturur ve hangi hatanın daha çok zarar verdiğini okur: missed (sahte bir yorum yayında kalır) ya da hidden (gerçek bir yorum ortadan kaybolur).

  1. Her filtrenin kesinlik ve duyarlılık değerini 3 ondalık basamakla yazdır.
  2. Aşağıda gösterildiği gibi, bu hatalardan daha azını yapan filtreyi yazdır (missed için: Fewer fakes missed: ...).

Başka bir mağaza ve hidden için:

Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strict

Kendin dene

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score

# Hangi hata daha çok zarar verir: missed (sahte bir yorum yayında kalır) mı, yoksa hidden (gerçek bir yorum gizlenir) mı?
worse = input()

# Her yorum için bir satır: fake içindeki 1, yorumun sipariş üzerine yazıldığı anlamına gelir
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]

# Aynı modelden iki filtre: strict, sahte olma olasılığı 0.7 olduğunda bir yorumu gizler; eager ise 0.3 olduğunda gizler
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimli Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi