【发布时间】:2018-04-27 14:01:21
【问题描述】:
我有一些数据想要比较几个不同的线性模型。我可以使用caTools::sample.split() 获得一个训练/测试集。
如果我使用来自同一样本的不同训练/测试集,我想看看模型会如何变化。如果我不使用set.seed(),我应该在每次调用sample.split 时得到不同的集合。
我现在正在使用lapply 调用该函数一定次数:
library(data.table)
library(caTools)
dat <- as.data.table(iris)
dat_list <- lapply(1:20, function(z) {
sample_indices <- sample.split(dat$Sepal.Length, SplitRatio = 3/4)
inter <- dat
inter$typ <- "test"
inter$typ[sample_indices] <- "train"
inter$set_no <- z
return(as.data.table(inter))})
为了比较系数:
coefs <- sapply(1:20, function(z){
m <- lm(Sepal.Length ~ Sepal.Width, data = dat_list[[z]][typ == "train"])
return(unname(m$coefficients))
})
在预测测试集中的值时,可以编辑最后几行以返回 RMS 误差 (typ=="test")。
我想知道是否有更好的方法来做到这一点?
【问题讨论】:
-
更好的方法是什么?多次拆分数据?比较系数?接近问题?我会说你很好,如果你对结果感到满意,那就继续吧!您可能对 k 折交叉验证感兴趣 - 它更常见并且具有相似的目标。您可以使用
caret自动完成。 -
谢谢!我有兴趣有效地拆分数据(我的实际数据集非常大)。我也很想知道是否有以这种方式比较模型的标准方法 - 我会查找您提到的 k-fold 方法。遗憾的是,我的统计知识很差。
标签: r linear-regression