1

我创建了一个项目,在其中提取数据集,将其拆分到 Dev-Val 中,然后将这些用于大约 12 个备选模型候选者,我在这些候选模型中进行 dev 训练并计算评分的 Dev 和 Val 数据集的性能统计数据。

现在我想用不同的拆分多次运行这个流程,所以我可以看到这个模型有多稳定。我通过添加一个ranuni(种子)来拆分数据。

我想做的是运行一个循环,使用不同的种子进行拆分,然后执行训练模型并对 Dev 和 Val 数据集进行评分的流程。

无论如何在EG中做这样的循环吗?我是否需要创建存储过程以便我可以从 SAS Base 代码执行它们?我遇到的问题是,我可以循环运行的 SAS Base 代码在服务器上运行,并且对客户端上的 EG 项目没有“知识”。

有没有人试过这个?欢迎任何提示。

4

1 回答 1

2

听起来你想做一些离引导模拟不太远的事情。不完全相同,但概念是存在的:重复地重新采样相同的数据。

因此,我会用同样的技术来做。(注意,我不是在评论你是否应该真正按照你的要求去做 - 有很多理由不这样做;回归和机器学习格言 #1 永远不会将训练集与测试集与验证集混合在一起,因为你以错误的信心告终)。

PROC SURVEYSELECT很擅长做这件事。该领域的开创性论文是David Cassell 的Don't be LOOPy,并且是这样的。

假设您正在对sashelp.class. 您正在随机化而不考虑任何分层。

proc surveyselect data=sashelp.class
  out=class_sample
  seed=12345
  method=SRS /* This is different from bootstrapping: without replacement */
  n=15 /* you want 15 in your training set and 4 in your validation set */
  rep=100 /* you want 100 replicates, ie, you want to test it 100 times */
  outall /* this outputs all 19 to the dataset */
;
run;

这使得数据集具有 19*100 次重复。 sample=1是训练集数据行并且sample=0是验证集行。

现在,当您进行回归和分析时,您只需添加by replicate;您所做的一切。这种方式比其他方式(宏循环或类似的东西)运行得更快,而且代码很少。

您应该能够将其集成到您的流程中而无需太多更改,并且您使用 EG 并不重要。这主要只是改变了初始输入数据步。

于 2014-09-23T14:26:54.530 回答