Що таке RMSE? Також відомий як MSE, RMD або RMS. Яку проблему вона вирішує?
Якщо ви розумієте RMSE: (середньоквадратична помилка), MSE: (середня помилка у квадраті) RMD (середньоквадратичне відхилення) та RMS: (коренева середня квадратура), то просити бібліотеку обчислити це для вас непотрібно надмірно інженерно . Усі ці показники - це один рядок коду python довжиною не більше 2 дюймів. Три метрики rmse, mse, rmd та rms є основою концептуально однаковою.
RMSE відповідає на питання: "Наскільки в середньому подібні числа list1
до list2
". Два списки повинні бути однакового розміру. Я хочу "змити шум між будь-якими двома заданими елементами, змити розмір зібраних даних і отримати відчуття часу для зміни одного числа".
Інтуїція та ELI5 для RMSE:
Уявіть, що ви навчаєтесь кидати дротики на дошці дартса. Щодня ви тренуєтесь протягом однієї години. Ви хочете з’ясувати, чи вам стає краще, чи стає гірше. Тож щодня робиш 10 кидків і вимірюєш відстань між бичачим оком та місцем, куди потрапив твій дротик.
Ви складаєте список цих чисел list1
. Використовуйте середньоквадратичну помилку між відстанями в день 1 і list2
містить усі нулі. Зробіть те ж саме на 2-й і n-й дні. Ви отримаєте єдине число, яке, сподіваємось, зменшується з часом. Коли номер 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 i - i-й показник p
.
РМС робиться невеликими кроками, щоб його можна було зрозуміти:
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 - не найточніша стратегія підгонки ліній, загальна кількість найменших квадратів:
Помилка кореневої середньої площі вимірює вертикальну відстань між точкою та лінією, тому, якщо ваші дані мають форму банана, плоского біля дна та крутого біля верху, то RMSE повідомляє про великі відстані до високих точок, але на короткі відстані до точки низькі, коли фактично відстані еквівалентні. Це спричиняє перекос, коли лінія воліє бути ближче до точок високим, ніж низьким.
Якщо це проблема, метод усунення найменших квадратів виправляє це:
https://mubaris.com/posts/linear-regression
Отримані функції, які можуть порушити цю функцію RMSE:
Якщо в будь-якому списку вхідних даних є нулі або нескінченність, то значення rmse виводу не має сенсу. У будь-якому списку є три стратегії боротьби з нулями / відсутніми значеннями / нескінченностями: ігноруйте цей компонент, занулюйте його або додайте найкращі здогадки або рівномірний випадковий шум у всі кроки часу. Кожен засіб захисту має свої плюси і мінуси залежно від того, що означають ваші дані. Взагалі переважна ігнорування будь-якого компонента з відсутнім значенням, але це зміщує RMSE до нуля, змушуючи вас вважати, що продуктивність покращилася, коли вона насправді не має. Додавання випадкового шуму за найкращою здогадкою може бути кращим, якщо є багато відсутніх значень.
Для того, щоб гарантувати відносну правильність виходу RMSE, ви повинні усунути всі нулі / нескінченності з вхідних даних.
RMSE має нульовий допуск для зовнішніх точок даних, які не належать
Середньоквадратичні квадрати помилок залежать від правильності всіх даних, а всі вважаються рівними. Це означає, що одна бродяча точка, яка виходить у лівому полі, повністю знищить весь розрахунок. Щоб обробити чужі точки даних та відхилити їх величезний вплив після певного порогу, див. Надійні оцінки, які створюють поріг для звільнення людей, що втратили життя.