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 estimatorn.
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.
Här är den ursprungliga dataseten innan någon transformation. Dessa rådata utgör startpunkten för transformationsprocessen. Ingen kodning eller förbehandling har ännu tillämpats—varje rad visar en instans med dess färgegenskap som en sträng. Detta är data som kommer att transformeras med förbehandlingssteg i pipelinen.
Denna tabell visar datasettet innan one-hot-kodning. Kolumnen Color är kategorisk—den innehåller strängvärden istället för siffror. Du kommer att omvandla denna kolumn till separata binära kolumner i nästa steg med hjälp av one-hot-kodning, vilket är nödvändigt för att de flesta maskininlärningsmodeller ska kunna bearbeta kategoriska data korrekt.
Så här ser träningsdata ut efter one-hot-kodning:
Tabellen nedan visar datasettet efter att one-hot-kodning har tillämpats. Den ursprungliga kolumnen Color har ersatts av separata binära kolumner—Color_Red, Color_Blue och Color_Green. Varje kolumn indikerar om instansen har den specifika färgen (1) eller inte (0).
Observera hur den ursprungliga enkla kolumnen Color har ersatts av tre separata kolumner: Color_Red, Color_Blue och Color_Green. Varje kolumn visar om en specifik färg finns för den instansen, där 1 betyder ja och 0 betyder nej. Denna omvandling kallas one-hot encoding.
Denna förändring är avgörande för maskininlärningsmodeller eftersom de flesta algoritmer inte kan arbeta direkt med text eller kategoriska data. Genom att omvandla kategorier till separata binära kolumner får modellen tydliga, numeriska egenskaper att använda för att lära sig mönster och göra förutsägelser. Detta tillvägagångssätt förhindrar också att modellen antar någon ordningsrelation mellan de ursprungliga kategorierna, vilket annars kan leda till felaktiga slutsatser.
Här är de nya instanserna att förutsäga:
Här är de nya data du vill förutsäga på. Detta är rådata—'före'-tillståndet—precis som det ser ut innan någon transformation eller förbehandling. Pipelinjen kommer att transformera dessa data så att de matchar formatet som användes under träningen innan förutsägelser görs.
Nästa steg är att transformera dessa nya instanser med den tidigare anpassade kodaren. Detta garanterar att de nya data behandlas på samma sätt som träningsdatan, vilket säkerställer konsekvens och tillförlitliga förutsägelser från modellen.
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 den nya datan transformeras inkonsekvent med träningsuppsättningen, vilket gör prediktionerna opålitliga.
Om du använder .fit_transform() på ny data istället för .transform(), kommer kodaren att behandla den nya datan som om den ses för första gången. Detta gör att den:
- Lär sig kategorierna på nytt från den nya datan;
- Ändrar kolumnordningen baserat på den nya uppsättningen kategorier;
- Lägger till en ny kolumn för varje okänd kategori, såsom
'Color_Yellow'i detta fall.
Detta skapar en mismatch mellan träningsdata och prediktionsdata, vilket gör prediktionerna opålitliga och kan orsaka fel i din pipeline.
Observera skillnaden mellan den felaktiga och den korrekta transformationen. Tabellen med den felaktiga transformationen innehåller en ny kolumn (Color_Yellow) och ändrar ordningen på kolumnerna jämfört med träningsdatan. Detta bryter konsistensen mellan träning och prediktion:
- Modellen förväntar sig samma kolumner och ordning som under träningen;
- Nya eller omordnade kolumner förvirrar modellen och gör att felaktiga egenskaper används;
- Prediktionerna blir opålitliga eftersom indata inte längre matchar det modellen lärt sig.
Säkerställ alltid att ny data transformeras med .transform() efter inpassning, så att kolumner och ordning förblir konsekventa. Detta är avgörande för korrekta och tillförlitliga prediktioner.
Att använda .transform() säkerställer däremot att den nya datan kodas exakt som träningsdatan, och ignorerar kategorier som inte sågs under träningen:
När du använder .transform() på ny data inkluderas endast de kolumner som fanns vid träningen i utdata. Alla kategorier som inte sågs under träningen—som 'Yellow'—ignoreras. Detta garanterar att den nya datan matchar den struktur som modellen förväntar sig, utan extra eller saknade kolumner.
Jämförelse av de tre tabellerna:
- Ursprungliga träningsdata (efter one-hot encoding) har kolumner för
Color_Red,Color_BlueochColor_Green; - Felaktigt transformerade nya data (med
.fit_transform()) lägger till en kolumnColor_Yellowoch tar bortColor_Green, vilket ändrar kolumnordningen och strukturen; - Korrekt transformerade nya data (med
.transform()) behåller samma kolumner och ordning som träningsuppsättningen, med nollor för okända kategorier somYellow.
Att använda .transform() är korrekt eftersom det garanterar att nya data behandlas på exakt samma sätt som träningsdata. Detta säkerställer att modellen får data i det förväntade formatet, vilket förhindrar fel och gör förutsägelser tillförlitliga.
Lägga till den slutliga estimatormodellen
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.
12345678910111213141516171819202122232425262728293031323334353637from sklearn.pipeline import make_pipeline from sklearn.compose import ColumnTransformer from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier import pandas as pd # Example data data = pd.DataFrame({ 'color': ['red', 'blue', 'green'], 'value': [1, 2, 3] }) labels = [0, 1, 0] # Define a simple column transformer (placeholder for real preprocessing) ct = ColumnTransformer([ ('imputer', SimpleImputer(strategy='most_frequent'), ['color']) ]) # --- Before: Pipeline with only preprocessing steps --- # This pipeline only transforms the data; it cannot make predictions. pipeline_preprocessing = make_pipeline( ct, StandardScaler() ) # pipeline_preprocessing.fit(data) # Only fits transformers, no estimator at the end # --- After: Pipeline with a final estimator --- # Now the pipeline ends with a model, so it can fit and predict. pipeline_full = make_pipeline( ct, StandardScaler(), KNeighborsClassifier() ) pipeline_full.fit(data, labels) predictions = pipeline_full.predict(data) print("Predictions:", predictions)
Att lägga till den slutliga estimatoren som det sista steget gör din pipeline till ett fullständigt end-to-end-arbetsflöde. Istället för att bara förbereda dina data hanterar pipelinen nu både förbehandling och prediktion i ett och samma objekt. Det innebär att du kan anropa fit() och predict() direkt på pipelinen, och den kommer automatiskt att tillämpa alla förbehandlingssteg innan den gör prediktioner.
Detta tillvägagångssätt är viktigt eftersom:
- Det garanterar att all data behandlas på exakt samma sätt både under träning och prediktion;
- Det minskar risken för fel, såsom att glömma ett förbehandlingssteg vid prediktion på ny data;
- Det gör din kod renare och enklare att underhålla, eftersom hela arbetsflödet hanteras på ett ställe.
Genom att kedja ihop förbehandling och modellering säkerställer du konsekvens, tillförlitlighet och enkelhet i dina maskininlärningsprojekt.
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