Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Mallin Arviointi | Mallintaminen
Johdatus koneoppimiseen Pythonilla

Mallin Arviointi

Pyyhkäise näyttääksesi valikon

Kun rakennetaan ennustavaa mallia, on ratkaisevan tärkeää selvittää kuinka hyvin se suoriutuu ennen kuin sitä käytetään todellisiin ennusteisiin.

Mallin arviointi mittaa, kuinka tarkasti malli tekee ennusteita. .score()-metodi tarjoaa tämän arvion.

Suorituskyvyn arviointi opetusdatalla on harhaanjohtavaa, sillä malli todennäköisesti suoriutuu paremmin datalla, jonka se on jo nähnyt. Realistisen arvion saamiseksi arviointi on tehtävä näkemättömällä datalla.

Virallisesti tavoitteena on luoda malli, joka yleistää hyvin.

Note
Määritelmä

Yleistettävyys tarkoittaa mallin kykyä suoriutua tehokkaasti uudella, aiemmin näkemättömällä datalla, ei pelkästään sillä datalla, jolla se on opetettu. Se mittaa, kuinka tarkasti mallin ennusteita voidaan soveltaa todellisiin tilanteisiin koulutusdatan ulkopuolella.

Tämä voidaan saavuttaa jakamalla data satunnaisesti kahteen osaan: opetusdataan mallin sovittamista varten ja testidataan arviointia varten.

TrainTestTable

Mallin koulutus opetusdatalla ja arviointi testidatalla:

model.fit(X_train, y_train)
print(model.score(X_test, y_test))

Satunnaisen jaon luomiseen käytetään train_test_split()-funktiota sklearn.model_selection -moduulista.

train_test_split

Testijoukon koko riippuu tyypillisesti aineistosta: 25–40 % pienille aineistoille, 10–30 % keskisuurille ja alle 10 % suurille aineistoille.

Tässä esimerkissä, jossa on vain 342 havaintoa (pieni aineisto), varataan 33 % testijoukolle:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

Tässä X_train ja y_train edustavat opetusjoukkoa, kun taas X_test ja y_test edustavat testijoukkoa.

123456789101112131415
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Train-test split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33) # Initialize and train a model knn5 = KNeighborsClassifier().fit(X_train, y_train) # Trained 5 neighbors model knn1 = KNeighborsClassifier(n_neighbors=1).fit(X_train, y_train) # Trained 1 neighbor model # Print the scores of both models print('5 Neighbors score:',knn5.score(X_test, y_test)) print('1 Neighbor score:',knn1.score(X_test, y_test))

Malli on nyt opetettu opetusjoukolla käyttäen .fit(X_train, y_train) ja arvioitu testijoukolla käyttäen .score(X_test, y_test).

Koska train_test_split() jakaa datan satunnaisesti, opetus- ja testijoukot eroavat jokaisella ajokerralla, mikä johtaa vaihteleviin tuloksiin. Suuremmalla aineistolla nämä tulokset olisivat vakaampia.

question mark

Jotta saavutetaan 67%/33% opetus-testi-jako, otetaan ensimmäinen kolmasosa riveistä testijoukoksi ja loput opetusjoukoksi. Onko tämä väite oikein?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 4. Luku 3
some-alt