Modellbewertung
Beim Erstellen eines prädiktiven Modells ist es entscheidend, die Leistungsfähigkeit des Modells zu bestimmen, bevor es für reale Vorhersagen eingesetzt wird.
Die Modellevaluierung misst, wie genau das Modell Vorhersagen trifft. Die Methode .score()
liefert diese Bewertung.
Die Leistungsbewertung auf dem Trainingsdatensatz ist irreführend, da das Modell auf bereits bekannten Daten in der Regel bessere Ergebnisse erzielt. Um eine realistische Einschätzung zu erhalten, muss die Bewertung auf unbekannten Daten erfolgen.
Formal besteht das Ziel darin, ein Modell zu erstellen, das gut generalisiert.
Generalisierung bezeichnet die Fähigkeit eines Modells, auch auf neuen, unbekannten Daten effektiv zu arbeiten, also über die Daten hinaus, auf denen es trainiert wurde. Sie misst, wie genau die Vorhersagen eines Modells auf reale Anwendungsszenarien außerhalb des Trainingsdatensatzes übertragbar sind.
Dies kann erreicht werden, indem der Datensatz zufällig in zwei Teile aufgeteilt wird: ein Trainingsdatensatz zum Anpassen des Modells und ein Testdatensatz zur Bewertung.
Das Modell mit dem Trainingsdatensatz trainieren und anschließend mit dem Testdatensatz evaluieren:
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
Für eine zufällige Aufteilung der Daten die Funktion train_test_split()
aus dem Modul sklearn.model_selection
verwenden.
Die Größe des Testdatensatzes hängt typischerweise vom Datensatz ab: 25–40 % bei kleinen Datensätzen, 10–30 % bei mittleren und weniger als 10 % bei großen Datensätzen.
In diesem Beispiel mit nur 342 Instanzen (ein kleiner Datensatz) werden 33 % für den Testdatensatz verwendet:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Hier stehen X_train
und y_train
für den Trainingsdatensatz, während X_test
und y_test
den Testdatensatz repräsentieren.
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))
Das Modell wird nun mit dem Trainingsdatensatz mittels .fit(X_train, y_train)
trainiert und mit dem Testdatensatz mittels .score(X_test, y_test)
evaluiert.
Da train_test_split()
die Daten zufällig aufteilt, unterscheiden sich Trainings- und Testdatensatz bei jedem Durchlauf, was zu unterschiedlichen Ergebnissen führt. Bei einem größeren Datensatz würden diese Werte stabiler werden.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 3.13
Modellbewertung
Swipe um das Menü anzuzeigen
Beim Erstellen eines prädiktiven Modells ist es entscheidend, die Leistungsfähigkeit des Modells zu bestimmen, bevor es für reale Vorhersagen eingesetzt wird.
Die Modellevaluierung misst, wie genau das Modell Vorhersagen trifft. Die Methode .score()
liefert diese Bewertung.
Die Leistungsbewertung auf dem Trainingsdatensatz ist irreführend, da das Modell auf bereits bekannten Daten in der Regel bessere Ergebnisse erzielt. Um eine realistische Einschätzung zu erhalten, muss die Bewertung auf unbekannten Daten erfolgen.
Formal besteht das Ziel darin, ein Modell zu erstellen, das gut generalisiert.
Generalisierung bezeichnet die Fähigkeit eines Modells, auch auf neuen, unbekannten Daten effektiv zu arbeiten, also über die Daten hinaus, auf denen es trainiert wurde. Sie misst, wie genau die Vorhersagen eines Modells auf reale Anwendungsszenarien außerhalb des Trainingsdatensatzes übertragbar sind.
Dies kann erreicht werden, indem der Datensatz zufällig in zwei Teile aufgeteilt wird: ein Trainingsdatensatz zum Anpassen des Modells und ein Testdatensatz zur Bewertung.
Das Modell mit dem Trainingsdatensatz trainieren und anschließend mit dem Testdatensatz evaluieren:
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
Für eine zufällige Aufteilung der Daten die Funktion train_test_split()
aus dem Modul sklearn.model_selection
verwenden.
Die Größe des Testdatensatzes hängt typischerweise vom Datensatz ab: 25–40 % bei kleinen Datensätzen, 10–30 % bei mittleren und weniger als 10 % bei großen Datensätzen.
In diesem Beispiel mit nur 342 Instanzen (ein kleiner Datensatz) werden 33 % für den Testdatensatz verwendet:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Hier stehen X_train
und y_train
für den Trainingsdatensatz, während X_test
und y_test
den Testdatensatz repräsentieren.
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))
Das Modell wird nun mit dem Trainingsdatensatz mittels .fit(X_train, y_train)
trainiert und mit dem Testdatensatz mittels .score(X_test, y_test)
evaluiert.
Da train_test_split()
die Daten zufällig aufteilt, unterscheiden sich Trainings- und Testdatensatz bei jedem Durchlauf, was zu unterschiedlichen Ergebnissen führt. Bei einem größeren Datensatz würden diese Werte stabiler werden.
Danke für Ihr Feedback!