R中的RMSE(均方根偏差)计算

Vic*_*227 6 statistics equation r

V1通过V12对目标变量进行数字特征观察Wavelength.我想计算Vx列之间的RMSE .数据格式如下.

每个变量"Vx"以5分钟的间隔测量.我想计算所有Vx变量观测值之间的RMSE,我该怎么做?

我对波长变量有不同的观察,每个变量,Vx以5分钟的间隔测量,

这是我找到的链接,但我不确定如何获得y_pred:https://www.kaggle.com/wiki/RootMeanSquaredError

对于下面提供的链接,我认为我没有预测值:http: //heuristically.wordpress.com/2013/07/12/calculate-rmse-and-mae-in-r-and-sas/

Fer*_*ndo 22

下面的函数将为您提供RMSE:

RMSE = function(m, o){
  sqrt(mean((m - o)^2))
}
Run Code Online (Sandbox Code Playgroud)

m用于模型(拟合)值,o用于观察(真实)值.

  • 当然,它们是合适的和观察到的值.你传递args的顺序无关紧要,因为你正在取决于差异的平方. (2认同)

Man*_*mar 12

为了您的帮助,只需编写以下函数:

#Fit a model
fit <- lm(Fertility ~ . , data = swiss)

# Function for Root Mean Squared Error
RMSE <- function(error) { sqrt(mean(error^2)) }
RMSE(fit$residuals)

# If you want, say, MAE, you can do the following:

# Function for Mean Absolute Error
mae <- function(error) { mean(abs(error)) }
mae(fit$residuals)
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。


Eri*_*ski 5

如何在R中执行RMSE

请参阅我在Python中执行RMSE的其他获得97票以上投票的规范答案:https ://stackoverflow.com/a/37861832/445131在下面,我将其解释为R代码的术语。

RMSE :(均方根误差),MSE :(均方根误差)和RMS :(均方根误差)都是数学技巧,可用来感知两个数字列表之间随时间的变化。

RMSE提供了一个回答以下问题的数字:“平均而言,列表1和列表2中的数字有多相似?”。这两个列表的大小必须相同。我想“消除任何两个给定元素之间的噪音,消除所收集数据的大小,并获得随时间变化的单一数字感觉”。

直觉和ELI5 for RMSE:

想象一下,您正在学习在飞镖板上扔飞镖。每天练习一小时。您想弄清楚自己是好还是坏。因此,每天您进行10次投掷,并测量靶心与飞镖击中点之间的距离。

您列出这些数字。使用第1天的距离与包含全零的列表之间的均方根误差。在第二天和第n天做同样的事情。您将获得一个希望随时间减少的数字。当您的RMSE数为零时,您每次都击中Bullseyes。如果数字上升,您将变得更糟。

计算R中均方根误差的示例:

cat("Inputs are:\n") 
d = c(0.000, 0.166, 0.333) 
p = c(0.000, 0.254, 0.998) 
cat("d is: ", toString(d), "\n") 
cat("p is: ", toString(p), "\n") 

rmse = function(predictions, targets){ 
  cat("===RMSE readout of intermediate steps:===\n") 
  cat("the errors: (predictions - targets) is: ", 
      toString(predictions - targets), '\n') 
  cat("the squares: (predictions - targets) ** 2 is: ", 
      toString((predictions - targets) ** 2), '\n') 
  cat("the means: (mean((predictions - targets) ** 2)) is: ", 
      toString(mean((predictions - targets) ** 2)), '\n') 
  cat("the square root: (sqrt(mean((predictions - targets) ** 2))) is: ", 
      toString(sqrt(mean((predictions - targets) ** 2))), '\n') 
  return(sqrt(mean((predictions - targets) ** 2))) 
} 
cat("final answer rmse: ", rmse(d, p), "\n") 
Run Code Online (Sandbox Code Playgroud)

哪些打印:

Inputs are:
d is:  0, 0.166, 0.333 
p is:  0, 0.254, 0.998 
===RMSE Explanation of steps:===
the errors: (predictions - targets) is:  0, -0.088, -0.665 
the squares: (predictions - targets) ** 2 is:  0, 0.007744, 0.442225 
the means: (mean((predictions - targets) ** 2)) is:  0.149989666666667 
the square root: (sqrt(mean((predictions - targets) ** 2))) is:  0.387284994115014 
final answer rmse:  0.387285 
Run Code Online (Sandbox Code Playgroud)

数学符号:

R中的RMSE解释

RMSE不是最准确的线拟合策略,总最小二乘法是:

均方根误差测量的是点与线之间的垂直距离,因此,如果您的数据形状像香蕉,底部附近平坦,顶部附近陡峭,则RMSE将报告距高点的距离更大,而距点的距离较短实际上是距离相等时的低点。这会导致偏斜,在该偏斜处,线倾向于更靠近高点而不是低点。

如果这是一个问题,则总最小二乘法可以解决此问题:https : //mubaris.com/posts/linear-regression/

可能会破坏此RMSE功能的陷阱:

如果在任何一个输入列表中都有空值或无穷大,则输出rmse值将变得没有意义。任一列表中都有三种处理空值/缺失值/无穷大的策略:忽略该组件,将其清零,或者在所有时间步长中添加最佳猜测或统一的随机噪声。每种补救措施都有其优缺点,具体取决于您的数据含义。通常,最好忽略任何缺少值的组件,但这会使RMSE趋于零,从而使您认为性能确实有所提高。如果存在很多缺失值,则最好在最佳猜测上添加随机噪声。

为了保证RMSE输出的相对正确性,您必须消除输入中的所有null / infinites。

RMSE对不属于其中的异常数据点具有零容忍度

均方根误差平方根依赖于所有正确的数据,并且所有均被视为相等。这意味着在左侧区域中出现的一个杂散点将完全破坏整个计算。若要处理离群数据点并在特定阈值后消除其巨大影响,请参阅稳健估计器,该估计器内置了消除离群值的阈值。