Slutlig Estimator
Pipeline användes tidigare för förbehandling, men dess verkliga syfte är att kedja förbehandling med en slutlig prediktor. Det sista steget i en pipeline kan vara vilken estimator som helst (vanligtvis en modell) som genererar prediktioner.
Vid anrop av .fit() kör varje transformer .fit_transform().
Vid anrop av .predict() använder pipelinen .transform() innan data skickas till den slutliga estimatern.
Detta krävs eftersom ny data måste transformeras exakt som träningsdatan.
Varför .transform()?
Att använda .fit_transform() på ny data kan ändra kodningar (t.ex. i OneHotEncoder), vilket skapar omatchade kolumner och opålitliga prediktioner.
.transform() garanterar konsekvent förbehandling, ignorerar okända kategorier och behåller samma kolumnordning.
Så här ser ett one-hot-kodat träningsdata ut:
Här är de nya instanserna att förutsäga:
Om .fit_transform() skulle tillämpas på nya instanser kan OneHotEncoder generera kolumner i en annan ordning eller till och med introducera nya. Detta skulle göra att de nya data transformeras inkonsekvent med träningsuppsättningen, vilket gör förutsägelser opålitliga.
Att använda .transform() säkerställer dock att den nya datan kodas exakt som träningsdatan, och ignorerar kategorier som inte sågs under träningen:
Lägga till den slutliga estimatoren
Lägg helt enkelt till modellen som det sista steget i pipelinen:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Detta gör att hela arbetsflödet—förbehandling + prediktion—kan köras med ett enda anrop.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you explain why using `.fit_transform()` on new data is problematic?
How does `.transform()` handle unseen categories in new data?
Can you show an example of a pipeline with a different final estimator?
Awesome!
Completion rate improved to 3.13
Slutlig Estimator
Svep för att visa menyn
Pipeline användes tidigare för förbehandling, men dess verkliga syfte är att kedja förbehandling med en slutlig prediktor. Det sista steget i en pipeline kan vara vilken estimator som helst (vanligtvis en modell) som genererar prediktioner.
Vid anrop av .fit() kör varje transformer .fit_transform().
Vid anrop av .predict() använder pipelinen .transform() innan data skickas till den slutliga estimatern.
Detta krävs eftersom ny data måste transformeras exakt som träningsdatan.
Varför .transform()?
Att använda .fit_transform() på ny data kan ändra kodningar (t.ex. i OneHotEncoder), vilket skapar omatchade kolumner och opålitliga prediktioner.
.transform() garanterar konsekvent förbehandling, ignorerar okända kategorier och behåller samma kolumnordning.
Så här ser ett one-hot-kodat träningsdata ut:
Här är de nya instanserna att förutsäga:
Om .fit_transform() skulle tillämpas på nya instanser kan OneHotEncoder generera kolumner i en annan ordning eller till och med introducera nya. Detta skulle göra att de nya data transformeras inkonsekvent med träningsuppsättningen, vilket gör förutsägelser opålitliga.
Att använda .transform() säkerställer dock att den nya datan kodas exakt som träningsdatan, och ignorerar kategorier som inte sågs under träningen:
Lägga till den slutliga estimatoren
Lägg helt enkelt till modellen som det sista steget i pipelinen:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Detta gör att hela arbetsflödet—förbehandling + prediktion—kan köras med ett enda anrop.
Tack för dina kommentarer!