Menu
CoddyTech

Validazione K-fold

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 37 di 58.

Questo capitolo rende affidabili i tuoi punteggi. Alla fine, saprai ottimizzare un modello con grafici come questo:

Barre dell'accuratezza media su 5 fold per k da 1 a 41. Le barre salgono da 0.85 con k = 1 fino al valore migliore evidenziato di 0.91 con k = 15, poi scendono

Una singola suddivisione di test può essere fortunata. La convalida incrociata K-fold divide le righe in fold, in questo caso 5, e testa a turno su ciascun fold, addestrando sui restanti:

Cinque righe di cinque celle. In ogni suddivisione una cella, diversa ogni volta, è il fold di test; le altre quattro servono per l'addestramento. Punteggi dell'albero Iris accanto: 0.967, 0.967, 0.900, 0.967, 1.000

Una chiamata li esegue tutti e cinque, qui per un albero sui fiori di 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}")

Questo stampa:

[0.967 0.967 0.9   0.967 1.   ]
0.960 0.033

Riporta la media come punteggio e la deviazione standard come misura di quanto oscilla.

challenge icon

Sfida

Medio

Un birrificio di kombucha prevede quali lotti sono deteriorati basandosi su 5 letture di laboratorio. Quanto è stabile il suo modello? Il programma legge il numero di fold; il codice iniziale genera i dati e il modello.

  1. Convalida incrociata il modello con quel numero di fold.
  2. Stampa l'accuratezza di ogni fold, poi la media e la deviazione standard, tutto con 3 decimali.
  3. Stampa il numero del fold più debole, contando da 1.

Per altri lotti e 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

Provalo tu

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())

# Non modificare le righe seguenti: 240 lotti di kombucha, 5 misurazioni di laboratorio ciascuno; l'etichetta 1 indica che il lotto è avariato
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)

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online