Python Academy · Oppitunti

scikit-learn-rajapinta: fit, transform, predict

Ymmärtäkää estimaattorirajapinta ja opetus- ja testijoukon jakamisen työnkulku.

Oppitunti 1/413 vaihetta

scikit-learn-rajapinta: fit, transform, predict on ilmainen Python 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 Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mikä scikit-learn on

scikit-learn on Pythonin vakiintunut kirjasto perinteiseen koneoppimiseen. Se tarjoaa yhdenmukaisen ohjelmointirajapinnan: jokaisella estimaattorilla on fit()-metodi, ja useimmilla on predict()- tai transform()-metodi.

from sklearn.linear_model import LinearRegression
import numpy as np

X = np.array([[1],[2],[3],[4],[5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegression().fit(X, y)
print(model.predict([[6]]))   # [12.]

Opetus- ja testijako

Jakakaa data aina ennen opettamista, jotta voitte arvioida, kuinka hyvin malli yleistyy aiemmin näkemättömään dataan.

from sklearn.model_selection import train_test_split
import numpy as np

X = np.random.rand(100, 5)
y = (X[:,0] > 0.5).astype(int)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
print(X_train.shape, X_test.shape)   # (80,5) (20,5)

fit() — opettaminen

estimator.fit(X, y) opettaa mallin X:n (piirteiden) ja y:n (luokkien) avulla. Ohjaamattomissa menetelmissä välitetään vain X.

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=200, random_state=0)
model = LogisticRegression()
model.fit(X, y)
print("Trained:", model.classes_)

predict() ja predict_proba()

predict(X) palauttaa luokkien tunnisteet ja predict_proba(X) luokkien todennäköisyydet luokittelijoille.

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = LogisticRegression().fit(X, y)

print(model.predict(X[:5]))          # [0 1 0 ...]
print(model.predict_proba(X[:2]))    # [[0.7 0.3] ...]

Muuntimet: fit ja transform

Muuntimilla (skaalaimilla ja koodaimilla) on metodit fit(X) ja transform(X). Sovittakaa malli aina vain opetusdataan ja muuntakaa sitten sekä opetus- että testidata.

from sklearn.preprocessing import StandardScaler
import numpy as np

X_train = np.array([[1,2],[3,4],[5,6]])
X_test  = np.array([[2,3],[4,5]])

scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)   # fit + transform
X_test_s  = scaler.transform(X_test)        # transform only (using train stats)

Pipeline

Pipeline ketjuttaa muuntimet ja estimaattorin yhdeksi olioksi. Se estää tietovuodon soveltamalla muunnoksia ristiinvalidoinnin sisällä oikein.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", SVC())
])
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))

Tarkkuus ja muut mittarit

Käyttäkää luokittelijoiden arviointiin mittareita accuracy_score, f1_score ja classification_report.

from sklearn.metrics import accuracy_score, classification_report

y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

Ristiinvalidointi

cross_val_score arvioi mallin k-jakoisella ristiinvalidoinnilla ilman, että dataa tarvitsee jakaa itse.

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=5)
print(f"CV scores: {scores.mean():.3f} ± {scores.std():.3f}")

Hyperparametrien viritys GridSearchCV:llä

GridSearchCV käy parametriruudukon tyhjentävästi läpi ristiinvalidoinnin avulla löytääkseen parhaat hyperparametrit.

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
param_grid = {"C": [0.1, 1, 10], "kernel": ["rbf", "linear"]}
gs = GridSearchCV(SVC(), param_grid, cv=5)
gs.fit(X, y)
print(gs.best_params_, gs.best_score_)

Esikäsittely: LabelEncoder ja OneHotEncoder

Koodatkaa kategoriset luokat LabelEncoder-luokalla ja kategoriset piirteet OneHotEncoder- tai ColumnTransformer-luokalla.

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np

le = LabelEncoder()
print(le.fit_transform(["cat","dog","cat","fish"]))   # [0 1 0 2]

ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"],["green"],["blue"]]))

Mallien tallentaminen ja lataaminen

Säilyttäkää opetetut mallit joblib-kirjastolla (se on NumPy-taulukoille pickleä nopeampi).

import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = LogisticRegression().fit(X, y)

joblib.dump(model, "model.joblib")
loaded = joblib.load("model.joblib")
print(loaded.predict(X[:3]))

Pikatarkistus

Miksi scaler.fit() pitäisi kutsua vain opetusdatalla eikä testidatalla?

Kertaus

scikit-learnin yhdenmukaisessa ohjelmointirajapinnassa fit() opettaa, predict() tekee ennusteita ja transform() esikäsittelee dataa. Käyttäkää Pipeline-luokkaa vaiheiden ketjuttamiseen. Jakakaa data train_test_split-funktiolla, arvioikaa se cross_val_score-funktiolla ja virittäkää hyperparametrit GridSearchCV-luokalla.

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
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”scikit-learn-rajapinta: fit, transform, predict” ilmainen?

Kyllä – oppitunnin ”scikit-learn-rajapinta: fit, transform, predict” 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 Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”scikit-learn-rajapinta: fit, transform, predict”?

Ymmärtäkää estimaattorirajapinta ja opetus- ja testijoukon jakamisen työnkulku. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python 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 ”scikit-learn-rajapinta: fit, transform, predict”-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ä Python Academy-oppitunnilla?

Kyllä. Jokainen Python 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. scikit-learn-rajapinta: fit, transform, predict
  2. Lineaariset mallit: regressio ja luokittelu
  3. Puupohjaiset mallit: päätöspuut ja satunnaismetsät
  4. Mallien arviointi ja ristivalidointi
← Takaisin: Python Academy