La puntuación F1
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 23 de 58.
Un modelo puede maximizar la precisión o la exhaustividad sacrificando la otra. La puntuación F1 combina ambas y se mantiene baja a menos que las dos sean altas:
Con P para la precisión y R para la exhaustividad, F1 es 2 * P * R / (P + R). Para un 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)) # uno por clase, ordenados
print(classification_report(y_test, pred))Esto 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 8El informe puntúa cada clase; support cuenta sus filas de prueba. Su fila más débil te indica qué corregir primero.
Desafío
IntermedioLa cámara de una planta de reciclaje clasifica los artículos en contenedores de vidrio, metal, papel y plástico. El programa lee k y el código inicial entrena la cámara con k-NN, rellena pred y enumera los bins.
- Imprime el informe de clasificación.
- Encuentra el contenedor con el F1 más bajo e imprímelo y, después, su valor más bajo, precisión o recall, como se muestra a continuación (3 decimales).
Después del informe, para otra planta:
Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571Pruébalo tú mismo
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())
# Una fila por cada objeto en la cinta transportadora y el contenedor al que pertenece
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)
# El modelo de la cámara
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# Los contenedores, en el orden en que aparecen las puntuaciones de cada clase
bins = model.classes_
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online