W uczeniu maszynowym, można rozwiązać modelowanie predykcyjne poprzez problemy klasyfikacji. Dla każdej obserwacji w modelu, musisz przewidzieć etykietę klasy. Dane wejściowe będą zawierały dowolną z następujących zmiennych: zmienne kategoryczne lub zmienne ciągłe. Jednak dane wyjściowe zawsze będą zawierały zmienną kategoryczną. Możemy zrozumieć tę koncepcję na następującym przykładzie. Załóżmy, że przewidujemy pogodę w okolicy. Rozważymy porę roku i informacje o pogodzie jako cechy wejściowe. Informacje o pogodzie będą zawierać temperaturę, prędkość wiatru, wilgotność, zachmurzenie/słońce. Wygenerujemy dane wyjściowe, czy będzie padać czy nie. W innym przykładzie, możemy przewidzieć czy email jest spamem czy nie, biorąc pod uwagę informacje o nadawcy i treść emaila jako dane wyjściowe.

Zrozumienie utraty logów

Utrata logów jest istotną metryką klasyfikacji dla przewidywań opartych na prawdopodobieństwach. Chociaż interpretacja surowych wartości log-loss jest trudnym zadaniem, można uznać log-loss za efektywną technikę porównywania jednego modelu uczenia maszynowego z drugim. Należy pamiętać, że aby znaleźć dobre prognozy dla dowolnego problemu, należy wziąć pod uwagę niższą wartość log-loss. Stratę logarytmiczną można również określić jako stratę entropii krzyżowej lub stratę logistyczną.
Funkcja straty jest przydatna dla modeli wielomianowych, takich jak regresja logistyczna i jej rozszerzenia. Rozszerzenia te obejmują sieci neuronowe i inne typy modeli. Innymi słowy, funkcja straty jest ujemnym log-likelihood w modelu logistycznym. Pod warunkiem, że model zwraca (y_pred) prawdopodobieństwa dla szkolenia danych (y_true).
Można zdefiniować log loss tylko dla dwóch etykiet i więcej. Równanie dla log loss, biorąc pod uwagę pierwszą próbkę z oszacowaniem prawdopodobieństwa p=Pr (y=1) i prawdziwą etykietą y∈{0,1} byłoby:
Llog(y,p)=-(ylog(p)+(1-y)log(1-p))

Przykłady strat logarytmicznych

Załóżmy, że przewidywane prawdopodobieństwa modelu dla trzech domów są równe [0.8, 0.4, 0.1]. Tylko ostatni z tych domów nie został sprzedany. Dlatego numerycznie przedstawisz końcowy wynik z tych danych wejściowych jako [1, 1, 0].

Straty logarytmiczne i Python

Poniżej omówimy różne rodzaje funkcji straty dla konkretnej funkcji straty. Do obliczeń będziemy używać Pythona:

– Strata średniokwadratowa (Mean Squared Error Loss)

Strata średniokwadratowa jest funkcją straty regresji. Obliczysz MSE jako średnią kwadratową wariancji między wartościami przewidywanymi a rzeczywistymi. Bez względu na to, jaki znak zawierają wartości przewidywane i wartości rzeczywiste, zawsze otrzymasz wynik dodatni. Idealną wartością byłoby 0,0. Pomimo faktu, że możesz zrobić ujemny wynik i wykorzystać wartość straty do procesu optymalizacji maksymalizacji, wynik będzie minimalny. Poniższa funkcja Pythona obliczy błąd średniokwadratowy. Co więcej, możesz stworzyć listę przewidywanych i rzeczywistych wielkości o rzeczywistej wartości.
# obliczyć błąd średniokwadratowy
def mean_squared_error(actual, predicted):
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 mean_square_error
Powinieneś użyć funkcji mean squared error() aby efektywnie zaimplementować stratę błędu.

– Strata entropii krzyżowej (lub strata logiczna)

Możesz odnieść się do straty entropii krzyżowej jako straty logarytmicznej, entropii krzyżowej, straty logicznej lub straty logistycznej. Wskazuje ona, że każde prawdopodobieństwo, które przewidujesz, porównuje się z rzeczywistą wartością wyjściową klasy jako 0 lub 1. Technika ta oblicza wynik. Ten wynik będzie karał prawdopodobieństwo z powodu odległości pomiędzy wartością wyjściową a wartością oczekiwaną. Charakter kary będzie logarytmiczny. Duża różnica będzie zawierać ogromny wynik, taki jak 0.9 lub 10. Natomiast mniejsze różnice będą zawierały małe punkty, takie jak 0.1 lub 0.2.
Model z dokładnym prawdopodobieństwem będzie zawierał stratę logiczną lub entropię krzyżową równą 0,0. Wskazuje to, że strata entropii krzyżowej jest minimalna, a mniejsze wartości będą reprezentować dobry model, a nie większe. Spośród wszystkich przykładów, entropia krzyżowa dla predykcji dwuklasowej lub problemów binarnych będzie obliczać średnią entropię krzyżową.
Poniższe funkcje Pythona pomogą Ci obliczyć Log Loss. Musisz zaimplementować ten pseudokod i porównać wartości 0 i 1 oraz przewidzieć prawdopodobieństwa dla klasy 1. W ten sposób będziesz w stanie obliczyć Log Loss:
from math import log

# oblicz binarną entropię krzyżową
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
Aby uniknąć błędu, musimy dodać małą wartość w przewidywanych prawdopodobieństwach. Oznacza to, że najlepszą możliwą stratą będzie wartość bliższa zeru, ale nie powinna być dokładnie zerowa. Możesz obliczyć cross-entropię dla klasyfikacji wieloklasowej. W oparciu o każdą klasę, przewidywania powinny zawierać przewidywane możliwości i zawierać cechy binarne. Następnie, entropia krzyżowa będzie sumą średnich i binarnych cech wszystkich przykładów w zbiorze danych.
Poniższa funkcja Pythona pomoże Ci obliczyć entropię krzyżową listy zakodowanych wartości. Pomoże ona porównać przewidywane możliwości i zakodowane wartości dla każdej klasy:
from math import log.

# oblicz kategoryczną entropię krzyżową
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
Powinieneś użyć funkcji log_loss(), aby efektywnie zaimplementować entropię krzyżową.

Wnioski

Powinieneś ostrożnie interpretować umiejętności modelu używając log-loss ze względu na niską wartość log-loss i niezrównoważony zestaw danych. Podczas tworzenia modelu statystycznego, powinien on osiągnąć bazowy wynik log-loss w zależności od danego zbioru danych. Jeśli nie osiągnie on wyniku log-loss, wytrenowany model statystyczny jest niedokładny i nie jest pomocny. W takim przypadku powinieneś użyć lepszego modelu, aby znaleźć log loss prawdopodobieństwa.