我对目标变量V1
进行了V12
到Wavelength
的数字要素观察。我想计算Vx
列之间的RMSE。数据格式如下。
每个变量“Vx”以5分钟的间隔测量。我想计算所有Vx变量观测值之间的RMSE,我该怎么做?
这是我找到的链接,但我不确定如何获得y_pred: https://www.kaggle.com/wiki/RootMeanSquaredError
对于下面提供的链接,我认为我没有预测值: http://heuristically.wordpress.com/2013/07/12/calculate-rmse-and-mae-in-r-and-sas/
答案 0 :(得分:14)
以下功能将为您提供RMSE:
RMSE = function(m, o){
sqrt(mean((m - o)^2))
}
m
用于模型(拟合)值,o
用于观察(真实)值。
答案 1 :(得分:4)
为了您的帮助,只需编写以下功能:
#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)
我希望它有所帮助。
答案 2 :(得分:4)
RMSE :(均方根误差),MSE :(均值平方误差)和RMS :(均方根平方)都是数学技巧,可以感受两个数字列表之间随时间的变化。
RMSE提供一个回答问题的单一数字:“list1到list2中的数字平均有多相似?”。这两个列表必须大小相同。我想“清除任何两个给定元素之间的噪音,清除所收集数据的大小,并获得一个数字随时间变化的感觉”。
想象一下,你正在学习在飞镖盘上投掷飞镖。每天练习一小时。你想知道你是变得更好还是变得更糟。因此,每天你进行10次投掷并测量靶心与飞镖击中的距离。
您列出了这些数字。使用第1天距离与包含全零的列表之间的均方根误差。在第2天和第n天也这样做。你会得到的是一个数字,希望随着时间的推移而减少。当你的RMSE数为零时,你每次都会击中靶心。如果数量上升,你的情况会越来越糟。
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")
打印哪些:
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
均方根误差测量点与线之间的垂直距离,因此如果您的数据形状像香蕉,靠近底部平坦并且靠近顶部陡峭,那么RMSE将向高点报告更远的距离,但是实际距离相等时,距离点很短。这会引起偏斜,使得线更倾向于接近高于低的点。
如果这是一个问题,总体最小二乘法修复了这个问题:https://mubaris.com/2017-09-28/linear-regression-from-scratch
如果任一输入列表中都有空值或无穷大,则输出rmse值将没有意义。在任一列表中有三种处理空值/缺失值/无穷大的策略:忽略该组件,将其归零或为所有时间步长添加最佳猜测或均匀随机噪声。每种补救措施都有其优缺点,具体取决于数据的含义。通常忽略任何具有缺失值的组件是优选的,但是这会使RMSE偏向零,这使得您认为性能已经提高了。如果存在大量缺失值,则可以优选在最佳猜测上添加随机噪声。
为了保证RMSE输出的相对正确性,必须从输入中消除所有空值/无穷大。
均方根误差平方依赖于所有正确的数据,并且所有数据都被计为相等。这意味着在左场出局的一个迷路点将完全破坏整个计算。要处理异常数据点并在某个阈值后忽略它们的巨大影响,请参阅构建解除异常值阈值的稳健估计量。
答案 3 :(得分:0)
您可以编写自己的函数,也可以使用包含RMSE函数的hydroGOF软件包。 http://www.rforge.net/doc/packages/hydroGOF/rmse.html
关于你的y_pred你首先需要一个产生它们的模型,否则你为什么要计算RMSE?
答案 4 :(得分:0)
您还可以在R中使用具有方法的库(mltools)
rmse(preds = NULL,实数= NULL,权重= 1,na.rm = FALSE)
参考:http://search.r-project.org/library/mltools/html/rmse.html
答案 5 :(得分:0)
您还可以对线性模型使用summary():
mod = lm(dependent ~ independent, data)
然后:
mod.error = summary(mod)
mod.error$sigma