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

bookStimatore Finale

Fino a questo punto, la Pipeline è stata utilizzata principalmente per la pre-elaborazione. Tuttavia, la pre-elaborazione rappresenta solo una fase intermedia. Una volta che i dati sono stati trasformati, vengono generalmente passati a un predittore (modello) per produrre risultati o previsioni.

La classe Pipeline supporta questa funzionalità consentendo che l'estimator—spesso un predittore—sia l'ultimo passaggio. L'illustrazione seguente mostra come funziona una Pipeline quando il suo ultimo componente è un predittore.

Note
Nota

Quando viene chiamato il metodo .fit() di una pipeline, ogni trasformatore esegue .fit_transform(). Al contrario, quando viene chiamato .predict(), la pipeline applica .transform() ai dati prima di passarli al predittore.

Il metodo .predict() viene utilizzato principalmente per nuove istanze, che devono subire le stesse trasformazioni dei dati di addestramento durante .fit().

Perché .transform()?

La pipeline applica .transform() invece di .fit_transform() quando gestisce nuove istanze di dati per la previsione. Questo garantisce una trasformazione coerente tra i set di addestramento e di test.

Ad esempio, si consideri un dataset con una caratteristica categorica 'Color' che deve essere codificata prima dell'addestramento del modello:

Ecco come appare il set di dati di addestramento codificato one-hot:

Ecco le nuove istanze da prevedere:

Se .fit_transform() venisse applicato a nuove istanze, il OneHotEncoder potrebbe generare colonne in un ordine diverso o persino introdurne di nuove. Questo porterebbe la trasformazione dei nuovi dati a essere incoerente rispetto al set di addestramento, rendendo le previsioni inaffidabili.

Tuttavia, l'utilizzo di .transform() garantisce che i nuovi dati vengano codificati esattamente come i dati di addestramento, ignorando le categorie non viste durante l'addestramento:

Aggiunta dell'Estimatore Finale

Per utilizzare l'estimatore finale, è sufficiente aggiungerlo come ultimo passaggio della pipeline. Ad esempio, nel prossimo capitolo utilizzeremo un modello KNeighborsClassifier come estimatore finale.

La sintassi è la seguente:

# Creating a pipeline
pipe = make_pipeline(ct, 
                     SimpleImputer(strategy='most_frequent'),
					 StandardScaler(),
                     KNeighborsClassifier()
                    )
# Training a model using pipeline
pipe.fit(X, y)
# Predicting new instances
pipe.predict(X_new)
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Suggested prompts:

Can you explain why using .fit_transform() on new data is problematic?

How does the pipeline handle unseen categories during prediction?

Can you give more examples of using a final estimator in a pipeline?

Awesome!

Completion rate improved to 3.13

bookStimatore Finale

Scorri per mostrare il menu

Fino a questo punto, la Pipeline è stata utilizzata principalmente per la pre-elaborazione. Tuttavia, la pre-elaborazione rappresenta solo una fase intermedia. Una volta che i dati sono stati trasformati, vengono generalmente passati a un predittore (modello) per produrre risultati o previsioni.

La classe Pipeline supporta questa funzionalità consentendo che l'estimator—spesso un predittore—sia l'ultimo passaggio. L'illustrazione seguente mostra come funziona una Pipeline quando il suo ultimo componente è un predittore.

Note
Nota

Quando viene chiamato il metodo .fit() di una pipeline, ogni trasformatore esegue .fit_transform(). Al contrario, quando viene chiamato .predict(), la pipeline applica .transform() ai dati prima di passarli al predittore.

Il metodo .predict() viene utilizzato principalmente per nuove istanze, che devono subire le stesse trasformazioni dei dati di addestramento durante .fit().

Perché .transform()?

La pipeline applica .transform() invece di .fit_transform() quando gestisce nuove istanze di dati per la previsione. Questo garantisce una trasformazione coerente tra i set di addestramento e di test.

Ad esempio, si consideri un dataset con una caratteristica categorica 'Color' che deve essere codificata prima dell'addestramento del modello:

Ecco come appare il set di dati di addestramento codificato one-hot:

Ecco le nuove istanze da prevedere:

Se .fit_transform() venisse applicato a nuove istanze, il OneHotEncoder potrebbe generare colonne in un ordine diverso o persino introdurne di nuove. Questo porterebbe la trasformazione dei nuovi dati a essere incoerente rispetto al set di addestramento, rendendo le previsioni inaffidabili.

Tuttavia, l'utilizzo di .transform() garantisce che i nuovi dati vengano codificati esattamente come i dati di addestramento, ignorando le categorie non viste durante l'addestramento:

Aggiunta dell'Estimatore Finale

Per utilizzare l'estimatore finale, è sufficiente aggiungerlo come ultimo passaggio della pipeline. Ad esempio, nel prossimo capitolo utilizzeremo un modello KNeighborsClassifier come estimatore finale.

La sintassi è la seguente:

# Creating a pipeline
pipe = make_pipeline(ct, 
                     SimpleImputer(strategy='most_frequent'),
					 StandardScaler(),
                     KNeighborsClassifier()
                    )
# Training a model using pipeline
pipe.fit(X, y)
# Predicting new instances
pipe.predict(X_new)
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 5
some-alt