你好
我认为 JMP pro 中有一个“制作验证列”功能,但我想知道如何使用 JSL 制作验证列(25% 训练和 75% 验证)常规 JMP ? 任何帮助表示赞赏。
以交互方式进行操作非常简单。 使用这种方法,JSL 步骤也应该是直截了当的。
创建一个名为验证的列。
用 0 填充整列。 零将表示训练集观察。
转到表 > 子集。
输入 0.75 的随机采样率(对于您的 75% 验证集)。
选中链接到原始数据表的框。
单击确定。
在子集表中,将验证字段从 0 更改为 1。
右键单击 1 并填充到表的末尾。
关闭子集表。
我对我的 JSL 很松散(没有考虑适当的范围以避免潜在问题),但它应该给你一个很好的开始。
dt=Current Data Table();
dt << New Column( "Validation",
Numeric,
"Nominal",
Format( "Best", 12 )
);
For Each Row (:Validation = 0);
dt << Subset(
Output Table("ValData"),
Linked,
Suppress formula evaluation( 0 ),
Sampling Rate( 0.75 ),
Selected columns only( 0 )
);
For Each Row (:Validation = 1);
Close( "ValData" );
dt << Clear Select;
请注意,这是严格随机分配的。 很多时候,您确实应该按目标变量对验证进行分层。
你好,
根据 Dan 关于随机分配的警告,这会做到(在这种情况下,对于 75% 的训练数据)。
dt << new column ("Validation", nominal, <<SET values=""> 0.75*nrow(dt))));
</SET>
为什么这样做:
1) (1::nrow)`块创建一个列向量 [1 2 3 ... nrow(dt)],并(使用 ` 运算符)将其转置为行向量 [1,2,3, .. .nrow(dt)]。
2) 然后,将此行向量与 0.75*nrow(dt) 进行比较。 如果大于则赋值为 1,否则赋值为 0。 所以,假设我们有 nrow(dt) = 100。 那么原始向量为:
[1, 2, 3, ... , 74, 75, 76, 77, ... 100]。 与75比较后,结果向量为:
[0, 0, 0, ... , 0, 0, 1, 1, ... 1]。 也就是说,75 个 0 后跟 25 个 1。
3) Randomshuffle ( ) 将向量的内容按随机顺序排列……所以 75 个 0 和 25 个 1(仍以 100 行表为例)将以随机方式遇到。
4) 最后,<< set values 消息用 75 个 0 和 25 个 1 的随机组合填充列。
FWIW,另一种交互方式是从主菜单中选择 Cols > New Columns...,然后填写如下对话框:

干杯,
布雷迪