我想编写R代码,每次运行后都会读取错误度量标准(例如MAE,MAPE,R2等)并将其存储在数据框中,并比较结果。
我在每次运行中都添加了更多的训练数据,并希望通过使用R代码而不是每次手动检查来交叉检查它如何改善/减少错误。
任何建议将不胜感激!
答案 0 :(得分:1)
这是一个非常笼统的问题,确切的答案取决于您要运行的模型。为了至少在某种程度上为您提供帮助,您需要了解所运行的每个拟合模型都具有特定的结构。例如,考虑以下内容:
# fix seed for reproducability
set.seed(42)
# generate fake data:
x = rnorm(100000)
y = x + 5*rnorm(100000)
df <- data.frame(y,x)
看看线性模型的摘要方法返回的结果(也请浏览names(lm(y~x, data = df)))
):
names(summary(lm(y~x, data = df)))
[1] "call" "terms" "residuals" "coefficients" "aliased" "sigma" "df" "r.squared"
[9] "adj.r.squared" "fstatistic" "cov.unscaled"
您看到返回了R ^ 2和调整后的R ^ 2。如果您对此数量感兴趣,则可以多次拟合模型,提取该数量,然后以所需的任何方式存储。泰勒在您的示例中,假设我们要为直到给定索引的每次数据提取R ^ 2,我们可以定义以下函数:
get_rsq <- function(ind){
summary(lm(y~x, data = df[1:ind,]))$r.squared
}
并运行
sapply(seq(1000, nrow(df), 10000), get_rsq)
[1] 0.05720826 0.04352535 0.03907049 0.03851629 0.04007696 0.04063812 0.04058338 0.03924757 0.03934495 0.03926088
在使用seq(1000, nrow(df), 10000)
来增加数据框中的索引的情况下获得每次拟合的R ^ 2,从而增加了用于拟合模型的数据量(每次迭代增加10000)。请确保数据已改组。
请注意,以与我定义get_rsq
相同的方式,您可以定义自己的函数以从拟合模型中提取所需的任何数量。
有许多现有的程序包可以帮助进行这种练习。例如,查看caret软件包,或阅读一些blog posts。根据您的应用程序,具有功能tidy
和glance
的{{3}}可能也会有所帮助。例如,以下内容为您提供了在数据框中通过概览收集的所有摘要统计信息,每个增量数据分区都有一行:
library(dplyr)
library(broom)
bind_rows(lapply(seq(1000, nrow(df), 10000), function(x) glance(lm(y~x, data = df[1:x,])) ))
r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC deviance df.residual
1 0.05720826 0.05626358 0.9896907 60.55827 1.778778e-14 2 -1407.575 2821.15 2835.873 977.5288 998
2 0.04352535 0.04343838 0.9734098 500.47514 1.924959e-108 2 -15310.872 30627.74 30649.662 10420.8975 10998
3 0.03907049 0.03902473 0.9768702 853.75895 5.281910e-184 2 -29305.279 58616.56 58640.414 20037.8762 20998
4 0.03851629 0.03848528 0.9805112 1241.75589 9.551206e-267 2 -43375.978 86757.96 86782.980 29801.5469 30998
5 0.04007696 0.04005355 0.9802690 1711.67402 0.000000e+00 2 -57358.419 114722.84 114748.703 39396.0941 40998
6 0.04063812 0.04061931 0.9793373 2160.25156 0.000000e+00 2 -71300.030 142606.06 142632.579 48912.2650 50998
7 0.04058338 0.04056766 0.9785619 2580.21927 0.000000e+00 2 -85232.308 170470.62 170497.672 58410.6772 60998
8 0.03924757 0.03923404 0.9778149 2900.32974 0.000000e+00 2 -99150.760 198307.52 198335.030 67882.7501 70998
9 0.03934495 0.03933309 0.9789331 3317.38429 0.000000e+00 2 -113208.374 226422.75 226450.655 77621.2003 80998
10 0.03926088 0.03925032 0.9789433 3718.65928 0.000000e+00 2 -127185.787 254377.57 254405.830 87206.1159 90998