Auswerten eines Machine Learning-Modells
Sie haben also ein Vorhersagemodell trainiert. Aber wie können Sie beurteilen, ob es seine Funktion erfüllt?
Zum Bewerten eines Modells müssen Sie die Validierungsdaten verwenden, die Sie zurückgehalten haben. Bei Modellen für überwachtes Machine Learning ermöglicht Ihnen dieser Ansatz, die vom Modell vorhergesagten Beschriftungen mit den tatsächlichen Beschriftungen im Validierungsdataset zu vergleichen. Durch den Vergleich der Vorhersagen mit den tatsächlichen Beschriftungswerten können Sie eine Reihe von Bewertungsmetriken berechnen, um die Vorhersageleistung des Modells zu quantifizieren.
Bewerten von Regressionsmodellen
Regressionsmodelle sagen numerische Werte voraus. Daher müssen Sie bei jeder Bewertung der Vorhersageleistung des Modells die Unterschiede zwischen den prognostizierten Werten und den tatsächlichen Beschriftungswerten im Validierungsdataset berücksichtigen. Da das Validierungsdataset verschiedene Fälle umfasst, von denen einige genauere Vorhersagen als andere liefern können, benötigen Sie eine Möglichkeit, die Unterschiede zu aggregieren und eine Gesamtmetrik für die Leistung zu ermitteln. Zu den typischen Metriken für die Bewertung eines Regressionsmodells gehören folgende:
- Mittlere quadratische Abweichung (Mean Squared Error, MSE): Diese Metrik wird berechnet, indem die Differenzen zwischen den einzelnen Vorhersagen und den tatsächlichen Werten zum Quadrat genommen und die quadrierten Differenzen addiert werden, um den Mittelwert (Durchschnitt) zu berechnen. Durch das Quadrieren der Werte sind die Abweichungen absolut (wobei nicht berücksichtigt wird, ob die Abweichung negativ oder positiv ist), und größere Abweichungen werden stärker gewichtet.
- Mittlere quadratische Gesamtabweichung (Root Mean Squared Error, RMSE): Die MSE-Metrik ist zwar ein guter Anhaltspunkt für den Fehlergrad der Modellvorhersagen, aber sie steht nicht in Zusammenhang mit der tatsächlichen Maßeinheit der Beschriftung. Bei einem Modell, das beispielsweise den Umsatz (in US-Dollar) vorhersagt, repräsentiert der MSE-Wert tatsächlich die Dollarwerte zum Quadrat. Um zu bewerten, wie stark die Vorhersagen in Dollar abweichen, müssen Sie die Quadratwurzel des MSE-Werts berechnen.
- Bestimmungskoeffizient (R2): Die R2-Metrik misst die Korrelation zwischen dem quadrierten Feature und den vorhergesagten Werten. Das Ergebnis ist ein Wert zwischen 0 und 1, der den Umfang der Abweichung misst, der durch das Modell erklärt werden kann. Je stärker sich dieser Wert 1 annähert, desto besser ist die Vorhersage des Modells.
Die meisten Machine Learning-Frameworks stellen Klassen bereit, die diese Metriken für Sie berechnen. Die Spark MLlib-Bibliothek bietet zum Beispiel die Klasse RegressionEvaluator, die Sie wie im folgenden Codebeispiel gezeigt verwenden können:
from pyspark.ml.evaluation import RegressionEvaluator
# Inference predicted labels from validation data
predictions_df = model.transform(validation_df)
# Assume predictions_df includes a 'prediction' column with the predicted labels
# and a 'label' column with the actual known label values
# Use an evaluator to get metrics
evaluator = RegressionEvaluator()
evaluator.setPredictionCol("prediction")
mse = evaluator.evaluate(predictions_df, {evaluator.metricName: "mse"})
rmse = evaluator.evaluate(predictions_df, {evaluator.metricName: "rmse"})
r2 = evaluator.evaluate(predictions_df, {evaluator.metricName: "r2"})
print("MSE:", str(mse))
print("RMSE:", str(rmse))
print("R2", str(r2))
Bewerten von Klassifizierungsmodellen
Klassifizierungsmodelle prognostizieren kategorische Beschriftungen (Klassen), indem sie für jede mögliche Klasse einen Wahrscheinlichkeitswert berechnen und die Klassenbezeichnung mit der höchsten Wahrscheinlichkeit auswählen. Die zur Bewertung eines Klassifizierungsmodells verwendeten Metriken spiegeln wider, wie oft diese Klassenvorhersagen im Vergleich zu den tatsächlich bekannten Beschriftungen im Validierungsdataset korrekt waren. Zu den typischen Metriken für die Bewertung eines Klassifizierungsmodells gehören folgende:
- Genauigkeit: Eine einfache Metrik, die den Anteil der vom Modell getroffenen Klassenvorhersagen angibt, die korrekt waren. Dies scheint zwar der naheliegendste Weg zur Bewertung der Leistung eines Klassifizierungsmodells zu sein, aber betrachten Sie ein Szenario, in dem mithilfe eines Modells vorhergesagt werden soll, ob eine Person mit dem Auto, dem Bus oder der Straßenbahn zur Arbeit fahren wird. Angenommen, 95 % der Personen im Validierungssatz nutzen das Auto, 3 % fahren mit dem Bus und 2 % mit der Straßenbahn. Ein Modell, das stets das Auto als Verkehrsmittel vorhersagt, ist dann zu 95 % genau – selbst wenn es tatsächlich nicht in der Lage ist, zwischen den drei Klassen zu unterscheiden.
- Metriken pro Klasse:
- Präzision: Der Anteil an Vorhersagen der angegebenen Klasse, die korrekt waren. Gemessen wird dies als die Anzahl der True Positives (korrekte Vorhersagen dieser Klasse), geteilt durch die Gesamtzahl der Vorhersagen dieser Klasse (einschließlich von False Positives).
- Abruf: Der Anteil an tatsächlichen Instanzen dieser Klasse, die korrekt vorhergesagt wurden (True Positives, geteilt durch die Gesamtzahl der Instanzen dieser Klasse im Validierungsdataset, einschließlich von False Negatives – Fälle, in denen das Modell fälschlicherweise eine andere Klasse vorhergesagt hat).
- F1-Score: Eine kombinierte Metrik für Präzision und Abruf (berechnet als harmonisches Mittel von Präzision und Abruf).
- Kombinierte (gewichtete) Metriken für Präzision, Abruf, und F1 für alle Klassen.
Wie bei der Regression umfassen die meisten Machine Learning-Frameworks Klassen, die Klassifizierungsmetriken berechnen können. Der folgende Code verwendet zum Beispiel die Klasse MulticlassClassificationEvaluator der Spark MLlib-Bibliothek.
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
# Inference predicted labels from validation data
predictions_df = model.transform(validation_df)
# Assume predictions_df includes a 'prediction' column with the predicted labels
# and a 'label' column with the actual known label values
# Use an evaluator to get metrics
accuracy = evaluator.evaluate(predictions_df, {evaluator.metricName:"accuracy"})
print("Accuracy:", accuracy)
labels = [0,1,2]
print("\nIndividual class metrics:")
for label in sorted(labels):
print ("Class %s" % (label))
precision = evaluator.evaluate(predictions_df, {evaluator.metricLabel:label,
evaluator.metricName:"precisionByLabel"})
print("\tPrecision:", precision)
recall = evaluator.evaluate(predictions_df, {evaluator.metricLabel:label,
evaluator.metricName:"recallByLabel"})
print("\tRecall:", recall)
f1 = evaluator.evaluate(predictions_df, {evaluator.metricLabel:label,
evaluator.metricName:"fMeasureByLabel"})
print("\tF1 Score:", f1)
overallPrecision = evaluator.evaluate(predictions_df, {evaluator.metricName:"weightedPrecision"})
print("Overall Precision:", overallPrecision)
overallRecall = evaluator.evaluate(predictions_df, {evaluator.metricName:"weightedRecall"})
print("Overall Recall:", overallRecall)
overallF1 = evaluator.evaluate(predictions_df, {evaluator.metricName:"weightedFMeasure"})
print("Overall F1 Score:", overallF1)
Bewerten von Modellen für das unüberwachte Clustering
Modelle für das unüberwachte Clustering weisen keine bekannten Beschriftungen mit dem Wert TRUE auf. Das Ziel des Clusteringmodells besteht darin, ähnliche Fälle auf der Grundlage ihrer Features in Clustern zusammenzufassen. Zum Bewerten eines Clusters benötigen Sie eine Metrik, die den Grad der Trennung zwischen den Clustern angibt. Sie können sich die in einem Cluster zusammengefassten Fälle als gezeichnete Punkte im mehrdimensionalen Raum vorstellen. Punkte im selben Cluster sollten nahe zusammenliegen und weit entfernt von Punkten in einem anderen Cluster sein.
Eine solche Metrik ist das Silhouettenmaß, die den quadrierten euklidischen Abstand berechnet und einen Hinweis auf die Konsistenz innerhalb von Clustern liefert. Die Silhouettenwerte können zwischen 1 und -1 liegen. Ein Wert nahe 1 bedeutet, dass die Punkte in einem Cluster nahe an den anderen Punkten desselben Clusters liegen und weit von den Punkten der anderen Cluster entfernt sind.
Die Spark MLlib-Bibliothek stellt die Klasse ClusteringEvaluator bereit, die den Silhouettenwert für die Vorhersagen eines Clusteringmodells berechnet, wie hier gezeigt:
from pyspark.ml.evaluation import ClusteringEvaluator
from pyspark.ml.linalg import Vectors
# Inference predicted labels from validation data
predictions_df = model.transform(validation_df)
# Assume predictions_df includes a 'prediction' column with the predicted cluster
# Use an evaluator to get metrics
evaluator = ClusteringEvaluator(predictionCol="prediction")
silhouetteVal = evaluator.evaluate(predictions_df)
print(silhouetteVal)