Machine Learning Academy · Oppitunti

Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu

Oppijat ketjuttavat StandardScalerin ja LogisticRegressionin Pipelineen, kutsuvat fit- ja predict-metodeja sekä varmistavat, että skaalaus sovitettiin vain koulutusdataan.

Oppitunti 1/413 vaihetta

Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu on ilmainen Machine Learning Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Machine Learning Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Machine Learning Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on scikit-learn-Pipeline?

Pipeline ketjuttaa useita käsittelyvaiheita yhdeksi estimaattoriolioksi. Jokaisen muun kuin viimeisen vaiheen on toteutettava fit- ja transform-metodit; viimeinen vaihe tarvitsee vain fit- ja predict-metodit. Kutsu pipeline.fit(X, y) suorittaa kaikki vaiheet järjestyksessä, ja pipeline.predict(X) välittää datan kaikkien muunnosten läpi ennen luokittelua. Tämä poistaa manuaalisen kirjanpidon virheet ja estää datavuodon.

Miksi Pipelinet estävät datavuodon

Jos sovitat StandardScaler-skaalaajan koko aineistoon ja jaat datan vasta sen jälkeen koulutus- ja testijoukkoon, skaalaaja on nähnyt testijoukon tilastotiedot – kyseessä on datavuoto. Pipeline ratkaisee tämän automaattisesti: kun välität Pipelinen cross_val_score- tai GridSearchCV-funktiolle, koko Pipeline (skaalaaja mukaan lukien) sovitetaan uudelleen alusta jokaisella koulutusosalla, joten testi- eli validointiosa ei koskaan vaikuta skaalaajan parametreihin.

Ensimmäisen Pipen rakentaminen

Luo Pipeline välittämällä sille luettelo (name, estimator)-monikoita. Nimet ovat itse valitsemiasi merkkijonoja, joita käytetään myöhemmin vaiheisiin viittaamiseen (esimerkiksi grid-haun hyperparametreissa). Yleisin ensimmäinen Pipeline koostuu skaalaajasta ja sitä seuraavasta luokittimesta.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(C=1.0, max_iter=200))
])

print('Steps:', [name for name, _ in pipe.steps])
print('Named steps:', list(pipe.named_steps.keys()))

Sovittaminen ja ennustaminen

Kun Pipeline on rakennettu, käytä sitä kuten mitä tahansa sklearn-estimaattoria: kutsu fit-metodia koulutusdatalla, predict-metodia testidatalla ja score-metodia tarkkuuden laskemiseen. Sisäisesti fit kutsuu fit_transform-metodia kaikille välivaiheille ja fit-metodia viimeiselle estimaattorille.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(max_iter=300))
])

pipe.fit(X_train, y_train)
print('Test accuracy:', pipe.score(X_test, y_test).round(4))

y_pred = pipe.predict(X_test)
print('Predictions[:5]:', y_pred[:5])

Varmista, että skaalaaja sovitettiin vain koulutusdataan

Kun olet sovittanut Pipelinen koulutusdataan, voit tarkastella kunkin vaiheen sovitettuja parametreja. Pipelinen sisällä olevalla skaalaajalla on mean_- ja scale_-attribuutit, jotka on laskettu vain koulutusjoukosta – eivät koko aineistosta. Näin voit varmistaa, että Pipeline toimii oikein.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import numpy as np

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression(max_iter=300))])
pipe.fit(X_train, y_train)

# Scaler mean from pipeline vs computed from X_train
print('Pipeline scaler mean[0]:', pipe.named_steps['sc'].mean_[0].round(4))
print('Direct train mean[0]:   ', X_train[:, 0].mean().round(4))

Välivaiheiden tulosten tarkasteleminen

Voit hakea tietyn vaiheen muunnoksen tuloksen käyttämällä komentoa pipeline[:-1].transform(X) tai käsittelemällä yksittäisiä vaiheita muodossa pipeline.named_steps['step_name']. Voit myös käyttää Pythonin viipalointimerkintää pipeline[:'step_name'] saadaksesi osaputken, joka ulottuu kyseiseen vaiheeseen asti. Tämä on hyödyllistä virheenkorjauksessa tai tarkasteltaessa datan muotoa skaalauksen jälkeen.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())])
pipe.fit(X, y)

# Get scaled output (all steps except the last)
X_scaled = pipe[:-1].transform(X)
print('After scaling — mean per feature:', X_scaled.mean(axis=0).round(4))
print('After scaling — std per feature:', X_scaled.std(axis=0).round(4))

make_pipeline: oikotie

make_pipeline luo Pipen ilman, että vaiheiden nimiä tarvitsee määrittää manuaalisesti – se muodostaa nimet luokkien nimistä pienillä kirjaimilla. Tämä on kätevää nopeissa kokeiluissa, mutta tuotantokoodissa vähemmän luettavaa, sillä eksplisiittiset nimet helpottavat vaiheiden tunnistamista grid-haun parametrimerkkijonoissa.

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
import numpy as np

X, y = load_iris(return_X_y=True)

# Auto-names: 'minmaxscaler' and 'kneighborsclassifier'
pipe = make_pipeline(MinMaxScaler(), KNeighborsClassifier(n_neighbors=5))
print('Step names:', list(pipe.named_steps.keys()))
print('CV accuracy:', cross_val_score(pipe, X, y, cv=5).mean().round(4))

Todennäköisyysennusteita tuottava Pipeline

Jos viimeinen estimaattori tukee predict_proba-metodia, myös Pipeline tarjoaa sen. Näin voit käyttää Pipelinea minkä tahansa todennäköisyystuloksia odottavan funktion kanssa – esimerkiksi ROC-AUC-pisteytyksessä, kalibrointikäyrissä tai kynnysarvon säätämisessä – ilman, että esikäsittelyä tarvitsee tehdä manuaalisesti ennen mallin kutsumista.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression(max_iter=300))])
pipe.fit(X_train, y_train)

proba = pipe.predict_proba(X_test)[:, 1]
print('ROC-AUC:', roc_auc_score(y_test, proba).round(4))

Parametrien asettaminen rakentamisen jälkeen

Voit päivittää minkä tahansa vaiheen parametrin Pipelinen rakentamisen jälkeen käyttämällä muotoa set_params(step__param=value), jossa erotin on kaksoisalaviiva. Tämä on sama merkintätapa, jota käytetään GridSearchCV:ssä. Se on hyödyllinen, kun haluat kokeilla eri asetuksia rakentamatta koko Pipelinea uudelleen alusta.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())])

# Change C and max_iter after construction
pipe.set_params(lr__C=10.0, lr__max_iter=500)
print('C after set_params:', pipe.named_steps['lr'].C)

Pipelinejen sarjallistaminen ja jakaminen

Sovitettu Pipeline on yksi Python-olio, jonka voi sarjallistaa pickle- tai joblib-kirjastolla. Kun Pipeline jaetaan yhtenä tiedostona, ennustusvaiheessa käytetään täsmälleen samoja esikäsittelyvaiheita ja skaalaajan täsmälleen samoja parametreja. Näin vältetään koulutus- ja palveluympäristöjen väliset yhdenmukaisuusvirheet.

import joblib
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())])
pipe.fit(X, y)

# Save and reload
joblib.dump(pipe, '/tmp/iris_pipeline.pkl')
loaded_pipe = joblib.load('/tmp/iris_pipeline.pkl')

print('Predictions match:', (pipe.predict(X) == loaded_pipe.predict(X)).all())

Pipelinen ristiinvalidoinnin hyvä käytäntö

Kääri Pipeline aina cross_val_score-funktion sisään sen sijaan, että silmukoisit osat manuaalisesti. Näin skaalaaja sovitetaan uudelleen jokaisella koulutusosalla eikä se koskaan käsittele validointiosaa, joten saat rehellisen arvion yleistämissuorituskyvystä.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.datasets import load_digits
from sklearn.model_selection import cross_val_score
import numpy as np

X, y = load_digits(return_X_y=True)

pipe = Pipeline([
    ('sc', StandardScaler()),
    ('svm', SVC(kernel='rbf', C=5.0, gamma='scale'))
])

scores = cross_val_score(pipe, X, y, cv=5, n_jobs=-1)
print(f'CV accuracy: {np.mean(scores):.4f} +/- {np.std(scores):.4f}')

Pikatarkistus

Testaa tässä oppitunnissa oppimaasi scikit-learn-Pipelineista.

Oppitunnin yhteenveto

Tässä oppitunnissa opit, että Pipeline ketjuttaa vaiheet yhdeksi estimaattoriksi ja estää datavuodon sovittamalla jokaisen vaiheen vain sen käsittelemään koulutusdataan, make_pipeline tarjoaa automaattisesti nimetyt oikotiet, kun taas eksplisiittiset nimet parantavat grid-haun luettavuutta, ja sovitetun Pipen voi sarjallistaa ja jakaa yhtenä artefaktina yhdenmukaista esikäsittelyä varten palveluympäristössä. Seuraavaksi lisäämme ColumnTransformerin Pipelineen käsittelemään tyypiltään vaihtelevaa numeerista ja kategorista dataa.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu” ilmainen?

Kyllä – oppitunnin ”Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Machine Learning Academy-kurssin, päivitä CoddyKit PROhon. Machine Learning Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu”?

Oppijat ketjuttavat StandardScalerin ja LogisticRegressionin Pipelineen, kutsuvat fit- ja predict-metodeja sekä varmistavat, että skaalaus sovitettiin vain koulutusdataan. Harjoittelet Machine Learning Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Machine Learning Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Machine Learning Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Machine Learning Academy-oppitunnilla?

Kyllä. Jokainen Machine Learning Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Ensimmäisen Pipeline-putkiston rakentaminen: skaalaus ja luokittelu
  2. ColumnTransformer Pipeline-putkiston sisällä
  3. Koko Pipeline-putkiston ristivalidointi ja ruudukkohaku
  4. Pipeline-putkiston tallentaminen ja lataaminen joblibillä
← Takaisin: Machine Learning Academy