Co to jest RMSE? Znany również jako MSE, RMD lub RMS. Jaki problem rozwiązuje?
Jeśli rozumiesz RMSE: (błąd średniokwadratowy), MSE: (błąd średniokwadratowy) RMD (odchylenie średniej kwadratowej) i RMS: (średnia kwadratowa), to prośba o bibliotekę do obliczenia tego za Ciebie jest niepotrzebnym przeprojektowaniem . Wszystkie te wskaźniki to pojedynczy wiersz kodu Pythona o długości maksymalnie 2 cali. Trzy metryki rmse, mse, rmd i rms są w swej istocie koncepcyjnie identyczne.
RMSE odpowiada na pytanie: „Jak podobne są średnio liczby list1
do list2
?”. Obie listy muszą mieć ten sam rozmiar. Chcę „zmyć szum pomiędzy dowolnymi dwoma danymi elementami, zmyć rozmiar zebranych danych i uzyskać odczucie zmiany pojedynczej liczby w czasie”.
Intuicja i ELI5 dla RMSE:
Wyobraź sobie, że uczysz się rzucać lotkami w tarczę do rzutek. Codziennie ćwiczysz przez godzinę. Chcesz dowiedzieć się, czy czujesz się lepiej, czy gorzej. Więc każdego dnia wykonujesz 10 rzutów i mierzysz odległość między tarczą a miejscem, w którym uderzyła twoja strzałka.
Robisz listę tych numerów list1
. Użyj średniego kwadratu błędu między odległościami w dniu 1 i a list2
zawierającym wszystkie zera. Zrób to samo w drugi i n-ty dzień. Otrzymasz pojedynczą liczbę, która, miejmy nadzieję, maleje z czasem. Kiedy Twój numer RMSE wynosi zero, za każdym razem trafiasz w dziesiątkę. Jeśli liczba rmse wzrośnie, sytuacja się pogarsza.
Przykład obliczenia średniej kwadratowej błędu w Pythonie:
import numpy as np
d = [0.000, 0.166, 0.333] #ideal target distances, these can be all zeros.
p = [0.000, 0.254, 0.998] #your performance goes here
print("d is: " + str(["%.8f" % elem for elem in d]))
print("p is: " + str(["%.8f" % elem for elem in p]))
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
rmse_val = rmse(np.array(d), np.array(p))
print("rms error is: " + str(rmse_val))
Które wydruki:
d is: ['0.00000000', '0.16600000', '0.33300000']
p is: ['0.00000000', '0.25400000', '0.99800000']
rms error between lists d and p is: 0.387284994115
Notacja matematyczna:
Glyph Legend: n
to cała dodatnia liczba całkowita reprezentująca liczbę rzutów. i
reprezentuje cały dodatni licznik całkowity, który wylicza sumę. d
oznacza idealne odległości, list2
zawierające wszystkie zera w powyższym przykładzie. p
oznacza wydajność, list1
w powyższym przykładzie. indeks górny 2 oznacza numeryczny kwadrat. d i jest i- tym indeksem d
. p i jest i- tym indeksem p
.
Rmse wykonano małymi krokami, aby można było je zrozumieć:
def rmse(predictions, targets):
differences = predictions - targets #the DIFFERENCEs.
differences_squared = differences ** 2 #the SQUAREs of ^
mean_of_differences_squared = differences_squared.mean() #the MEAN of ^
rmse_val = np.sqrt(mean_of_differences_squared) #ROOT of ^
return rmse_val #get the ^
Jak działa każdy krok RMSE:
Odejmowanie jednej liczby od drugiej daje odległość między nimi.
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
Jeśli pomnożymy dowolną liczbę razy siebie, wynik jest zawsze dodatni, ponieważ ujemny razy ujemny jest dodatni:
3*3 = 9 = positive
-30*-30 = 900 = positive
Dodaj je wszystkie, ale poczekaj, wtedy tablica z wieloma elementami miałaby większy błąd niż mała tablica, więc uśrednij je przez liczbę elementów.
Ale poczekaj, wyrównaliśmy je wszystkie wcześniej, aby wymusić na nich pozytywne wyniki. Cofnij szkody za pomocą pierwiastka kwadratowego!
To daje ci pojedynczą liczbę, która średnio reprezentuje odległość między każdą wartością z listy list1 a odpowiadającą jej wartością elementu list2.
Jeśli wartość RMSE spada w czasie, jesteśmy zadowoleni, ponieważ zmniejsza się wariancja .
RMSE nie jest najdokładniejszą strategią dopasowania linii, całkowita metoda najmniejszych kwadratów to:
Podstawowy błąd średniokwadratowy mierzy odległość w pionie między punktem a linią, więc jeśli dane mają kształt banana, płaskiego u dołu i stromego u góry, wówczas RMSE zgłosi większe odległości do punktów wysoko, ale małe odległości do punkty niskie, podczas gdy w rzeczywistości odległości są równoważne. Powoduje to pochylenie, w którym linia woli być bliżej punktów wyższych niż niskich.
Jeśli jest to problem, metoda całkowitej najmniejszych kwadratów rozwiązuje ten problem:
https://mubaris.com/posts/linear-regression
Błędy, które mogą złamać tę funkcję RMSE:
Jeśli na którejś z list wejściowych znajdują się wartości null lub nieskończoność, wyjściowa wartość rmse nie będzie miała sensu. Istnieją trzy strategie radzenia sobie z zerami / brakującymi wartościami / nieskończonościami na każdej z list: Zignoruj ten składnik, wyzeruj go lub dodaj najlepsze przypuszczenie lub jednolity losowy szum do wszystkich kroków czasowych. Każdy środek zaradczy ma swoje wady i zalety w zależności od tego, co oznaczają Twoje dane. Ogólnie rzecz biorąc, preferowane jest ignorowanie dowolnego komponentu z brakującą wartością, ale powoduje to odchylenie RMSE w kierunku zera, co sprawia, że myślisz, że wydajność poprawiła się, gdy tak naprawdę nie jest. Dodanie losowego szumu na podstawie najlepszego przypuszczenia może być preferowane, jeśli brakuje wielu wartości.
Aby zagwarantować względną poprawność danych wyjściowych RMSE, należy wyeliminować wszystkie wartości null / nieskończoności z danych wejściowych.
RMSE ma zerową tolerancję dla odstających punktów danych, które nie należą
Średnia kwadratowa kwadratów błędu polega na tym, że wszystkie dane są prawidłowe i wszystkie są liczone jako równe. Oznacza to, że jeden zbłąkany punkt w lewym polu całkowicie zrujnuje całe obliczenia. Aby poradzić sobie z punktami danych odstających i odrzucić ich ogromny wpływ po pewnym progu, zobacz Solidne estymatory, które tworzą próg odrzucania wartości odstających.