Sluttestimator
Sveip for å vise menyen
Pipeline ble tidligere brukt til forbehandling, men dens egentlige formål er å kjede sammen forbehandling med en sluttprediktor. Det siste steget i en pipeline kan være hvilken som helst estimator (vanligvis en modell) som produserer prediksjoner.
Når man kaller .fit(), kjører hver transformer .fit_transform().
Når man kaller .predict(), bruker pipelinen .transform() før data sendes til sluttestimatoren.
Dette er nødvendig fordi nye data må transformeres på nøyaktig samme måte som treningsdataene.
Hvorfor .transform()?
Å bruke .fit_transform() på nye data kan endre kodingene (for eksempel i OneHotEncoder), noe som kan føre til uoverensstemmende kolonner og upålitelige prediksjoner.
.transform() sikrer konsistent forhåndsprosessering, ignorerer ukjente kategorier og beholder samme kolonnerekkefølge.
Her er det originale datasettet før noen transformasjon. Disse rådataene er utgangspunktet for transformasjonsprosessen. Ingen koding eller forhåndsprosessering er ennå utført—hver rad viser en instans med fargeegenskapen som en streng. Dette er dataene som vil bli transformert ved hjelp av forhåndsprosesseringstrinnene i pipelinen.
Denne tabellen viser datasettet før one-hot encoding. Kolonnen Color er kategorisk—den inneholder strengverdier i stedet for tall. Du vil transformere denne kolonnen til separate binære kolonner i neste steg ved å bruke one-hot encoding, noe som er essensielt for at de fleste maskinlæringsmodeller skal kunne behandle kategoriske data korrekt.
Slik ser treningsdataene ut etter one-hot encoding:
Tabellen under viser datasettet etter at one-hot encoding er brukt. Den opprinnelige Color-kolonnen er erstattet med separate binære kolonner—Color_Red, Color_Blue og Color_Green. Hver kolonne indikerer om instansen har den spesifikke fargen (1) eller ikke (0).
Legg merke til hvordan den opprinnelige Color-kolonnen har blitt erstattet av tre separate kolonner: Color_Red, Color_Blue og Color_Green. Hver kolonne viser om en bestemt farge er til stede for den aktuelle instansen, der 1 betyr ja og 0 betyr nei. Denne transformasjonen kalles one-hot encoding.
Denne endringen er avgjørende for maskinlæringsmodeller fordi de fleste algoritmer ikke kan arbeide direkte med tekst eller kategoriske data. Ved å konvertere kategorier til separate binære kolonner, får modellen tydelige, numeriske egenskaper den kan bruke til å lære mønstre og gjøre prediksjoner. Denne tilnærmingen forhindrer også at modellen antar noen ordnet rekkefølge mellom de opprinnelige kategoriene, noe som kunne ført til feilaktige konklusjoner.
Her er de nye instansene som skal predikeres:
Her er de nye dataene du ønsker å forutsi på. Dette er råinput—'før'-tilstanden—slik de ser ut før noen transformasjon eller forhåndsprosessering. Pipelinjen vil transformere disse dataene slik at de samsvarer med formatet som ble brukt under trening før prediksjoner gjøres.
Neste steg er å transformere disse nye instansene ved å bruke den tidligere tilpassede enkoderen. Dette sikrer at de nye dataene behandles på samme måte som treningsdataene, noe som gir konsistens og pålitelige prediksjoner fra modellen.
Hvis .fit_transform() ble brukt på nye forekomster, kunne OneHotEncoder generere kolonner i en annen rekkefølge eller til og med introdusere nye. Dette ville føre til at de nye dataene ble transformert inkonsistent med treningssettet, noe som gjør prediksjonene upålitelige.
Hvis du bruker .fit_transform() på nye data i stedet for .transform(), vil encoder behandle de nye dataene som om de blir sett for første gang. Dette fører til at den:
- Lærer kategoriene på nytt fra de nye dataene;
- Endrer rekkefølgen på kolonnene basert på det nye settet med kategorier;
- Legger til en ny kolonne for enhver ukjent kategori, som
'Color_Yellow'i dette tilfellet.
Dette skaper et misforhold mellom trenings- og prediksjonsdata, noe som gjør prediksjonene upålitelige og kan føre til feil i pipelinen din.
Legg merke til forskjellen mellom feil og korrekt transformasjon. Tabellen med feil transformasjon inkluderer en ny kolonne (Color_Yellow) og endrer rekkefølgen på kolonnene sammenlignet med treningsdataene. Dette bryter konsistensen mellom trening og prediksjon:
- Modellen forventer de samme kolonnene og rekkefølgen som under trening;
- Nye eller omorganiserte kolonner forvirrer modellen, noe som fører til bruk av feil trekk;
- Prediksjonene blir upålitelige fordi inndata-strukturen ikke lenger samsvarer med det modellen har lært.
Sørg alltid for at nye data transformeres med .transform() etter tilpasning, slik at kolonner og rekkefølge forblir konsistente. Dette er avgjørende for nøyaktige og pålitelige prediksjoner.
Ved å bruke .transform() sikres det at nye data kodes nøyaktig som treningsdataene, og kategorier som ikke ble sett under trening ignoreres:
Når du bruker .transform() på nye data, er det kun kolonnene fra treningen som inkluderes i utdataene. Alle kategorier som ikke ble sett under trening—som 'Yellow'—blir ignorert. Dette garanterer at de nye dataene samsvarer med strukturen modellen forventer, uten ekstra eller manglende kolonner.
Sammenligning av de tre tabellene:
- Opprinnelige treningsdata (etter one-hot encoding) har kolonner for
Color_Red,Color_BlueogColor_Green; - Feilaktig transformerte nye data (ved bruk av
.fit_transform()) legger til enColor_Yellow-kolonne og fjernerColor_Green, noe som endrer kolonnerekkefølgen og strukturen; - Korrekt transformerte nye data (ved bruk av
.transform()) beholder de samme kolonnene og rekkefølgen som treningssettet, med nuller for ukjente kategorier somYellow.
Bruk av .transform() er riktig tilnærming fordi det garanterer at nye data behandles på nøyaktig samme måte som treningsdataene. Dette sikrer at modellen mottar data i forventet format, forhindrer feil og gjør prediksjonene pålitelige.
Legge til den endelige estimatoren
Legg ganske enkelt til modellen som det siste steget i pipelinen:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Dette gjør at hele arbeidsflyten—forbehandling + prediksjon—kan kjøres med ett kall.
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)
Ved å legge til den endelige estimatoren som siste steg, blir pipelinen din en fullstendig ende-til-ende-arbeidsflyt. I stedet for kun å forberede dataene, håndterer pipelinen nå både forbehandling og prediksjon i ett og samme objekt. Dette betyr at du kan kalle fit() og predict() direkte på pipelinen, og den vil automatisk utføre alle forbehandlingssteg før den gjør prediksjoner.
Denne tilnærmingen er viktig fordi:
- Den garanterer at all data behandles på nøyaktig samme måte både under trening og prediksjon;
- Den reduserer risikoen for feil, som å glemme et forbehandlingssteg ved prediksjon på nye data;
- Den gjør koden din ryddigere og enklere å vedlikeholde, siden hele arbeidsflyten styres på ett sted.
Ved å kjede sammen forbehandling og modellering sikrer du konsistens, pålitelighet og enkelhet i maskinlæringsprosjektene dine.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår