Modelevaluering og kryssvalidering
Evaluer modeller med accuracy, F1, ROC-AUC og k-fold-CV.
Modelevaluering og kryssvalidering er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Inndeling i trenings-, validerings- og testsett
Bruk en tredelt inndeling: treningssettet brukes til tilpasning, valideringssettet til justering av hyperparametere og testsettet til å rapportere den endelige ytelsen. Bruk aldri testsettet under utviklingen.
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)
X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)Nøyaktighetsskår
accuracy_score er andelen korrekte prediksjoner. Bruk den for balanserte klasser. For ubalanserte data bør De heller bruke F1 eller AUC.
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))Presisjon, recall og F1
For ubalanserte klasser gjelder: presisjon = TP/(TP+FP), recall = TP/(TP+FN), og F1 = det harmoniske gjennomsnittet av presisjon og recall.
from sklearn.metrics import precision_score, recall_score, f1_score, classification_report
# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each classForvekslingsmatrise
En forvekslingsmatrise viser sanne positive, falske positive, sanne negative og falske negative.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
# [FN TP]]ROC-kurve og AUC
roc_auc_score måler arealet under ROC-kurven. AUC = 1.0 er perfekt, mens 0.5 tilsvarer tilfeldige prediksjoner.
from sklearn.metrics import roc_auc_score, roc_curve
y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))
fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curveRegresjonsmål
Bruk mean_squared_error (MSE), root_mean_squared_error (RMSE) og r2_score for regresjonsoppgaver.
from sklearn.metrics import mean_squared_error, r2_score
y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))k-delt kryssvalidering
cross_val_score deler dataene inn i k deler, trener på k-1 deler, evaluerer på én del og gjentar dette k ganger. Dette er mer robust enn én enkelt inndeling.
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=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")StratifiedKFold
Bruk StratifiedKFold for å sikre at hver del har samme klassefordeling – noe som er avgjørende for ubalanserte datasett.
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())Avveiing mellom bias og varians
Høy bias betyr undertilpasning (modellen er for enkel). Høy varians betyr overtilpasning (modellen er for kompleks). Kryssvalidering viser hvilket problem De har.
# Underfitting: low train score AND low val score
# → increase model complexity, add features
# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data
from sklearn.model_selection import validation_curve
import numpy as np
train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))Nestet kryssvalidering
For å få både objektiv justering av hyperparametere og evaluering bør De bruke nestet kryssvalidering: Den indre løkken justerer, mens den ytre løkken evaluerer.
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())Kalibrering
En klassifikators sannsynlighetsestimater kan være dårlig kalibrert. Bruk CalibratedClassifierCV for bedre sannsynlighetsestimater.
from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)
cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))Kort kontroll
Hvorfor foretrekkes kryssvalidering fremfor én enkelt inndeling i trenings- og testsett når modeller skal evalueres?
Oppsummering
Bruk nøyaktighet for balanserte problemer og F1/AUC for ubalanserte problemer. Evaluer med k-delt cross_val_score, bruk StratifiedKFold for ubalanserte data, og bruk nestet kryssvalidering når De justerer hyperparametere, slik at De får et objektivt endelig estimat. Se aldri på testsettet under utviklingen.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «Modelevaluering og kryssvalidering» gratis?
Ja – hele teksten i «Modelevaluering og kryssvalidering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Modelevaluering og kryssvalidering»?
Evaluer modeller med accuracy, F1, ROC-AUC og k-fold-CV. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Modelevaluering og kryssvalidering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- scikit-learn-API-et: fit, transform, predict
- Lineære modeller: regresjon og klassifisering
- Trebaserte modeller: beslutningstrær og random forests
- Modelevaluering og kryssvalidering