A Pontuação F1
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 23 de 58.
Um modelo pode maximizar a precisão ou a revocação abrindo mão da outra. A pontuação F1 combina as duas e permanece baixa, a menos que ambas sejam altas:
Com P para precisão e R para revocação, F1 é 2 * P * R / (P + R). Para um modelo meteorológico:
from sklearn.metrics import f1_score, classification_report
y_test = ["sun", "sun", "rain", "rain", "snow", "sun", "rain", "snow"]
pred = ["sun", "rain", "rain", "rain", "snow", "sun", "sun", "rain"]
print(f1_score(y_test, pred, average=None)) # um por classe, em ordem
print(classification_report(y_test, pred))Isso imprime:
[0.57142857 0.66666667 0.66666667]
precision recall f1-score support
rain 0.50 0.67 0.57 3
snow 1.00 0.50 0.67 2
sun 0.67 0.67 0.67 3
accuracy 0.62 8
macro avg 0.72 0.61 0.63 8
weighted avg 0.69 0.62 0.63 8O relatório pontua cada classe; support conta suas linhas de teste. A linha mais fraca indica o que você deve corrigir primeiro.
Desafio
MédioA câmera de uma usina de reciclagem separa os itens em lixeiras de vidro, metal, papel e plástico. O programa lê k, e o código inicial treina o k-NN da câmera, preenche pred e lista as bins.
- Imprima o relatório de classificação.
- Encontre a lixeira com o menor F1 e imprima-a e, em seguida, seu lado mais fraco, precisão ou recall, como abaixo (3 casas decimais).
Após o relatório, para outra usina:
Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571Experimente você mesmo
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, f1_score, precision_score, recall_score
k = int(input())
# Uma linha para cada item na esteira e para a lixeira à qual ele pertence
items = pd.read_csv("recycling.csv")
features = ["weight_g", "shine", "see_through", "bend"]
X_train, X_test, y_train, y_test = train_test_split(items[features], items["material"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# O modelo da câmera
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# As lixeiras, na ordem em que aparecem as pontuações de cada classe
bins = model.classes_
# 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