Что такое RMSE? Также известный как MSE, RMD или RMS. Какую проблему это решает?
Если вы понимаете RMSE: (среднеквадратическая ошибка), MSE: (среднеквадратичная ошибка) RMD (среднеквадратическое отклонение) и RMS: (среднеквадратичное отклонение), тогда запрос библиотеки для вычисления этого значения для вас не требуется. , Все эти метрики представляют собой одну строку кода Python длиной не более 2 дюймов. Три метрики rmse, mse, rmd и rms по своей сути концептуально идентичны.
RMSE отвечает на вопрос: «Насколько в среднем похожи цифры list1
наlist2
?». Два списка должны быть одинакового размера. Я хочу "стереть шум между любыми двумя данными элементами, вымыть размер собранных данных и почувствовать, как со временем меняется одно число".
Интуиция и ELI5 для RMSE:
Представьте, что вы учитесь бросать дротики в дартс. Каждый день вы тренируетесь в течение одного часа. Вы хотите выяснить, становится ли вам лучше или хуже. Поэтому каждый день вы делаете 10 бросков и измеряете расстояние между яблочком и местом удара дротика.
Вы делаете список этих чисел list1
. Используйте среднеквадратичную ошибку между расстояниями в день 1 и a, list2
содержащую все нули. Сделайте то же самое на 2-й и 9-й день. То, что вы получите, это одно число, которое, мы надеемся, со временем уменьшается. Когда ваш RMSE номер равен нулю, вы каждый раз ударяете по буллисам. Если число rmse увеличивается, вам становится хуже.
Пример расчета среднеквадратичной ошибки в 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))
Какие отпечатки:
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
Математическая запись:
Легенда о глифе: n
это целое положительное число, представляющее количество бросков. i
представляет собой целое положительное целое число, которое перечисляет сумму. d
обозначает идеальные расстояния, list2
содержащие все нули в приведенном выше примере. p
выступает за производительность, list1
в приведенном выше примере. верхний индекс 2 обозначает числовой квадрат. d i - это i -й индекс d
. р я - это -й индекс p
.
Rmse выполняется небольшими шагами, чтобы его можно было понять:
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 ^
Как работает каждый шаг RMSE:
Вычитание одного числа из другого дает вам расстояние между ними.
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
Если вы умножаете любое число раз на себя, результат всегда будет положительным, потому что отрицательное время отрицательным будет положительным:
3*3 = 9 = positive
-30*-30 = 900 = positive
Сложите их все, но подождите, тогда массив с множеством элементов будет иметь большую ошибку, чем маленький массив, поэтому усредните их по количеству элементов.
Но подождите, мы поставили их в квадрат раньше, чтобы они были позитивными. Отменить урон с квадратным корнем!
Это оставляет вас с одним числом, которое представляет в среднем расстояние между каждым значением list1 и соответствующим значением элемента list2.
Если значение RMSE уменьшается со временем, мы счастливы, потому что дисперсия уменьшается.
RMSE - не самая точная стратегия подгонки линии, наименьшее число квадратов:
Среднеквадратическая ошибка измеряет вертикальное расстояние между точкой и линией, поэтому, если ваши данные имеют форму банана, плоские у дна и крутые у вершины, то среднеквадратическое отклонение будет сообщать о больших расстояниях до высоких точек, но о коротких расстояниях до указывает низко, когда на самом деле расстояния эквивалентны. Это вызывает перекос, когда линия предпочитает быть ближе к точкам выше, чем ниже.
Если это проблема, метод общих наименьших квадратов исправляет это:
https://mubaris.com/posts/linear-regression
Поправки, которые могут нарушить эту функцию RMSE:
Если в любом из входных списков есть нули или бесконечность, то выходное значение rmse не будет иметь смысла. Есть три стратегии, чтобы иметь дело с нулями / отсутствующими значениями / бесконечностями в любом списке: игнорировать этот компонент, обнулять его или добавлять наилучшее предположение или равномерный случайный шум для всех временных шагов. Каждое лекарство имеет свои плюсы и минусы в зависимости от того, что означают ваши данные. В общем случае предпочтительным является игнорирование любого компонента с отсутствующим значением, но это смещает среднеквадратичное отклонение к нулю, заставляя думать, что производительность улучшилась, хотя на самом деле это не так. Добавление случайного шума по наилучшему предположению может быть предпочтительным, если имеется много пропущенных значений.
Чтобы гарантировать относительную правильность выходных данных RMSE, вы должны исключить все нули / бесконечности из входных данных.
RMSE имеет нулевой допуск для посторонних точек данных, которые не принадлежат
Среднеквадратичные квадраты ошибок основаны на правильности всех данных, и все они считаются равными. Это означает, что одна случайная точка в левом поле полностью испортит весь расчет. Чтобы обработать точки данных выбросов и отклонить их огромное влияние после определенного порога, см. Надежные оценки, которые строят порог для отклонения выбросов.