Eeltöötlus ei ole asi, mida teed andmetega enne mudelit. Eeltöötlus on osa mudelist. Pipeline on scikit-learni viis seda kirja panna: imputeerija, kodeerija, skaleerija ja mudel ühes objektis, millel on fit ja predict nagu igal mudelil.
Kui teed eeltöötluse käsitsi, pead iga sammu kirjutama vähemalt kaks korda. Üks kord treeningandmetele, kus samm ka õpib midagi (mediaani, kategooriate loendi, keskmise ja hälbe) — see on fit_transform. Teine kord testandmetele, kus ta tohib ainult rakendada juba õpitut — see on transform. Ristvalideerimisel kordub sama veel viis korda.
Kaheksa rida, millest igaühe võib unustada, valesse järjekorda panna või kogemata fit_transform'iks kirjutada. Ristvalideerimisega tuleb sama asi veel kord.
Testandmetel käivad läbi täpselt samad sammud, samas järjekorras, nende parameetritega, mis õpiti treeningandmetelt. Sammu vahele jätta ei saa, sest käsitsi neid keegi ei rakenda.
Kolm tüüpilist unustamist. Kaks esimest annavad veateate kohe, kolmas ei anna midagi.
| Unustatud samm | Mida mudel testandmetelt saab | Tagajärg |
|---|---|---|
taida.transform |
read, kus pindala on endiselt NaN | ValueError: Input X contains NaNMudel arvutab ennustuse nii, et korrutab iga tunnuse väärtuse oma kordajaga ja liidab kokku. NaN-iga korrutamine annab NaN-i ja liitmine samuti, nii et ennustus tuleks „puuduv väärtus”. Sellest poleks kellelegi kasu, seega scikit-learn ei lase arvutust alustadagi. Treeningandmetel seda viga ei tulnud, sest seal sai imputeerija oma töö tehtud. |
kodeeri.transform |
veerg, kus on sõna "Kesklinn" |
ValueError: could not convert string to float: 'Kesklinn'Mudel oskab arvutada ainult arvudega. Treeningul olid tal kodeeritud 0/1 veerud, nüüd tuleb sõna. |
skaleeri.transform |
pindala 70 seal, kus treeningul oli 2,4 |
Veateadet ei tule. Mudel õppis kordajad skaleeritud andmetel, kus väärtused jäid umbes vahemikku −2 kuni 2. Nüüd saab ta ette 70 ja korrutab selle sama kordajaga läbi. Ennustused on valed, aga programm töötab edasi. Ainus märk on halvem testitulemus, mille sa paned tõenäoliselt millegi muu süüks. |
fit'i ainult treeningandmetel. Testandmetele rakendatakse sama õpitu.cross_val_score teeb iga vooru treeningosal uue fit'i — ka eeltöötlusele.joblib'iga ühe faili ja tootmises on sama kood, mis katsetamisel. Ei pea mäletama, millises järjekorras mida tehti.GridSearchCV võib otsida korraga mudeli ja imputeerimisstrateegia üle.Pipeline võtab nimega sammude loendi. Kõik peale viimase peavad olema teisendajad (oskavad fit ja transform), viimane võib olla hinnang ehk mudel (oskab fit ja predict).
| Kutse | Mis sammudega juhtub |
|---|---|
fit(X, y) | Iga teisendaja: fit_transform — õpib parameetrid ja annab tulemuse edasi. Viimane samm: fit. |
predict(X) | Iga teisendaja: ainult transform varem õpitud parameetritega. Viimane samm: predict. |
transform(X) | Töötab, kui viimane samm on teisendaja (torustik ilma mudelita). |
Nimed on sinu valida, aga nad ei ole kaunistus: nende kaudu pääsed sammudeni (mudel.named_steps["skaleeri"]) ja nende kaudu käivad parameetrite nimed otsingus (osa 6). Kui nimi pole oluline, teeb make_pipeline(...) need ise, väiketähtedega klassinimedest.
Kaks rida koodi — mudel.fit(X_train, y_train) ja mudel.predict(X_test) — teevad tegelikult kümme asja. Siin on need kümme asja ükshaaval lahti võetud, väikese näidisandmestikuga: kuus treeningrida ja kaks testrida, üks arvuline tunnus (pindala, ühel real puudu) ja üks kategooriline (seisukord).
Üks torustik rakendab iga sammu kõigile veergudele. Päris andmestikus on aga arvud, nominaalsed ja järjestatud kategooriad, mis vajavad eri töötlust. ColumnTransformer jagab veerud harudesse, töötleb neid paralleelselt ja paneb tulemuse kõrvuti kokku.
Allpool on kuue veeruga näidisandmestik üürikorteritest. Iga veeru kõrval on rippmenüü: sina otsustad, millisesse harusse see veerg läheb või kas ta üldse mudelini jõuab. Vaikimisi valikud on juba mõistlikud.
remainder="drop" (vaikimisi) viskab mainimata veerud ära; remainder="passthrough" laseb nad töötlemata läbi. Esimene on turvalisem: unustatud veerg annab vea, mitte vaikse rämpstunnuse.eeltootlus.get_feature_names_out().make_column_selector(dtype_include="number"). Mugav, aga olge ettevaatlik: kood, mis on salvestatud int64-na, satub siis arvuliste hulka.eeltootlus.set_output(transform="pandas"). Silumisel asendamatu.Ristvalideerimine jagab treeningandmed viieks ja igas voorus on neli osa treeningus ning üks valideerimises. Kui imputeerija õppis mediaani enne seda jagamist, sisaldab iga vooru treeninginfo ka valideerimisosa väärtusi. Vaata, kuidas muutub täiteväärtus.
Mõju suurus sõltub andmetest: kui puuduvaid väärtusi on vähe ja jaotus on ühtlane, on vahe väike. Kui eeltöötlus õpib midagi tugevat (kategooriate loend, sihtkodeerimine, tunnuste valik), võib vahe olla suur. Vahe suund on alati sama: ilma torustikuta tuleb tulemus liiga ilus.
Parameetrid on seaded, mille sa ise ette annad: kas täita puuduvad väärtused mediaani või keskmisega, kui tugev on mudeli regulariseerimine. Õiget väärtust ei tea keegi ette. GridSearchCV proovib kõik antud variandid läbi, mõõdab igaühe ristvalideerimisega ja ütleb, milline oli parim.
Kuna torustik on üks objekt, saab korraga proovida nii eeltöötluse kui mudeli seadeid — näiteks kas mediaan koos nõrga regulariseerimisega töötab paremini kui keskmine koos tugevaga. Käsitsi tehtud eeltöötlusega see ei õnnestu, sest GridSearchCV näeb ainult mudelit.
Kuidas parameetrile viidata. Tuleb öelda, millise sammu seadet sa muudad. Nimi kirjutatakse nagu aadress, osad eraldatud kahe alakriipsuga: kõigepealt välimise sammu nimi, siis selle sees oleva sammu nimi, lõpuks parameeter. Näiteks eeltootlus__arv__taida__strategy loetakse nii: torustiku samm eeltootlus → selle sees haru arv → selle sees samm taida → selle parameeter strategy. Nimed on needsamad, mille sa ise torustikku kirjutades andsid.
Vali allpool samm ja parameeter — leht paneb nime kokku ja näitab, mida see seade teeb.
mudel.get_params().keys() loetleb kõik, mida otsida saab. Sama nimeskeem kehtib ka set_params() juures.Torustikuga töötades tulevad vead muus kohas, kui käsitsi töötades. Siin on need, mis esimesel korral kindlasti ette tulevad.
Mida mis klass teeb ja kust dokumentatsiooni leiab.