Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Endelig Estimator | Pipelines
Introduktion til Maskinlæring med Python

Endelig Estimator

Stryg for at vise menuen

Pipeline blev tidligere brugt til forbehandling, men dens egentlige formål er at kæde forbehandling sammen med en endelig prædiktor. Det sidste trin i en pipeline kan være enhver estimator (typisk en model), der genererer forudsigelser.

Note
Bemærk

Ved kald af .fit() kører hver transformer .fit_transform(). Ved kald af .predict() bruger pipelinen .transform() før data sendes til den endelige estimator. Dette er nødvendigt, fordi nye data skal transformeres præcis som træningsdataene.

Hvorfor .transform()?

Brug af .fit_transform() på nye data kan ændre kodninger (f.eks. i OneHotEncoder), hvilket skaber ikke-matchende kolonner og upålidelige forudsigelser. .transform() sikrer konsekvent forbehandling, ignorerer ukendte kategorier og bevarer samme kolonnerækkefølge.

Her er det originale datasæt før nogen transformation. Disse rå data er udgangspunktet for transformationsprocessen. Ingen kodning eller forbehandling er endnu anvendt—hver række viser en instans med dens farve-egenskab som en streng. Dette er de data, der vil blive transformeret ved hjælp af forbehandlingsskridt i pipelinen.

Denne tabel viser datasættet før one-hot encoding. Kolonnen Color er kategorisk—den indeholder strengværdier i stedet for tal. Du vil omdanne denne kolonne til separate binære kolonner i næste trin ved hjælp af one-hot encoding, hvilket er essentielt for at de fleste maskinlæringsmodeller kan behandle kategoriske data korrekt.

Sådan ser one-hot encodede træningsdata ud:

Tabellen nedenfor viser datasættet efter anvendelse af one-hot encoding. Den oprindelige Color-kolonne er blevet erstattet af separate binære kolonner—Color_Red, Color_Blue og Color_Green. Hver kolonne angiver, om instansen har den specifikke farve (1) eller ej (0).

Bemærk, hvordan den oprindelige enkeltstående Color-kolonne er blevet erstattet af tre separate kolonner: Color_Red, Color_Blue og Color_Green. Hver kolonne angiver, om en bestemt farve er til stede for den pågældende instans, hvor 1 betyder ja og 0 betyder nej. Denne transformation kaldes one-hot encoding.

Denne ændring er afgørende for maskinlæringsmodeller, da de fleste algoritmer ikke kan arbejde direkte med tekst eller kategoriske data. Ved at omdanne kategorier til separate binære kolonner får modellen tydelige, numeriske egenskaber, som den kan bruge til at lære mønstre og lave forudsigelser. Denne tilgang forhindrer også modellen i at antage nogen ordnet relation mellem de oprindelige kategorier, hvilket kunne føre til forkerte konklusioner.

Her er de nye instanser, der skal forudsiges:

Her er de nye data, du ønsker at forudsige på. Dette er rå input—'før'-tilstanden—præcis som det ser ud, før nogen transformation eller forbehandling. Pipelinjen vil transformere disse data, så de matcher det format, der blev brugt under træningen, inden der foretages forudsigelser.

Næste skridt er at transformere disse nye instanser ved hjælp af den tidligere tilpassede encoder. Dette sikrer, at de nye data behandles på samme måde som træningsdataene, hvilket giver konsistens og pålidelige forudsigelser fra modellen.

Hvis .fit_transform() blev anvendt på nye forekomster, kunne OneHotEncoder generere kolonner i en anden rækkefølge eller endda introducere nye. Dette ville medføre, at de nye data blev transformeret inkonsistent med træningssættet, hvilket gør forudsigelser upålidelige.

Hvis du bruger .fit_transform() på nye data i stedet for .transform(), vil encoder behandle de nye data, som om de ses for første gang. Dette får den til at:

  • Genlære kategorierne fra de nye data;
  • Ændre rækkefølgen af kolonner baseret på det nye sæt af kategorier;
  • Tilføje en ny kolonne for enhver ukendt kategori, såsom 'Color_Yellow' i dette tilfælde.

Dette skaber en uoverensstemmelse mellem trænings- og forudsigelsesdata, hvilket gør forudsigelser upålidelige og potentielt forårsager fejl i din pipeline.

Bemærk forskellen mellem den forkerte transformation og den korrekte. Tabellen med den forkerte transformation indeholder en ny kolonne (Color_Yellow) og ændrer rækkefølgen af kolonner sammenlignet med træningsdataene. Dette bryder konsistensen mellem træning og forudsigelse:

  • Modellen forventer de samme kolonner og rækkefølge som under træningen;
  • Nye eller omarrangerede kolonner forvirrer modellen og får den til at bruge de forkerte features;
  • Forudsigelser bliver upålidelige, fordi inputstrukturen ikke længere matcher det, modellen har lært.

Sørg altid for, at nye data transformeres med .transform() efter fit, så kolonner og rækkefølge forbliver konsistente. Dette er afgørende for nøjagtige og pålidelige forudsigelser.

Ved at bruge .transform() sikres det dog, at de nye data kodes præcis som træningsdataene, og kategorier, der ikke blev set under træningen, ignoreres:

Når du bruger .transform() på nye data, er det kun kolonnerne fra træningen, der indgår i outputtet. Alle kategorier, der ikke blev set under træningen—som 'Yellow'—ignoreres. Dette garanterer, at de nye data matcher den struktur, modellen forventer, uden ekstra eller manglende kolonner.

Sammenligning af de tre tabeller:

  • De oprindelige træningsdata (efter one-hot encoding) har kolonner for Color_Red, Color_Blue og Color_Green;
  • Forkert transformerede nye data (ved brug af .fit_transform()) tilføjer en Color_Yellow kolonne og fjerner Color_Green, hvilket ændrer kolonneordren og strukturen;
  • Korrekt transformerede nye data (ved brug af .transform()) bevarer de samme kolonner og rækkefølge som træningssættet, med nuller for ukendte kategorier som Yellow.

Brug af .transform() er den korrekte metode, da det garanterer, at nye data behandles på nøjagtig samme måde som træningsdataene. Dette sikrer, at modellen modtager data i det forventede format, hvilket forhindrer fejl og gør forudsigelser pålidelige.

Tilføjelse af den endelige estimator

Tilføj blot modellen som sidste trin i pipelinen:

pipe = make_pipeline(
    ct,
    SimpleImputer(strategy='most_frequent'),
    StandardScaler(),
    KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)

Dette gør det muligt at køre hele arbejdsgangen—præprocessering + forudsigelse—med ét kald.

12345678910111213141516171819202122232425262728293031323334353637
from 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 at tilføje den endelige estimator som det sidste trin bliver din pipeline til et fuldstændigt end-to-end workflow. I stedet for kun at forberede dine data håndterer pipelinen nu både forbehandling og forudsigelse i ét samlet objekt. Det betyder, at du kan kalde fit() og predict() direkte på pipelinen, og den vil automatisk anvende alle forbehandlingsskridt før forudsigelserne.

Denne tilgang er vigtig, fordi:

  • Den sikrer, at alle data behandles på præcis samme måde under både træning og forudsigelse;
  • Den mindsker risikoen for fejl, såsom at glemme et forbehandlingsskridt ved forudsigelse på nye data;
  • Den gør din kode mere overskuelig og lettere at vedligeholde, da hele workflowet styres ét sted.

Ved at kæde forbehandling og modellering sammen opnås konsistens, pålidelighed og enkelhed i dine machine learning-projekter.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 5
some-alt