Menu
CoddyTech

Validación K-Fold

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 37 de 58.

Este capítulo hace que tus puntuaciones sean fiables. Al terminarlo, ajustarás un modelo con gráficos como este:

Barras de la precisión media en 5 particiones para valores de k de 1 a 41. Las barras suben de 0.85 con k = 1 hasta un máximo resaltado de 0.91 con k = 15, y después bajan

Una sola división de prueba puede tener suerte. La validación cruzada K-fold divide las filas en pliegues, aquí 5, y prueba en cada pliegue por turnos, entrenando con el resto:

Cinco filas de cinco celdas. En cada división, una celda distinta cada vez es el pliegue de prueba; las otras cuatro se usan para entrenar. Puntuaciones del árbol de Iris junto a ellas: 0.967, 0.967, 0.900, 0.967, 1.000

Una llamada ejecuta las cinco, aquí para un árbol con las flores de iris:

from sklearn.model_selection import cross_val_score

tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=5)
print(np.round(scores, 3))
print(f"{scores.mean():.3f} {scores.std():.3f}")

Esto imprime:

[0.967 0.967 0.9   0.967 1.   ]
0.960 0.033

Informa la media como puntuación y la desviación estándar como cuánto varía.

challenge icon

Desafío

Intermedio

Una fábrica de kombucha predice qué lotes se han echado a perder a partir de 5 lecturas de laboratorio. ¿Qué tan estable es su modelo? El programa lee el número de particiones; el código inicial genera los datos y el modelo.

  1. Valida el modelo de forma cruzada con ese número de particiones.
  2. Imprime la precisión de cada partición, después la media y la desviación estándar, todo con 3 decimales.
  3. Imprime el número de la partición más débil, contando desde 1.

Para otros lotes y 4:

Fold 1: 0.917
Fold 2: 0.933
Fold 3: 0.883
Fold 4: 0.917
Mean 0.912, std 0.018
Weakest fold: 3

Pruébalo tú mismo

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

n_folds = int(input())

# No cambies las líneas siguientes: 240 lotes de kombucha, con 5 mediciones de laboratorio cada uno; la etiqueta 1 indica que está estropeado
X, y = make_classification(n_samples=240, n_features=5, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.9, random_state=2)
model = LogisticRegression(max_iter=1000)

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online