Zum Inhalt springen

Python Machine Learning Cross-Validation: Ein umfassender Leitfaden

Willkommen zu unserem umfassenden Leitfaden zur Kreuzvalidierung im Python-Maschinenlernen. In diesem Artikel werden wir untersuchen, was Kreuzvalidierung ist und wie sie mit Python implementiert werden kann. Unser Ziel ist es, Ihnen alle Informationen zu bieten, die Sie benötigen, um Kreuzvalidierung effektiv in Ihren Machine-Learning-Projekten zu verstehen und anzuwenden.

Einführung in die Kreuzvalidierung

Kreuzvalidierung ist eine weit verbreitete Technik im Machine Learning, die dabei hilft, die Leistung eines Modells zu bewerten. Dabei werden die Daten in mehrere Teilmengen, sogenannte Folds, unterteilt. Das Modell wird auf jedem Fold trainiert, während die verbleibenden Folds zum Testen verwendet werden. Dies ermöglicht eine robustere Bewertung der Modellleistung, da es auf Daten getestet wird, mit denen es nicht trainiert wurde.

Es gibt verschiedene Arten von Kreuzvalidierungstechniken, darunter:

  • K-Fold-Kreuzvalidierung
  • Leave-One-Out-Kreuzvalidierung
  • Geschichtete Kreuzvalidierung
  • Zeitreihen-Kreuzvalidierung

In diesem Artikel konzentrieren wir uns auf die K-Fold-Kreuzvalidierung, die die am häufigsten verwendete Technik ist.

K-Fold-Kreuzvalidierung

Bei der K-Fold-Kreuzvalidierung werden die Daten in K Teilmengen bzw. Folds gleicher Größe unterteilt. Das Modell wird dann auf K-1 Folds trainiert und auf dem verbleibenden Fold getestet. Dieser Vorgang wird K Mal wiederholt, wobei jeder Fold einmal als Testsatz dient.

Das folgende Diagramm veranschaulicht den Prozess der K-Fold-Kreuzvalidierung:


Hinweis: Für K=5 verwendet der Trainingsatz 80 % der Daten und der Testsatz 20 %.

Die K-Fold-Kreuzvalidierung hilft, das Problem des Overfitting zu mildern, bei dem ein Modell auf den Trainingsdaten gut, auf neuen Daten jedoch schlecht abschneidet. Sie liefert außerdem eine genauere Schätzung der Modellleistung, da es auf mehreren Teilmengen der Daten getestet wird.

Implementierung der K-Fold-Kreuzvalidierung in Python

Die Implementierung der K-Fold-Kreuzvalidierung in Python ist dank der scikit-learn-Bibliothek ganz einfach. Das folgende Code-Snippet zeigt, wie die K-Fold-Kreuzvalidierung für einen Datensatz mit scikit-learn durchgeführt wird:

python
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
import pandas as pd

# Load the dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = pd.read_csv(url, names=names)

# Split the dataset into input features and output variable
X = dataset.iloc[:, :-1]
y = dataset.iloc[:, -1]

# Initialize the model
model = LogisticRegression()

# Initialize the K-Fold Cross-Validation
kfold = KFold(n_splits=5, random_state=42, shuffle=True)

# Evaluate the model using K-Fold Cross-Validation
results = cross_val_score(model, X, y, cv=kfold)

# Print the mean and standard deviation of the results
print("Mean Accuracy: %.2f%%, Standard Deviation: %.2f%%" % (results.mean() * 100, results.std() * 100))

Zuerst importieren wir die erforderlichen Bibliotheken, darunter scikit-learn, pandas und LogisticRegression. Anschließend laden wir den Datensatz von einer URL, in diesem Fall den Iris-Datensatz. Die Eingabemerkmale und die Ausgabvariable werden aus dem Datensatz aufgeteilt.

Als Nächstes initialisieren wir das Logistische-Regressions-Modell und die K-Fold-Kreuzvalidierung mit KFold. Die KFold-Funktion übernimmt drei Parameter:

  • n_splits: die Anzahl der zu erstellenden Folds
  • random_state: der vom Zufallszahlengenerator verwendete Seed
  • shuffle: bestimmt, ob die Daten vor der Aufteilung in Folds gemischt werden sollen

Abschließend bewerten wir das Modell mit cross_val_score, das das Modell, die Eingabemerkmale, die Ausgabvariable und das K-Fold-Kreuzvalidierungs-Objekt als Parameter übernimmt. Die Funktion gibt ein Array von Werten für jeden Fold zurück. Das results-Array enthält einen Genauigkeitswert pro Fold. Ein hoher Mittelwert deutet auf eine starke Gesamtleistung hin, während eine niedrige Standardabweichung darauf schließen lässt, dass das Modell über verschiedene Datenaufteilungen hinweg konsistent generalisiert.

Fazit

Zusammenfassend lässt sich sagen, dass die Kreuzvalidierung eine entscheidende Technik im Machine Learning ist, die dabei hilft, die Leistung eines Modells genau zu bewerten. Die K-Fold-Kreuzvalidierung ist die am häufigsten verwendete Technik, bei der die Daten in K Teilmengen unterteilt und das Modell auf K-1 Teilmengen trainiert wird, während es auf der verbleibenden Teilmenge getestet wird. Python bietet mehrere Bibliotheken zur Implementierung der Kreuzvalidierung, darunter scikit-learn, eine beliebte Bibliothek in der Machine-Learning-Community.

Zusammenfassend bietet Ihnen dieser Leitfaden alle Informationen, die Sie benötigen, um die K-Fold-Kreuzvalidierung mit Python zu verstehen und zu implementieren. Durch die Anwendung dieses Wissens in Ihren Machine-Learning-Projekten können Sie die Genauigkeit und Zuverlässigkeit Ihrer Modelle verbessern und bessere Ergebnisse erzielen.

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.