O que é o RMSE? Também conhecido como MSE, RMD ou RMS. Qual problema isso resolve?
Se você entende RMSE: (erro quadrático médio da raiz), MSE: (erro quadrático médio) RMD (desvio quadrático médio da raiz) e RMS: (quadrado quadrático médio da raiz), pedir uma biblioteca para calcular isso para você é um excesso de engenharia desnecessário . Todas essas métricas são uma única linha de código python com no máximo duas polegadas de comprimento. As três métricas rmse, mse, rmd e rms são conceitualmente idênticas.
RMSE responde à pergunta: "Como semelhante, em média, são os números em list1
que list2
?". As duas listas devem ter o mesmo tamanho. Quero "eliminar o ruído entre dois elementos, reduzir o tamanho dos dados coletados e obter um número único de alterações ao longo do tempo".
Intuição e ELI5 para RMSE:
Imagine que você está aprendendo a jogar dardos em um dardo. Todos os dias você pratica por uma hora. Você quer descobrir se está melhorando ou piorando. Então, todos os dias, você faz 10 jogadas e mede a distância entre o alvo e o local onde o seu dardo bate.
Você faz uma lista desses números list1
. Use o erro médio quadrático da raiz entre as distâncias no dia 1 e a list2
contendo todos os zeros. Faça o mesmo no segundo e no nono dias. O que você obterá é um número único que, esperançosamente, diminui com o tempo. Quando seu número RMSE é zero, você sempre bate em bullseyes. Se o número rmse aumentar, você está piorando.
Exemplo no cálculo do erro quadrático médio raiz no python:
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))
Que imprime:
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
A notação matemática:
Legenda do glifo: n
é um número inteiro positivo inteiro que representa o número de jogadas. i
representa um contador inteiro positivo inteiro que enumera soma. d
representa as distâncias ideais, list2
contendo todos os zeros no exemplo acima. p
significa desempenho, list1
no exemplo acima. sobrescrito 2 significa numérico ao quadrado. d i é o i-ésimo índice de d
. p i é o i-ésimo índice de p
.
O rmse é feito em pequenas etapas para que possa ser entendido:
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 ^
Como todas as etapas do RMSE funcionam:
Subtrair um número de outro fornece a distância entre eles.
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
Se você multiplicar qualquer número vezes, o resultado será sempre positivo porque os negativos são negativos:
3*3 = 9 = positive
-30*-30 = 900 = positive
Adicione todos eles, mas espere, então uma matriz com muitos elementos teria um erro maior que uma matriz pequena; portanto, calcule a média pelo número de elementos.
Mas espere, nós combinamos todos eles antes para forçá-los positivos. Desfazer o dano com uma raiz quadrada!
Isso deixa você com um único número que representa, em média, a distância entre cada valor da lista1 e o valor correspondente do elemento da lista2.
Se o valor RMSE diminuir ao longo do tempo, ficaremos felizes porque a variação está diminuindo.
O RMSE não é a estratégia de ajuste de linha mais precisa, o total de mínimos quadrados é:
O erro quadrático médio da raiz mede a distância vertical entre o ponto e a linha. Portanto, se seus dados tiverem o formato de uma banana, plana perto da parte inferior e íngreme perto da parte superior, o RMSE reportará maiores distâncias para pontos altos, mas distâncias curtas para pontos baixos quando de fato as distâncias são equivalentes. Isso causa uma inclinação onde a linha prefere estar mais próxima dos pontos alto do que baixo.
Se este for um problema, o método dos mínimos quadrados total corrige isso:
https://mubaris.com/posts/linear-regression
Pegadinhas que podem quebrar essa função RMSE:
Se houver nulos ou infinito em qualquer lista de entrada, o valor rmse de saída não fará sentido. Existem três estratégias para lidar com valores nulos / valores ausentes / infinitos nas duas listas: ignore esse componente, zere-o ou adicione uma melhor estimativa ou um ruído aleatório uniforme a todos os timesteps. Cada remédio tem seus prós e contras, dependendo do significado dos seus dados. Em geral, é preferível ignorar qualquer componente com um valor ausente, mas isso leva o RMSE a zero, fazendo com que você pense que o desempenho melhorou quando realmente não. Adicionar ruído aleatório com uma melhor estimativa pode ser preferido se houver muitos valores ausentes.
Para garantir a relativa correção da saída do RMSE, você deve eliminar todos os nulos / infinitos da entrada.
O RMSE tem tolerância zero para pontos de dados externos que não pertencem
Os quadrados dos erros quadráticos médios da raiz baseiam-se em todos os dados corretos e todos são contados como iguais. Isso significa que um ponto perdido no campo esquerdo vai arruinar totalmente todo o cálculo. Para lidar com pontos de dados discrepantes e descartar sua tremenda influência após um certo limite, consulte Estimadores robustos que criam um limite para a discrepância de discrepantes.