Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Validazione Incrociata | Modellizzazione
Introduzione al ML con Scikit-Learn

bookValidazione Incrociata

Nel capitolo precedente, la suddivisione train-test è stata utilizzata per la valutazione del modello. Questo metodo presenta due principali svantaggi:

  1. Dati di addestramento limitati: solo una parte del dataset viene utilizzata per l'addestramento, mentre una maggiore quantità di dati generalmente migliora le prestazioni.
  2. Dipendenza dalla suddivisione: poiché la suddivisione è casuale, i risultati possono variare sensibilmente tra le esecuzioni.

Per affrontare questi problemi, viene utilizzato un metodo di valutazione alternativo chiamato cross-validation.

Per prima cosa, suddividere l'intero dataset in 5 parti uguali, chiamate fold.

Successivamente, utilizzare un fold come test set e combinare i fold rimanenti per formare il training set.

Come in qualsiasi processo di valutazione, il set di addestramento viene utilizzato per addestrare il modello, mentre il set di test viene utilizzato per misurarne le prestazioni.

Il processo viene ripetuto in modo che ciascun fold serva una volta come set di test, mentre i fold rimanenti costituiscono il set di addestramento.

Questo processo produce cinque punteggi di accuratezza, uno per ciascuna suddivisione. Calcolando la media di questi punteggi si ottiene la prestazione media del modello.

In Python, il punteggio di cross-validation può essere calcolato con cross_val_score() dal modulo sklearn.model_selection.

Note
Nota

Sebbene l'esempio utilizzi 5 fold, è possibile scegliere qualsiasi numero di fold per la cross-validation. Ad esempio, si possono usare 10 fold, assegnandone 9 al training set e 1 al test set. Questo parametro è regolabile tramite il parametro cv nella funzione cross_val_score().

1234567891011
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
copy

Fornisce risultati più stabili e affidabili rispetto al metodo train-test split; tuttavia, è significativamente più lento perché richiede l'addestramento e la valutazione del modello cinque volte (o n volte se si imposta n come numero di fold), rispetto a una sola volta con il train-test split.

La cross-validation viene tipicamente utilizzata nella ottimizzazione degli iperparametri, dove l'intero processo di cross-validation viene eseguito per ciascun valore potenziale dell'iperparametro.

Ad esempio, per determinare il numero ottimale di vicini in un algoritmo k-nearest neighbors, si esegue un ciclo completo di cross-validation per ogni valore candidato. Questo metodo garantisce una valutazione approfondita di ciascuna impostazione dell'iperparametro su tutto il dataset, consentendo di selezionare il valore che fornisce costantemente le migliori prestazioni.

question mark

Perché la cross-validation può essere preferita rispetto alla suddivisione train-test per valutare le prestazioni di un modello di machine learning?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 3.13

bookValidazione Incrociata

Scorri per mostrare il menu

Nel capitolo precedente, la suddivisione train-test è stata utilizzata per la valutazione del modello. Questo metodo presenta due principali svantaggi:

  1. Dati di addestramento limitati: solo una parte del dataset viene utilizzata per l'addestramento, mentre una maggiore quantità di dati generalmente migliora le prestazioni.
  2. Dipendenza dalla suddivisione: poiché la suddivisione è casuale, i risultati possono variare sensibilmente tra le esecuzioni.

Per affrontare questi problemi, viene utilizzato un metodo di valutazione alternativo chiamato cross-validation.

Per prima cosa, suddividere l'intero dataset in 5 parti uguali, chiamate fold.

Successivamente, utilizzare un fold come test set e combinare i fold rimanenti per formare il training set.

Come in qualsiasi processo di valutazione, il set di addestramento viene utilizzato per addestrare il modello, mentre il set di test viene utilizzato per misurarne le prestazioni.

Il processo viene ripetuto in modo che ciascun fold serva una volta come set di test, mentre i fold rimanenti costituiscono il set di addestramento.

Questo processo produce cinque punteggi di accuratezza, uno per ciascuna suddivisione. Calcolando la media di questi punteggi si ottiene la prestazione media del modello.

In Python, il punteggio di cross-validation può essere calcolato con cross_val_score() dal modulo sklearn.model_selection.

Note
Nota

Sebbene l'esempio utilizzi 5 fold, è possibile scegliere qualsiasi numero di fold per la cross-validation. Ad esempio, si possono usare 10 fold, assegnandone 9 al training set e 1 al test set. Questo parametro è regolabile tramite il parametro cv nella funzione cross_val_score().

1234567891011
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
copy

Fornisce risultati più stabili e affidabili rispetto al metodo train-test split; tuttavia, è significativamente più lento perché richiede l'addestramento e la valutazione del modello cinque volte (o n volte se si imposta n come numero di fold), rispetto a una sola volta con il train-test split.

La cross-validation viene tipicamente utilizzata nella ottimizzazione degli iperparametri, dove l'intero processo di cross-validation viene eseguito per ciascun valore potenziale dell'iperparametro.

Ad esempio, per determinare il numero ottimale di vicini in un algoritmo k-nearest neighbors, si esegue un ciclo completo di cross-validation per ogni valore candidato. Questo metodo garantisce una valutazione approfondita di ciascuna impostazione dell'iperparametro su tutto il dataset, consentendo di selezionare il valore che fornisce costantemente le migliori prestazioni.

question mark

Perché la cross-validation può essere preferita rispetto alla suddivisione train-test per valutare le prestazioni di un modello di machine learning?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 4
some-alt