保留原始分布的子集创建如果我有一个包含连续变量的数据表,并且我想创建几个与原始表保持相同分布的子集,我该怎么做?
我有 JMP Pro,并且尝试了“子集”菜单中的“分层”选项,但我不知道如何操作。
数据探索和可视化回复:保留原始分布的子集创建您可以根据需要创建一个分层的验证列(在预测建模下),然后使用这些子集。我认为至少在最初,您仅限于 3 个子集(训练、验证和测试子集),但如果您需要更多,您可以多次执行此操作。我从未使用过“子集”菜单中的“分层”选项,但它似乎可以工作,但一次只能创建一个子集。
回复:保留原始分布的子集创建因为您有 JMP Pro,并且您提到了 Stratify,所以这里有另一个选项:来自 JMP Pro 的 XGBoost 插件的“制作 K 折叠列”( https://community.jmp.com/t5/JMP-Add-Ins/ XGBoost-Add-In-for-JMP-Pro/ta-p/319383 ) 并阅读第 3、4、5 页
在“XGBoost Add-in.pdf”文件中。

该函数创建子集(加载项将其称为折叠),以保持原始分布(加载项将其称为平衡),同时通过保持分层变量平衡来尊重分层。请参阅该 pdf 文档第 5 页的直方图。
回复:保留原始分布的子集创建感谢您的回答。
我意识到需要超过 3 个子集,您可以在预测建模 --> 创建验证列中使用“创建 K 倍验证列”。
回复:子集创建保持原始分布我认为您需要做的就是使用表格=>子集平台中的随机抽样功能指定子集。按速率或大小随机抽样将为您提供与原始表具有相同分布的数据表。
回复:子集创建保持原始分布严格来说,如果您想要与原始分布相同,则需要进行有放回抽样。这是重采样和引导方法的基础。Subset 命令执行无放回随机抽样。我认为您需要一个脚本才能获得所需的内容。抽样将基于计算随机下标,如下所示:
subscript = J( sample size, 1, Random Integer( 1, N Row( dt ) )
该向量可用于在新的数据表中创建新的数据列。
New Table( "Sample", New Column( "Data", Value( dt:originalColumn[subscript] ) ) );
回复:子集创建保持原始分布你好@bbenny7 ,
我发现这个主题很有趣,原因类似,就是想正确地对数据表进行子集划分,但要根据列进行分层。我以前也按照@dlehman1的建议做过,使用验证列对感兴趣的列进行分层,但我也很好奇,如果需要多个数据表,该如何用不同的方法实现。我尝试了@Mark_Bailey建议的方法,但发现需要将New Table()的JSL代码拆分成两行,一行定义新表,另一行根据数据表的另一个感兴趣的列赋值。我无法按照他原来的代码布局方式运行。以下是修改后的代码,效果如下:
Names Default To Here( 1 );
dt = Data Table( "originaldatatable" ); //assigns the original data table to the variable dt
subscript = J( samplesize, 1, Random Integer( 1, N Rows( dt ) ) ); //creates the random integer vector of length 'samplesize'
dt2 = New Table( "Sample", New Column( "Data" ) ); //creates new data table with column Data
dt2:Data << Set Values( dt:originalColumn[subscript] ); // assigns values to Data based on the row entries for the originalColumn
作为一个有趣的小测试,我通过制作一个 For() 循环并在其中放入下标线(以生成一组新的行号)生成了 4 个子集,并比较了 4 个集合的分布,它们的汇总统计数据都非常相似。

我做了一个类似的测试,但创建了4个分层验证列,然后查看了它们的统计数据。N值不同,因为“创建验证列”平台无法生成与我上面相同的比率,我在上面随机选择了300个。总之,结果都非常相似。

无论哪种方式都应该有效,并能让你到达你想去的地方。
祝你好运!,
DS
回复:子集创建保持原始分布谢谢你的回答。
我意识到我不需要插件,但我可以在预测模型中使用“制作 K 折验证列”-->制作验证列。