火车&使用不同的Dev-Val分数多次得分回归

时间:2014-09-23 08:24:49

标签: sas enterprise-guide

我创建了一个项目,我在其中提取数据集,将其拆分为Dev-Val,然后将其用于12个替代模型候选项,我在dev上进行训练并计算得分Dev和Val数据集的性能统计数据。

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

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

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

以前有人试过这个吗?任何提示都会受到欢迎。

1 个答案:

答案 0 :(得分:2)

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

因此,我会用同样的技术做到这一点。 (注意,我不是在评论你是否应该真正做你要求的事情 - 有很多理由不这样做;回归和机器学习格言#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都无关紧要。这主要只是改变了初始输入datastep。