验证测试数据的准确性

Posted

技术标签:

【中文标题】验证测试数据的准确性【英文标题】:Validate Accuracy of Test Data 【发布时间】:2019-12-04 16:08:13 【问题描述】:

我已将我的模型与我的训练数据进行了拟合,并使用 r 平方测试了模型的准确性。

但是,我想用我的测试数据来测试模型的准确性,该怎么做呢?

我的预测值是连续的。对此非常陌生,因此愿意接受建议。

LR_swim <- lm(racetime_mins ~ event_month +gender + place +
             clocktime_mins +handicap_mins +
              Wind_Speed_knots+ 
             Air_Temp_Celsius +Water_Temp_Celsius +Wave_Height_m,
               data = SwimmingTrain) 
           family=gaussian(link = "identity")
summary(LR_swim)
rsq(LR_swim) #Returns-  0.9722331

#Predict Race_Time Using Test Data
 pred_LR <- predict(LR_swim, SwimmingTest, type ="response")
#Add predicted Race_Times back into the test dataset.
SwimmingTest$Pred_RaceTime <- pred_LR

【问题讨论】:

准确率是分类变量建模时的一个指标。因此,如果您在使用线性回归时将模型中的非分类变量作为因变量,则 R^2 是正确的度量。它只不过是解释的平方和与总平方比之比。它为您提供在 OLS 假设下的数据拟合性能。 一个直观的度量标准是Nash-Sutcliffe coefficient,虽然在环境科学之外可能并不常见。从本质上讲,它衡量您的模型预测观察结果的程度,并且与 R² 密切相关。它在topmodel 包中实现为NSEff。您传递您的观察和预测,该函数返回区间 (-∞,1] 中的值,其中 1 表示完美预测。 但从广义上讲,您似乎对cross validation 感兴趣。 @maydin 感谢您的回复,您知道如何将此方法应用于我在 r 中的测试集吗? IE。如何在我的代码中为“pred_LR”运行 rsquared @Lyngbakr 感谢您的回复,我也会调查一下。 【参考方案1】:

首先,正如 cmets 中已经指出的那样,accuracy 这个术语实际上是为分类问题保留的。您实际上指的是模型的性能。事实上,对于回归问题(比如你的问题),有几个这样的性能指标可用。

无论好坏,R^2 仍然是几个实现中的标准度量;尽管如此,记住我所争论的elsewhere 可能会有所帮助:

整个 R-squared 概念实际上直接来自统计领域,重点是解释性模型,它在机器学习环境中几乎没有用处,重点显然是预测模型;至少 AFAIK,除了一些非常入门的课程之外,我从来没有(我的意思是 从来没有 ...)看到 R 平方用于任何类型的性能评估的预测建模问题;流行的机器学习介绍,例如 Andrew Ng 在 Coursera 的Machine Learning,甚至懒得提及它也不是偶然的。而且,正如上面Github thread 中所述(强调添加):

特别是在使用 test 集时,我有点不清楚 R^2 的含义。

我当然同意。

还有其他几种性能指标可以说更适合预测任务,比如你的;并且它们中的大多数都可以用一行简单的 R 代码来实现。所以,对于一些虚拟数据:

preds <- c(1.0, 2.0, 9.5)
actuals <- c(0.9, 2.1, 10.0)

mean squared error (MSE) 很简单

mean((preds-actuals)^2)
# [1] 0.09

而 mean absolute error (MAE) 是

mean(abs(preds-actuals))
# [1] 0.2333333

root mean squared error (RMSE) 只是 MSE 的平方根,即:

sqrt(mean((preds-actuals)^2))
# [1] 0.3

可以说,这些措施对于评估未见数据的性能更有用。最后两个具有与原始数据相同规模的额外优势(MSE 不是这种情况)。

【讨论】:

很好的解释。有一件重要的事情需要澄清,MSE、MAE 和 RMSE 是预测能力的指标,而不是拟合性能。但是有人问我猜的预测能力指标,这就是她将 R2 与准确性混淆的原因。这使得这个答案是正确的。 @desertnaut 非常感谢我们提供的信息丰富的回答,R^2 值能否以相同的方式计算,使用简单的 r 脚本,例如用于 MSE、MAE 和 RMSE 的那些? @KateEnglish 见Function to calculate R2 (R-squared) in R

以上是关于验证测试数据的准确性的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Keras 中使用前馈神经网络进行单独的训练、验证和测试数据集可以获得 100% 的准确率?

BI之报表测试总结

ChatGPT解开了我一直以来对自动化测试的疑惑

ChatGPT解开了我一直以来对自动化测试的疑惑

ChatGPT解开了我一直以来对自动化测试的疑惑

ChatGPT解开了我一直以来对自动化测试的疑惑