Lopullinen estimaattori
Pyyhkäise näyttääksesi valikon
Pipeline-luokkaa käytettiin aiemmin esikäsittelyyn, mutta sen varsinainen tarkoitus on ketjuttaa esikäsittely ja lopullinen ennustaja. Putken viimeinen vaihe voi olla mikä tahansa estimaattori (yleensä malli), joka tuottaa ennusteita.
Kun kutsutaan .fit(), jokainen muunnin suorittaa .fit_transform().
Kun kutsutaan .predict(), pipeline käyttää .transform() ennen kuin se välittää datan lopulliselle estimaattorille.
Tämä on välttämätöntä, koska uusi data täytyy muuntaa täsmälleen samalla tavalla kuin koulutusdata.
Miksi .transform()?
Uuden datan käsittely .fit_transform()-metodilla voi muuttaa koodauksia (esim. OneHotEncoder), mikä johtaa sarakkeiden epäyhtenäisyyteen ja epäluotettaviin ennusteisiin.
.transform() takaa yhtenäisen esikäsittelyn, ohittaa tuntemattomat kategoriat ja säilyttää saman sarakejärjestyksen.
Tässä on alkuperäinen aineisto ennen mitään muunnoksia. Tämä raaka data toimii lähtökohtana muunnosprosessille. Koodausta tai esikäsittelyä ei ole vielä tehty—jokainen rivi näyttää yksittäisen havainnon, jonka väriominaisuus on merkkijonona. Tämä data muunnetaan esikäsittelyvaiheiden avulla putkistossa.
Tämä taulukko näyttää tietoaineiston ennen one-hot-koodausta. Color-sarake on kategorinen—se sisältää merkkijonoarvoja numeroiden sijaan. Muunnat tämän sarakkeen erillisiksi binäärisarakkeiksi seuraavassa vaiheessa käyttämällä one-hot-koodausta, mikä on olennaista useimmille koneoppimismalleille kategorisen datan oikeaan käsittelyyn.
Tältä näyttää one-hot-koodattu opetusdata:
Alla oleva taulukko näyttää tietoaineiston one-hot-koodauksen jälkeen. Alkuperäinen Color-sarake on korvattu erillisillä binäärisarakkeilla—Color_Red, Color_Blue ja Color_Green. Jokainen sarake ilmaisee, onko havainto kyseistä väriä (1) vai ei (0).
Huomaa, että alkuperäinen yksittäinen Color-sarake on korvattu kolmella erillisellä sarakkeella: Color_Red, Color_Blue ja Color_Green. Kukin sarake ilmaisee, esiintyykö tietty väri kyseisessä havainnossa, käyttäen 1 kyllä-vastaukselle ja 0 ei-vastaukselle. Tätä muunnosta kutsutaan one-hot-koodaukseksi.
Tämä muutos on olennainen koneoppimismalleille, koska useimmat algoritmit eivät pysty käsittelemään suoraan tekstiä tai kategorista dataa. Muuntamalla kategoriat erillisiksi binäärisarakkeiksi tarjoat mallille selkeitä, numeerisia piirteitä, joiden avulla se voi oppia säännönmukaisuuksia ja tehdä ennusteita. Tämä lähestymistapa estää myös mallia päättelemästä virheellisesti järjestyssuhteita alkuperäisten kategorioiden välillä, mikä voisi johtaa vääriin johtopäätöksiin.
Tässä ovat uudet havainnot, joille tehdään ennuste:
Tässä on uusi data, jolle haluat tehdä ennusteita. Tämä on raaka syöte—'ennen'-tila—juuri sellaisena kuin se on ennen mitään muunnoksia tai esikäsittelyä. Putki muuntaa tämän datan vastaamaan koulutuksessa käytettyä muotoa ennen ennusteen tekemistä.
Seuraava vaihe on muuntaa nämä uudet havainnot aiemmin sovitetulla kooderilla. Tämä varmistaa, että uusi data käsitellään samalla tavalla kuin koulutusdata, mikä takaa johdonmukaisuuden ja luotettavat ennusteet mallilta.
Jos .fit_transform() sovelletaan uusiin havaintoihin, OneHotEncoder voi luoda sarakkeet eri järjestyksessä tai jopa lisätä uusia sarakkeita. Tämä johtaa siihen, että uusi data muunnetaan eri tavalla kuin koulutusdata, mikä tekee ennusteista epäluotettavia.
Jos käytät .fit_transform()-metodia uudelle datalle .transform()-metodin sijaan, enkooderi käsittelee uuden datan kuin se näkisi sen ensimmäistä kertaa. Tämä aiheuttaa seuraavat asiat:
- Kategoriat opitaan uudelleen uuden datan perusteella;
- Sarakkeiden järjestys muuttuu uusien kategorioiden mukaan;
- Lisätään uusi sarake jokaiselle uudelle kategorialle, kuten tässä tapauksessa
'Color_Yellow'.
Tämä aiheuttaa ristiriidan koulutus- ja ennustedatan välillä, mikä tekee ennusteista epäluotettavia ja voi aiheuttaa virheitä putkessasi.
Huomaa ero virheellisen ja oikean muunnoksen välillä. Taulukossa, jossa on virheellinen muunnos, on uusi sarake (Color_Yellow) ja sarakkeiden järjestys poikkeaa koulutusdatan järjestyksestä. Tämä rikkoo johdonmukaisuuden koulutuksen ja ennustamisen välillä:
- Malli odottaa samoja sarakkeita ja samaa järjestystä kuin koulutuksessa;
- Uudet tai uudelleen järjestetyt sarakkeet sekoittavat mallia, jolloin se käyttää vääriä piirteitä;
- Ennusteista tulee epäluotettavia, koska syötteen rakenne ei enää vastaa mallin oppimaa.
Varmista aina, että uusi data muunnetaan .transform()-metodilla sovittamisen jälkeen, jotta sarakkeet ja niiden järjestys pysyvät samoina. Tämä on olennaista tarkkojen ja luotettavien ennusteiden kannalta.
Käyttämällä .transform()-metodia varmistetaan, että uusi data koodataan täsmälleen samalla tavalla kuin koulutusdata, eikä koulutuksessa näkemättömiä kategorioita huomioida:
Kun käytät .transform()-metodia uudelle datalle, vain koulutuksessa mukana olleet sarakkeet sisältyvät tulokseen. Kaikki koulutuksessa näkemättömät kategoriat—kuten 'Yellow'—jätetään huomiotta. Tämä takaa, että uusi data vastaa mallin odottamaa rakennetta, ilman ylimääräisiä tai puuttuvia sarakkeita.
Kolmen taulukon vertailu:
- Alkuperäisessä koulutusdatassa (one-hot-koodauksen jälkeen) on sarakkeet
Color_Red,Color_BluejaColor_Green; - Väärin muunnetussa uudessa datassa (käyttäen
.fit_transform()) lisätään sarakeColor_Yellowja poistetaanColor_Green, mikä muuttaa sarakkeiden järjestystä ja rakennetta; - Oikein muunnetussa uudessa datassa (käyttäen
.transform()) säilytetään samat sarakkeet ja järjestys kuin koulutusdatassa, ja tuntemattomille kategorioille kutenYellowannetaan nollat.
.transform()-metodin käyttö on oikea tapa, koska se varmistaa, että uusi data käsitellään täsmälleen samalla tavalla kuin koulutusdata. Tämä takaa, että malli saa datan odotetussa muodossa, mikä ehkäisee virheitä ja tekee ennusteista luotettavia.
Lopullisen estimaattorin lisääminen
Lisää malli yksinkertaisesti putken viimeiseksi vaiheeksi:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Tämä mahdollistaa koko työnkulun—esikäsittely + ennustus—suorittamisen yhdellä komennolla.
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)
Lopullisen estimaattorin lisääminen viimeiseksi vaiheeksi tekee putkestasi täydellisen päästä päähän -työnkulun. Sen sijaan, että pipeline vain valmistelisi dataa, se hoitaa nyt sekä esikäsittelyn että ennustamisen yhdessä objektissa. Voit siis kutsua fit()- ja predict()-metodeja suoraan pipelineen, jolloin kaikki esikäsittelyvaiheet suoritetaan automaattisesti ennen ennustamista.
Tämä lähestymistapa on tärkeä, koska:
- Se takaa, että kaikki data käsitellään täsmälleen samalla tavalla sekä koulutuksen että ennustamisen aikana;
- Se vähentää virheiden riskiä, kuten esikäsittelyvaiheen unohtamista uutta dataa ennustettaessa;
- Se tekee koodistasi selkeämpää ja helpommin ylläpidettävää, koska koko työnkulku hallitaan yhdessä paikassa.
Ketjuttamalla esikäsittelyn ja mallinnuksen varmistat johdonmukaisuuden, luotettavuuden ja yksinkertaisuuden koneoppimisprojekteissasi.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme