Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Il Difetto di GridSearchCV | Modellazione
Introduzione al ML con Scikit-Learn

bookIl Difetto di GridSearchCV

Prima di discutere di GridSearchCV, è importante notare che il KNeighborsClassifier presenta più di un iperparametro da regolare. Finora, abbiamo utilizzato solo n_neighbors.

Analizziamo brevemente altri due iperparametri: weights e p.

weights

Come probabilmente ricorderai, il KNeighborsClassifier funziona trovando i k vicini più prossimi. Successivamente assegna la classe più frequente tra questi vicini, indipendentemente da quanto siano vicini tra loro.

Un altro approccio consiste nel considerare anche la distanza da ciascun vicino, in modo che le classi dei vicini più prossimi abbiano un peso maggiore. Questo si ottiene impostando weights='distance'.

Per impostazione predefinita viene utilizzato il primo approccio, che si imposta con weights='uniform'.

p

Esistono anche diversi modi per calcolare la distanza. L'iperparametro p lo controlla. Vediamo come viene calcolata la distanza per p=1 e p=2:

  • p=1 corrisponde alla distanza Manhattan;
  • p=2 corrisponde alla distanza Euclidea che hai studiato a scuola.

Un parametro p può assumere qualsiasi intero positivo. Esistono molte distanze diverse, ma sono più difficili da visualizzare rispetto a p=1 o p=2.

Nel capitolo precedente, abbiamo utilizzato GridSeachCV per trovare il valore migliore di n_neighbors.
E se volessimo trovare la combinazione migliore di n_neighbors, weights e p? Bene, il param_grid sarebbe così:

param_grid = {'n_neighbors': [1, 3, 5, 7],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2]}

GridSearchCV prova tutte le possibili combinazioni per trovare la migliore, quindi proverà tutte queste:

È già un lavoro considerevole. Ma cosa succede se vogliamo provare più valori?

param_grid = {'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2, 3, 4, 5]}

Ora ci sono 100 combinazioni. E ricorda che dobbiamo addestrare e valutare un modello 5 volte per ottenere il suo punteggio di cross-validation, quindi questo processo viene eseguito 500 volte.

Non è un problema per il nostro piccolo dataset, ma solitamente i dataset sono molto più grandi e l'addestramento può richiedere molto tempo. Eseguire questo processo 500 volte è estremamente lento in questi casi. Per questo motivo, RandomizedSearchCV viene utilizzato più spesso con dataset di grandi dimensioni.

question mark

Il principale problema di GridSearchCV è che prova tutte le possibili combinazioni (di ciò che è specificato in param_grid), il che può richiedere molto tempo. Questa affermazione è corretta?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 7

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

bookIl Difetto di GridSearchCV

Scorri per mostrare il menu

Prima di discutere di GridSearchCV, è importante notare che il KNeighborsClassifier presenta più di un iperparametro da regolare. Finora, abbiamo utilizzato solo n_neighbors.

Analizziamo brevemente altri due iperparametri: weights e p.

weights

Come probabilmente ricorderai, il KNeighborsClassifier funziona trovando i k vicini più prossimi. Successivamente assegna la classe più frequente tra questi vicini, indipendentemente da quanto siano vicini tra loro.

Un altro approccio consiste nel considerare anche la distanza da ciascun vicino, in modo che le classi dei vicini più prossimi abbiano un peso maggiore. Questo si ottiene impostando weights='distance'.

Per impostazione predefinita viene utilizzato il primo approccio, che si imposta con weights='uniform'.

p

Esistono anche diversi modi per calcolare la distanza. L'iperparametro p lo controlla. Vediamo come viene calcolata la distanza per p=1 e p=2:

  • p=1 corrisponde alla distanza Manhattan;
  • p=2 corrisponde alla distanza Euclidea che hai studiato a scuola.

Un parametro p può assumere qualsiasi intero positivo. Esistono molte distanze diverse, ma sono più difficili da visualizzare rispetto a p=1 o p=2.

Nel capitolo precedente, abbiamo utilizzato GridSeachCV per trovare il valore migliore di n_neighbors.
E se volessimo trovare la combinazione migliore di n_neighbors, weights e p? Bene, il param_grid sarebbe così:

param_grid = {'n_neighbors': [1, 3, 5, 7],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2]}

GridSearchCV prova tutte le possibili combinazioni per trovare la migliore, quindi proverà tutte queste:

È già un lavoro considerevole. Ma cosa succede se vogliamo provare più valori?

param_grid = {'n_neighbors': [1, 3, 5, 7, 9, 12, 15, 17, 20, 25],
                         'weights': ['distance', 'uniform'],
                         'p': [1, 2, 3, 4, 5]}

Ora ci sono 100 combinazioni. E ricorda che dobbiamo addestrare e valutare un modello 5 volte per ottenere il suo punteggio di cross-validation, quindi questo processo viene eseguito 500 volte.

Non è un problema per il nostro piccolo dataset, ma solitamente i dataset sono molto più grandi e l'addestramento può richiedere molto tempo. Eseguire questo processo 500 volte è estremamente lento in questi casi. Per questo motivo, RandomizedSearchCV viene utilizzato più spesso con dataset di grandi dimensioni.

question mark

Il principale problema di GridSearchCV è che prova tutte le possibili combinazioni (di ciò che è specificato in param_grid), il che può richiedere molto tempo. Questa affermazione è corretta?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 7
some-alt