如何以编程方式在每次运行后比较回归ML模型的结果

时间:2018-07-03 13:17:00

标签: python r

我想编写R代码,每次运行后都会读取错误度量标准(例如MAE,MAPE,R2等)并将其存储在数据框中,并比较结果。

我在每次运行中都添加了更多的训练数据,并希望通过使用R代码而不是每次手动检查来交叉检查它如何改善/减少错误。

任何建议将不胜感激!

1 个答案:

答案 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。根据您的应用程序,具有功能tidyglance的{​​{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