Stimatore 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.
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)
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
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
Stimatore 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.
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)
Grazie per i tuoi commenti!