Validazione Incrociata
Nel capitolo precedente, la suddivisione train-test è stata utilizzata per la valutazione del modello. Questo metodo presenta due principali svantaggi:
- Dati di addestramento limitati: solo una parte del dataset viene utilizzata per l'addestramento, mentre una maggiore quantità di dati generalmente migliora le prestazioni.
- 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
.
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()
.
1234567891011import 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())
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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.13
Validazione 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:
- Dati di addestramento limitati: solo una parte del dataset viene utilizzata per l'addestramento, mentre una maggiore quantità di dati generalmente migliora le prestazioni.
- 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
.
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()
.
1234567891011import 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())
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.
Grazie per i tuoi commenti!