Precyzja i czułość
Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 22 z 58.
Dwa pytania oceniają odpowiedzi testu na grypę. Ile spośród alarmów dotyczących grypy było prawdziwych? Ile spośród rzeczywistych przypadków grypy test wykrył?
Precyzja odpowiada na pierwsze pytanie: 42 z 45 alarmów. Czułość odpowiada na drugie: 42 z 47 przypadków.
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 zawsze pokazuje 3 miejsca po przecinku, więc 0.9 zostałoby wyświetlone jako 0.900. To wyświetla:
0.933
0.894Wybierz w zależności od tego, która pomyłka jest bardziej kosztowna. Przeoczenie przypadku grypy może doprowadzić do jej rozprzestrzenienia, więc ten test wymaga wysokiej czułości. Filtr antyspamowy, który ukrywa prawdziwe wiadomości, wymaga wysokiej precyzji.
Wyzwanie
ŚredniFiltr sklepu ukrywa recenzje, które wyglądają na fałszywe. Kod początkowy tworzy dwie wersje jednego modelu: strict_pred i eager_pred, a także odczytuje, który błąd jest gorszy: missed (fałszywa recenzja pozostaje widoczna) czy hidden (prawdziwa recenzja znika).
- Wyświetl precyzję i czułość każdego filtra z dokładnością do 3 miejsc po przecinku.
- Wyświetl filtr, który popełnia mniej błędów tego rodzaju, jak poniżej (dla
missed:Fewer fakes missed: ...).
Dla innego sklepu i hidden:
Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strictSpróbuj swoich sił
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
# Która pomyłka jest bardziej szkodliwa: przeoczenie (fałszywa opinia pozostaje widoczna) czy ukrycie (prawdziwa opinia zostaje ukryta)
worse = input()
# Jeden wiersz na opinię: 1 w fake oznacza, że opinia została napisana na zamówienie
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]
# Dwa filtry oparte na tym samym modelu: strict ukrywa opinię przy prawdopodobieństwie 0.7, że jest fałszywa, a eager przy 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3
# Napisz swój kod poniżej
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nadzorowane
1Twój pierwszy model
Uczenie się na przykładachZbiory treningowe i testoweDopasowywanie i przewidywanieOcena modeluPodsumowanie: Sortownik nasion4Regresja logistyczna
Przewidywanie „tak” lub „nie”Próg decyzyjnyWagi jako dowodyWiele klasPodsumowanie: filtr spamu2Najbliżsi sąsiedzi
Jak działa k-NNWybór kGranice decyzyjneSkalowanie dla sąsiadówPodsumowanie: sąsiedzi w zbiorze Wine5Ocena klasyfikatorów
Macierz pomyłekPrecyzja i czułośćWynik F1Niezrównoważone klasyKrzywe ROCPodsumowanie: test przesiewowy8Walidacja krzyżowa
Walidacja k-krotnaUczciwe porównywanie modeliPrzeszukiwanie siatkiPodsumowanie: naprawa deskorolki11Projekt: Gatunki pingwinów
Poznaj pingwinyPrzygotuj daneWybierz modelDopracuj zwycięski modelWdróż modelPoćwicz samodzielnie: Kompilator Python online