Evaluering af Modellen
Ved opbygning af en prædiktiv model er det afgørende at fastslå hvor godt den præsterer, før den anvendes til reelle forudsigelser.
Model-evaluering måler, hvor præcist modellen laver forudsigelser. Metoden .score() giver denne vurdering.
Evaluering af præstationen på træningssættet er misvisende, da modellen sandsynligvis klarer sig bedre på data, den allerede har set. For at opnå et realistisk mål skal evalueringen foretages på usete data.
Formelt er målet at skabe en model, der generaliserer godt.
Generalization er modellens evne til at præstere effektivt på nye, usete data, ud over blot de data, den er blevet trænet på. Det måler, hvor præcist modellens forudsigelser kan anvendes på virkelige scenarier uden for træningsdatasættet.
Dette kan opnås ved tilfældig opdeling af datasættet i to dele: et træningssæt til at tilpasse modellen og et test-sæt til evaluering.
Træn modellen ved hjælp af træningssættet og evaluer derefter på testdatasættet:
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
For at oprette en tilfældig opdeling af dataene, anvendes funktionen train_test_split() fra modulet sklearn.model_selection.
Typisk afhænger størrelsen på testdatasættet af datasættet: 25–40% for små datasæt, 10–30% for mellemstore, og mindre end 10% for store datasæt.
I dette eksempel, med kun 342 forekomster (et lille datasæt), allokeres 33% til testdatasættet:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Her repræsenterer X_train og y_train træningssættet, mens X_test og y_test repræsenterer testdatasættet.
123456789101112131415import 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))
Modellen trænes nu med træningssættet ved hjælp af .fit(X_train, y_train) og evalueres med test-sættet ved hjælp af .score(X_test, y_test).
Da train_test_split() opdeler data tilfældigt, vil trænings- og test-sæt være forskellige ved hver kørsel, hvilket medfører varierende scorer. Med et større datasæt vil disse scorer blive mere stabile.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you explain why evaluating on the training set is misleading?
How does the random split affect model performance?
What does the `.score()` method actually measure?
Awesome!
Completion rate improved to 3.13
Evaluering af Modellen
Stryg for at vise menuen
Ved opbygning af en prædiktiv model er det afgørende at fastslå hvor godt den præsterer, før den anvendes til reelle forudsigelser.
Model-evaluering måler, hvor præcist modellen laver forudsigelser. Metoden .score() giver denne vurdering.
Evaluering af præstationen på træningssættet er misvisende, da modellen sandsynligvis klarer sig bedre på data, den allerede har set. For at opnå et realistisk mål skal evalueringen foretages på usete data.
Formelt er målet at skabe en model, der generaliserer godt.
Generalization er modellens evne til at præstere effektivt på nye, usete data, ud over blot de data, den er blevet trænet på. Det måler, hvor præcist modellens forudsigelser kan anvendes på virkelige scenarier uden for træningsdatasættet.
Dette kan opnås ved tilfældig opdeling af datasættet i to dele: et træningssæt til at tilpasse modellen og et test-sæt til evaluering.
Træn modellen ved hjælp af træningssættet og evaluer derefter på testdatasættet:
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
For at oprette en tilfældig opdeling af dataene, anvendes funktionen train_test_split() fra modulet sklearn.model_selection.
Typisk afhænger størrelsen på testdatasættet af datasættet: 25–40% for små datasæt, 10–30% for mellemstore, og mindre end 10% for store datasæt.
I dette eksempel, med kun 342 forekomster (et lille datasæt), allokeres 33% til testdatasættet:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Her repræsenterer X_train og y_train træningssættet, mens X_test og y_test repræsenterer testdatasættet.
123456789101112131415import 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))
Modellen trænes nu med træningssættet ved hjælp af .fit(X_train, y_train) og evalueres med test-sættet ved hjælp af .score(X_test, y_test).
Da train_test_split() opdeler data tilfældigt, vil trænings- og test-sæt være forskellige ved hver kørsel, hvilket medfører varierende scorer. Med et større datasæt vil disse scorer blive mere stabile.
Tak for dine kommentarer!