Curvas ROC
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 25 de 58.
Cada limiar produz sua própria revocação e seus próprios falsos alarmes. A curva ROC mostra todos eles de uma só vez:
Na horizontal: a taxa de falsos positivos, a proporção de pacientes saudáveis sinalizados. Na vertical: a revocação. Limiares mais baixos avançam em direção a (1, 1).
from sklearn.metrics import roc_curve, roc_auc_score
proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, proba) # tpr é a revocação
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")Isso imprime 0.914, a AUC: a área sob a curva. 1 é perfeito, 0.5 é como jogar uma moeda. Uma curva mais alta detecta mais casos para a mesma quantidade de falsos alarmes.
Desafio
MédioUma fazenda de cerejas acende fogueiras para evitar geadas nas noites em que pode congelar. O código inicial treina dois modelos de geada, logistic e knn, e configura o gráfico.
- Escreva
draw_roc(model, name): ela desenha a curva ROC do modelo emax, identificada porname, e imprime sua AUC, como abaixo. - Chame-a para ambos os modelos, adicione uma diagonal tracejada identificada por
coin tosse uma legenda e, em seguida, exiba o gráfico.
Para os modelos de deslizamento de terra:
logistic AUC: 0.869
k-NN AUC: 0.924Então, o Coddy descreve seu gráfico. O gráfico dele é assim:
Experimente você mesmo
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score
# Uma linha para cada noite de primavera em uma fazenda de cerejas: 1 em frost significa que houve geada antes do amanhecer
nights = pd.read_csv("frost.csv")
features = ["temp_6pm_c", "humidity_pct", "wind_kmh", "cloud_pct"]
X_train, X_test, y_train, y_test = train_test_split(
nights[features], nights["frost"], test_size=0.25, random_state=0, stratify=nights["frost"])
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Dois modelos de previsão de geada
logistic = LogisticRegression(max_iter=1000)
logistic.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
fig, ax = plt.subplots()
ax.set_title("Frost Warnings")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")
# Escreva seu código abaixo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Aprendizado supervisionado
1Seu primeiro modelo
Aprendendo com exemplosConjuntos de treino e testeAjustar e preverAvaliar um modeloRecapitulação: classificador de sementes4Regressão logística
Previsões de sim ou nãoO limiar de decisãoPesos como evidênciasVárias classesRevisão: filtro de spam2Vizinhos Mais Próximos
Como o k-NN DecideEscolhendo kLimites de DecisãoEscalonamento para VizinhosRevisão: Vizinhos do Vinho5Avaliando Classificadores
A Matriz de ConfusãoPrecisão e RevocaçãoA Pontuação F1Classes DesbalanceadasCurvas ROCRecapitulação: Teste de Triagem8Validação Cruzada
Validação K-FoldComparando Modelos de Forma JustaBusca em GradeRevisão: Consertos de Skate11Projeto: Espécies de Pinguins
Conheça os PinguinsPrepare os DadosEscolha um ModeloAjuste o VencedorColoque o Modelo em Produção3Regressão Linear
Prevendo númerosVárias característicasMedindo errosGráficos de resíduosRevisão: aluguel de bicicletas6Árvores de Decisão
Árvores fazem perguntasLendo uma árvoreProfundidade da árvoreImportância das característicasRevisão: decisões de empréstimoPratique por conta própria: Compilador de Python online