Utvärdering av Modellen
Vid skapandet av en prediktiv modell är det avgörande att fastställa hur väl den presterar innan den används för verkliga förutsägelser.
Utvärdering av modellen mäter hur noggrant modellen gör förutsägelser. Metoden .score()
tillhandahåller denna bedömning.
Att utvärdera prestanda på träningsuppsättningen är missvisande, eftersom modellen sannolikt presterar bättre på data den redan har sett. För att få ett realistiskt mått måste utvärderingen göras på osedd data.
Formellt är målet att skapa en modell som generaliserar väl.
Generaliseringsförmåga är modellens förmåga att prestera effektivt på ny, osedd data, utöver den data som användes vid träningen. Det mäter hur noggrant modellens förutsägelser kan tillämpas på verkliga scenarier utanför träningsdatamängden.
Detta kan uppnås genom att slumpmässigt dela datamängden i två delar: en träningsuppsättning för att anpassa modellen och en testuppsättning för utvärdering.
Träna modellen med hjälp av träningsuppsättningen och utvärdera den sedan på testuppsättningen:
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
För att skapa en slumpmässig uppdelning av data, använd funktionen train_test_split()
från modulen sklearn.model_selection
.
Vanligtvis beror testuppsättningens storlek på datasetet: 25–40 % för små dataset, 10–30 % för medelstora och mindre än 10 % för stora dataset.
I detta exempel, med endast 342 instanser (ett litet dataset), avsätt 33 % för testuppsättningen:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Här representerar X_train
och y_train
träningsuppsättningen, medan X_test
och y_test
representerar testuppsättningen.
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änas nu med träningsuppsättningen med hjälp av .fit(X_train, y_train)
och utvärderas med testuppsättningen med hjälp av .score(X_test, y_test)
.
Eftersom train_test_split()
delar upp data slumpmässigt, kommer tränings- och testuppsättningarna att skilja sig åt vid varje körning, vilket leder till varierande poäng. Med ett större dataset skulle dessa poäng bli mer stabila.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Utvärdering av Modellen
Svep för att visa menyn
Vid skapandet av en prediktiv modell är det avgörande att fastställa hur väl den presterar innan den används för verkliga förutsägelser.
Utvärdering av modellen mäter hur noggrant modellen gör förutsägelser. Metoden .score()
tillhandahåller denna bedömning.
Att utvärdera prestanda på träningsuppsättningen är missvisande, eftersom modellen sannolikt presterar bättre på data den redan har sett. För att få ett realistiskt mått måste utvärderingen göras på osedd data.
Formellt är målet att skapa en modell som generaliserar väl.
Generaliseringsförmåga är modellens förmåga att prestera effektivt på ny, osedd data, utöver den data som användes vid träningen. Det mäter hur noggrant modellens förutsägelser kan tillämpas på verkliga scenarier utanför träningsdatamängden.
Detta kan uppnås genom att slumpmässigt dela datamängden i två delar: en träningsuppsättning för att anpassa modellen och en testuppsättning för utvärdering.
Träna modellen med hjälp av träningsuppsättningen och utvärdera den sedan på testuppsättningen:
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
För att skapa en slumpmässig uppdelning av data, använd funktionen train_test_split()
från modulen sklearn.model_selection
.
Vanligtvis beror testuppsättningens storlek på datasetet: 25–40 % för små dataset, 10–30 % för medelstora och mindre än 10 % för stora dataset.
I detta exempel, med endast 342 instanser (ett litet dataset), avsätt 33 % för testuppsättningen:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Här representerar X_train
och y_train
träningsuppsättningen, medan X_test
och y_test
representerar testuppsättningen.
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änas nu med träningsuppsättningen med hjälp av .fit(X_train, y_train)
och utvärderas med testuppsättningen med hjälp av .score(X_test, y_test)
.
Eftersom train_test_split()
delar upp data slumpmässigt, kommer tränings- och testuppsättningarna att skilja sig åt vid varje körning, vilket leder till varierande poäng. Med ett större dataset skulle dessa poäng bli mer stabila.
Tack för dina kommentarer!