Что я ищу, если эта функция rmse реализована в библиотеке где-нибудь, возможно, в scipy или scikit-learn?
Ответ 2
Что такое RMSE? Также известный как MSE, RMD или RMS. Какую проблему это решает?
Если вы понимаете RMSE: (среднеквадратическая ошибка), MSE: (среднеквадратичная ошибка) RMD (среднеквадратическое отклонение) и RMS: (среднеквадратичное отклонение), то запрос библиотеки для вычисления этого значения для вас не требуется, Все эти метрики представляют собой одну строку кода Python длиной не более 2 дюймов. Три метрики rmse, mse, rmd и rms по своей сути концептуально идентичны.
RMSE отвечает на вопрос: "Как похоже, в среднем, число в list1
для list2
?". Два списка должны быть одинакового размера. Я хочу "стереть шум между любыми двумя заданными элементами, вымыть размер собранных данных и почувствовать, как со временем меняется одно число".
Интуиция и ELI5 для RMSE:
Представьте, что вы учитесь бросать дротики в дартс. Каждый день вы тренируетесь в течение одного часа. Вы хотите выяснить, становится ли вам лучше или хуже. Поэтому каждый день вы делаете 10 бросков и измеряете расстояние между яблочком и местом удара дротика.
Вы составляете список этих номеров list1
. Используйте среднеквадратичную ошибку между расстояниями в день 1 и 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
Математическая запись:
![root mean squared deviation explained]()
Легенда о глифе: n
- целое положительное целое число, представляющее количество бросков. i
представляет собой целое положительное целое число, которое перечисляет сумму. d
обозначает идеальные расстояния, а list2
содержит все нули в приведенном выше примере. p
обозначает производительность, list1
в приведенном выше примере. верхний индекс 2 обозначает числовой квадрат. d i - это i -й индекс d
. p i - это i -й индекс 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 имеет нулевой допуск для посторонних точек данных, которые не принадлежат
Среднеквадратичные квадраты ошибок основаны на правильности всех данных, и все они считаются равными. Это означает, что одна случайная точка в левом поле полностью испортит весь расчет. Чтобы обработать точки данных выбросов и отклонить их огромное влияние после определенного порога, см. надежные оценки, которые строят порог для отклонения выбросов.