Beim maschinellen Lernen können Sie prädiktive Modellierung durch Klassifizierungsprobleme lösen. Für jede Beobachtung im Modell müssen Sie das Klassenlabel vorhersagen. Die Eingabedaten enthalten eine der folgenden Variablen: kategoriale Variablen oder kontinuierliche Variablen. Die Ausgabe wird jedoch immer eine kategoriale Variable enthalten. Wir können dieses Konzept anhand des folgenden Beispiels verstehen. Nehmen wir an, wir wollen das Wetter in der Nachbarschaft vorhersagen. Wir betrachten die Jahreszeit und die Wetterinformationen als Eingabemerkmale. Zu den Wetterinformationen gehören Temperatur, Windgeschwindigkeit, Luftfeuchtigkeit, bewölkt/sonnig. Wir werden eine Ausgabe generieren, ob es regnen wird oder nicht. In einem anderen Beispiel können wir vorhersagen, ob es sich bei einer E-Mail um Spam handelt oder nicht, indem wir die Informationen des Absenders und den Inhalt der E-Mail als Ausgabe berücksichtigen.

Verstehen des Log-Verlusts

Der Log-Verlust ist eine wesentliche Klassifizierungsmetrik für Vorhersagen, die auf Wahrscheinlichkeiten basieren. Obwohl die Interpretation der rohen Log-Loss-Werte eine knifflige Aufgabe ist, werden Sie feststellen, dass Log-Loss eine effektive Technik ist, um ein maschinelles Lernmodell mit einem anderen zu vergleichen. Denken Sie daran, dass Sie, um gute Vorhersagen für ein beliebiges Problem zu finden, den niedrigeren Log-Loss-Wert berücksichtigen sollten. Sie können den Log-Verlust auch als Kreuzentropieverlust oder logistischen Verlust bezeichnen.
Die Verlustfunktion ist nützlich für multinominale Modelle wie die logistische Regression und ihre Erweiterungen. Zu den Erweiterungen gehören neuronale Netze und andere Arten von Modellen. Mit anderen Worten, die Verlustfunktion ist die negative Log-Likelihood in einem logistischen Modell. Vorausgesetzt, das Modell liefert (y_pred) Wahrscheinlichkeiten für das Training der Daten (y_true).
Sie können log loss nur für zwei Labels und mehr definieren. Die Gleichung für den log-Verlust unter Berücksichtigung der ersten Stichprobe mit Wahrscheinlichkeitsschätzung p=Pr (y=1) und wahrem Label y∈{0,1} würde lauten:
Llog(y,p)=-(ylog(p)+(1-y)log(1-p))

Beispiele für Log Loss

Angenommen, die vorhergesagten Wahrscheinlichkeiten des Modells für drei Häuser sind [0,8, 0,4, 0,1]. Nur das letzte von all diesen Häusern wurde nicht verkauft. Daher werden Sie das Endergebnis aus diesen Eingaben numerisch als [1, 1, 0] darstellen.

Log Loss und Python

Im Folgenden werden wir verschiedene Arten von Verlustfunktionen für die konkrete Verlustfunktion besprechen. Wir werden Python für die Berechnung verwenden:

– Mean Squared Error Loss

Der mittlere quadratische Fehlerverlust (Mean Squared Error Loss) ist eine Regressionsverlustfunktion. Sie berechnen den MSE als Mittelwert der quadratischen Abweichung zwischen vorhergesagten Werten und tatsächlichen Werten. Unabhängig davon, welches Vorzeichen die vorhergesagten Werte und die tatsächlichen Werte haben, erhalten Sie immer ein positives Ergebnis. Der perfekte Wert wäre 0,0. Trotz der Tatsache, dass Sie einen negativen Wert machen können und den Verlustwert für den Optimierungsprozess der Maximierung verwenden, wird das Ergebnis minimal sein. Die folgende Python-Funktion wird den mittleren quadratischen Fehler berechnen. Außerdem können Sie eine Liste der vorhergesagten und tatsächlichen reell-wertigen Größen erstellen.
# mittleren quadratischen Fehler berechnen
def mittlerer_quadratischer_fehler(aktuell, vorhergesagt):
sum_square_error = 0.0
for i in range(len(actual)):
sum_square_error += (actual[i] – predicted[i])**2.0
mean_square_error = 1.0 / len(actual) * sum_square_error
return mittlerer_quadratischer_Fehler
Sie sollten die Funktion mittlerer quadratischer Fehler() verwenden, um den Fehlerverlust effizient zu implementieren.

– Kreuz-Entropie-Verlust (oder Log-Verlust)

Sie können den Kreuzentropieverlust als logarithmischen Verlust, Kreuzentropie, Log-Verlust oder logistischen Verlust bezeichnen. Er gibt an, dass jede Wahrscheinlichkeit, die Sie vorhersagen, mit dem tatsächlichen Klassenausgabewert als 0 oder 1 verglichen wird. Bei dieser Technik wird der Score berechnet. Dieser Score bestraft die Wahrscheinlichkeit aufgrund des Abstands zwischen Ausgabewert und erwartetem Wert. Die Art der Bestrafung wird logarithmisch sein. Die große Differenz wird einen großen Score enthalten, wie z. B. 0,9 oder 10. Kleinere Differenzen enthalten jedoch kleine Punktzahlen wie 0,1 oder 0,2.
Das Modell mit genauen Wahrscheinlichkeiten enthält einen logarithmischen Verlust oder eine Querentropie von 0,0. Dies zeigt an, dass der Cross-Entropie-Verlust minimal ist und kleinere Werte ein gutes Modell anstelle von größeren Werten darstellen. Unter allen Beispielen wird die Cross-Entropie für Zwei-Klassen-Vorhersagen oder binäre Probleme die durchschnittliche Cross-Entropie berechnen.
Die folgenden Python-Funktionen helfen Ihnen bei der Berechnung von Log Loss. Sie müssen diesen Pseudocode implementieren und die Werte 0 und 1 vergleichen und die Wahrscheinlichkeiten für Klasse 1 vorhersagen. Dadurch werden Sie in der Lage sein, den Log Loss zu berechnen:
from math import log

# binäre Kreuzentropie berechnen
def binary_cross_entropy(actual, predicted):
sum_score = 0.0
for i in range(len(actual)):
sum_score += actual[i] * log(1e-15 + predicted[i])
mean_sum_score = 1.0 / len(actual) * sum_score
return -mean_sum_score
Um den Fehler zu vermeiden, müssen wir einen kleinen Wert in den vorhergesagten Wahrscheinlichkeiten hinzufügen. Das bedeutet, dass der bestmögliche Verlust der Wert sein wird, der näher an Null liegt, aber er sollte nicht genau Null sein. Sie können die Kreuzentropie für die Mehrklassenklassifizierung berechnen. Basierend auf jeder Klasse sollten die Vorhersagen die vorhergesagten Möglichkeiten beinhalten und binäre Features enthalten. Dann ist die Kreuzentropie die Summe der durchschnittlichen und binären Merkmale aller Beispiele im Datensatz.
Die folgende Python-Funktion hilft Ihnen bei der Berechnung der Kreuzentropie der kodierten Werteliste. Sie hilft, die vorhergesagten Möglichkeiten und die kodierten Werte für jede Klasse zu vergleichen:
from math import log

# kategorische Kreuzentropie berechnen
def categorical_cross_entropy(actual, predicted):
sum_score = 0.0
for i in range(len(actual)):
for j in range(len(actual[i])):
sum_score += actual[i][j] * log(1e-15 + predicted[i][j])
mean_sum_score = 1.0 / len(actual) * sum_score
return -mean_sum_score
Sie sollten die Funktion log_loss() verwenden, um die Kreuzentropie effizient zu implementieren.

Fazit

Sie sollten die Fähigkeiten des Modells, das log-loss verwendet, wegen des niedrigen log-loss-Wertes und des Ungleichgewichtsdatensatzes vorsichtig interpretieren. Wenn Sie ein statistisches Modell erstellen, sollte es den Basis-Log-Loss-Wert in Abhängigkeit vom gegebenen Datensatz erreichen. Wenn es den Log-Score nicht erreicht, ist das trainierte statistische Modell ungenau und nicht hilfreich. In diesem Fall sollten Sie ein besseres Modell verwenden, um den Log-Verlust einer Wahrscheinlichkeit zu ermitteln.