模拟数据以生成更大的数据集以构建模型亲爱的 JMP 社区,
我正在尝试找出一种生成模拟数据的方法,以更好地训练我正在构建的模型。
我有一个相当大的数据集——几千个数据点,但想生成与原始数据保持相似结构的模拟数据,以改进模型。 我希望有大约 20K-50K 具有类似结构的数据点,以便拥有更大的数据集来训练、验证和测试预测模型。
仅出于视觉目的,数据看起来像这样:

我尝试使用 Profiler 平台中的“模拟器”功能,但在那里生成的数据与原始数据没有保持相似的结构(变化)——它被标准“洗掉”了输入和响应的偏差。 当我尝试从该集合构建模型并将其与源数据中的原始模型进行比较时,原始模型的得分超过了它,因为该模型在其预测中保持了数据的结构。 从模拟数据集生成的模型不会,因为所有结构基本上都丢失了。
此外,“模拟”功能(右键单击报告窗口中的列)也不能真正让我到达我想要的位置。
我对人们对 JMP 所做的事情进行了一些研究,并发现了一些潜在的潜在客户,但到目前为止,他们都没有真正追求我正在寻找的东西。如果那里有人对此有解决方案,或者可以为我指出如何编写代码的正确方向,我将不胜感激。
谢谢
回复:模拟数据以生成更大的数据集以构建模型你好@Mark_Bailey和@Peter_Bartell ,
只是为了提供一些反馈,并继续讨论这个话题,我能够使用 ARIMA 平台获得一些合理的模型数据。 它在重新创建类似的数据集方面做得很好,虽然不擅长预测,但没关系。 应用该模型的预测公式与我的实际数据集效果相当好,因此它确实提供了一条潜在有用的前进道路。
我不相信这最终是我希望继续进行的方式,因此我想将其与 JMP 中的其他模拟选项进行比较。 我知道由于我们之前讨论过的原因,分析器的随机模拟没有帮助。 此外,这不是调整模型以改进拟合的最佳方法,我想这样做。
对于我的特定建模,我正在使用引导森林模型,并希望通过调整模型来改进它。 我这样做的部分原因是使用了调优表。 不过在这方面有一些限制,特别是我在调整表中可以承受的运行次数(内存方面)。 我通常在我能承受的范围内尽可能多地运行我的模型。 这缩小了森林中树的数量、每次拆分采样的术语数、引导样本、每棵树的最小拆分和最小拆分大小。 这可能有助于优化模型平台的参数以找到解决方案,但这并不一定意味着基于我拥有的数据的优化模型。
当我构建模型时,我创建了一个验证列,我将其分解为一个训练和测试集,按我的响应列分层。 然后,我仅在训练数据上构建模型,并保留一定的百分比以验证模型。 模型输出取决于我选择的验证列(我做了几个)。 下面是一个典型的输出(抱歉,我无法分享响应或因子列的信息)。 boostrap 森林规范的细节会根据原始训练和验证数据的分层方式而变化。

我现在感兴趣的是通过使用模型统计的模拟选项来调整模型以改进拟合。 我可以通过更改训练集和验证集的 N 或通过单个树的 RMSE 等来做到这一点。 我知道我将无法使用这种方法来更改引导森林的规范(调整表会这样做),但我想以我可以调整模型的方式使用它,例如数字用于训练和验证的样本数,或分割数,以最大化 r^2。
总结一下:我想使用模拟方法来帮助训练数据。 我知道分析器的模拟平台不起作用,这让我只能使用 ARIMA(可能)或模型统计的引导模拟选项。 我不确定如何最好地使用后一种模拟方法来调整模型。
如果您对通过模拟调整模型有任何想法或反馈,我们将不胜感激。
在此先感谢您的时间!
回复:模拟数据以生成更大的数据集以构建模型你好@GM ,
感谢您的意见和建议。 您对多元数据的预期目标和描述是正确的。 生成数据的顺序似乎不是一个好的预测指标。 还有其他一些被测量的属性,当它们一起使用时,可以提供对我想要建模/预测的“y”的合理预测。 当试图训练模型使其更适合时,困难就来了。 我想通过模拟数据来做到这一点,但事实证明这比我预期的更具挑战性。
与分析器中的模拟选项相比,MVN 方法在保留数据的一些多元相关性方面确实做得更好。 该选项只是使用给定的标准偏差进行平均。
不幸的是,当我尝试使用 MVN 脚本和生成的数据构建模型时,它的性能比仅使用原始数据构建的类似模型差得多。
到目前为止,我发现 ARIMA 模型在捕捉数据的短期波动以及一些长期结构方面做得更好。 它在预测数据中的预测方面也做得很差,但我想用它来生成新数据,添加到原始数据中以构建更大的数据集,然后用更大的数据集训练模型。
我想我现在要尝试的是从 ARIMA 报告中“保存列”,提取预测值,然后将其与原始数据表连接起来。 然后,我想随机化新数据表中的行并使用更大的数据集构建模型。 我想另一种选择可能是生成多个验证列,使用不同的交叉验证行运行相同的模型,并对结果模型进行平均。
我感谢对这次讨论的所有贡献。 虽然我还没有找到合适的解决方案,但我学到了很多东西并想出了一些新的想法来尝试。
谢谢!
回复:模拟数据以生成更大的数据集以构建模型根据讨论,听起来您有一个结果变量,要与其他预测变量一起建模,其中时间或生成数据的顺序不是预测变量。您可能希望使用多元正态分布来模拟您的 NxP(N= 行,P = 变量(y 和 x's))矩阵。此链接提供 JSL 来模拟多元正态分布。 http://www.jmp.com/support/notes/36/140.html您需要根据估计的协方差矩阵对其进行修改,但如果您的数据遵循多元正态分布,它应该可以工作。
回复:模拟数据以生成更大的数据集以构建模型你好@Mark_Bailey ,
足够的预测变量肯定可能存在一些缺陷。 然而,根据我们所做的其他分析,我们所使用的系列显然比我们研究过的许多其他系列更适合。
关于复杂性和交叉验证,我绝对会考虑到这一点。 我生成了一个训练/验证/测试列来帮助降低过度拟合的风险。 引导森林建模生成一个相当复杂的决策树预测公式,它比广义回归模型或神经网络建模等广泛得多。 在将模型相互比较时,它的表现也更好。 通常,我发现在使用调整矩阵运行引导森林平台后,大约有 60 多棵树,每次拆分采样约 4 个术语。 每个学期的拆分次数可能会有所不同,但通常在 1,000 到 3,000 的范围内。
回复:模拟数据以生成更大的数据集以构建模型首先,ARIMA 和其他时间序列模型假设短期扰动和一些周期性趋势,因此它们不适合长期预测。
您当前模型的“不适合”问题(预测缺少观察到的响应的极端偏移)可能无法得到更多数据的帮助。 您可能缺乏足够的预测因子。 减少偏差的一个方向是使用当前特征集在基扩展中包含更多项。 您提到了几种建模技术,但您没有提及您探索的这些模型的复杂性。 更高的复杂性,以及交叉验证解决过度拟合的风险,可能会解决偏差问题。 减少偏差的另一个方向是寻找最终解释与观察到的响应的偏差的缺失特征。
回复:模拟数据以生成更大的数据集以构建模型你好@Mark_Bailey ,
最终,我想建立一个强大的模型,根据传入的因素预测未来的价值。 我研究了 ARIMA 和 FDE。 我同意 FDE 可能不是一个合适的方法。 但是,我认为 ARIMA 建模可能会为生成用于训练模型的新数据提供途径。
几个因素或多或少与响应并行测量。 所有测量都用完源材料,但是为了能够运行其他测量,需要对大量进行采样。我们已经确定了一组具有最强预测能力的因素。 我使用这些因素和响应来检查几个不同的模型,使用广义回归方法、提升树、提升森林、神经网络和其他分区方法。 比较模型,我发现引导森林始终提供比其他模型更好的建模结果。 我可以通过阻止测试以及使用调整表运行模型以优化拟合参数来进一步改进这个模型。
不过,我仍然发现,该模型并没有像我们认为应该(或可以)那样真正捕捉数据的高点和低点。 它确实捕捉到了一些结构,但在获得那些高点和低点方面并不是那么好。 因此,我想模拟一个更大的数据集,其中包含更多这些事件,以构建更好的模型。 而且由于实际建立一组真实值的数据集需要很长时间,因此模拟数据来训练模型会很有帮助。
我确实认为 ARIMA 平台可以在这方面提供帮助。 我已经对其进行了测试以生成因子和响应的预测值。 这会为模拟真实数据的因素和响应生成一组新值。 然后,我可以将模拟数据和真实数据连接到一个新的数据表中,以生成一个两倍大的新数据集。
不幸的是,ARIMA 模型不能很好地预测因子或响应的许多新值,因此我不能真正使用它来生成预测期。 不过,我认为这种构建模拟数据集的替代方法可能很有用。
回复:模拟数据以生成更大的数据集以构建模型目前尚不清楚模拟更多数据是否会有所帮助。 如果你可以模拟数据,那么你就有了数据的模型。 “结构”是总体的变化(蒙特卡洛模拟没有重现,具有恒定的平均值)。
您是否同时使用此响应测量预测变量(因子)的候选者? 您是否探索过相关性、关联性和可能的模型?
回复:模拟数据以生成更大的数据集以构建模型你好@Peter_Bartell和@Mark_Bailey ,
我非常感谢关于这个问题的讨论,因为它给了我一些关于如何改进我的分析的想法。
数据来自流程,但不是实时的。 它们被收集在一个数据库中,然后再进行访问。 我不能保证每个点在前一个点之后都是真正连续的。 点之间有一个典型的时间间隔,但如果过程中有一个暂停,可能是几小时或几天,数据库就会从中断的地方继续。 因此,严格来说,它不是一个时间序列。 但是,在实践中,如果 ARIMA 模型可以复制与真实数据类似的响应,这应该就足够了(我认为)。
Tha数据来自同一来源。 从过程中抽取样品并对其进行测量。
我还没有尝试估计自相关。 为了生成模拟真实数据的输入/输出数据,蒙特卡洛模拟可能是一种方法。 我不知道 JMP 可以进行 MC 模拟。 我以前在其他问题上做过这些,但没有使用 JMP。 这些是我必须研究的事情。
目标是开发一个可以很好地预测响应的模型。 有了这个,我们可以只监控因素(更容易)。 如果模型预测出警告,则可以进行更具挑战性的工作。
我仍然认为有关 FDE 和 ARIMA 的内容值得一读,它可能会激发一些想法。 我希望我有些模糊的解释是有道理的。 感谢您理解披露问题。
谢谢
回复:模拟数据以生成更大的数据集以构建模型我同意@Mark_Bailey上面的最后一段......正如我在之前的一篇文章中所说......从你迄今为止分享的内容......我怀疑 FDE 或时间序列分析是最适合你目标的方法。
回复:模拟数据以生成更大的数据集以构建模型那么数据不是按时间顺序绘制的吗? 它们不是来自同一来源(单一来源)?
当您说每个测量都是独立的时,您是否估计了自相关,即使只是滞后 1? 虽然“独立”可能意味着数据是单独收集的,但我说的是统计独立性或缺乏相关性。
模拟数据是我所期望的。 存在一个具有稳定均值和方差的总体。 蒙特卡罗模拟包括对因子和响应的随机扰动。
您在数据中看到但在模拟中没有看到的“结构”是其他“可分配原因”的结果。 原因可以在时间和幅度上随机发生。 模拟必须包括他们的贡献。 你知道它们是什么吗? 它们是如何发生的? 如何为它们建模?
我知道您无法透露测量的真实性质和细节,但也许您可以使用类比让我们了解数据和您在做什么。 例如,也许您正在不时测量核潜艇内三个鱼雷发射管中的压力......
假设我们可以帮助您模拟真实数据,您打算使用什么样的分析或建模?
彼得非常有帮助,但随着我们对您的问题的了解更多,我怀疑这些建议是否会有所帮助,功能数据分析适用于函数、轮廓或曲线。 想象一个包含数百个数据系列的样本,您想要对形状以及形状如何受因素影响或形状如何预测结果进行建模。 您显然有一个要扩展的数据系列。 FDA 不会预测超出原始领域。 ARIMA 模型假设点间距相等。 它可以对自相关、扰动和季节性进行建模,以提前但不远地进行预测。 另一方面,基于 ARIMA 模型的蒙特卡罗模拟是可能的。
回复:模拟数据以生成更大的数据集以构建模型@SDF1 :您的短语“长期结构”可能有许多风味、细微差别和附加问题。 例如,季节性可以是一种结构形式。 ARIMA 时间序列方法非常适合模拟过程中的季节性影响和长期趋势或周期性运动。 请参阅 JMP 示例数据目录中的经典 seriesg.jmp 数据表。
我对初学者的建议是阅读 JMP 文档中的 JMP/JMP Pro 功能。 这是 FDE 的链接:
https://www.jmp.com/support/help/14/functional-data-explorer.shtml
这是时间序列分析的链接:
https://www.jmp.com/support/help/14/time-series-analysis.shtml
回复:模拟数据以生成更大的数据集以构建模型嗨,彼得,
这些平台中的任何一个都允许维护远程结构吗? 我仍然会阅读它们,它可能会给我一些关于如何为我自己的解决方案编写代码的想法。
谢谢!
回复:模拟数据以生成更大的数据集以构建模型鉴于观察结果不是时间序列,我撤回了我之前关于功能数据浏览器或时间序列分析的建议。 两种技术都假设在观察之间存在某种结构……并且由于这些观察彼此独立……不建议使用 FDE 或时间序列。
回复:模拟数据以生成更大的数据集以构建模型嗨,马克,
数据不依赖于时间。 每次测量都独立于前一次测量,但通常数据是一个接一个地收集的。 它们可以被认为是一个时间序列,但严格来说并不严格,因为它们在技术上可能不是连续的。 更重要的是,每个测量都是对响应的独立测量。
有希望地,下面的视觉效果将解释我对丢失任何结构的模拟数据的意思:

我通过在 Profiler 中打开模拟器来生成它,给每个预测器(我有几个)一个具有真实 SD(来自实际数据)的正态分布,并生成一个包含 50K 响应的表。 尽管平均值、最大值和最小值可能接近原始数据的样子,但其他结构丢失了。 这个新数据集不包含与原始数据集相同的“长期”结构,并且在模拟数据集中捕获这种结构与数据的实际值同样重要。 它不必完全匹配,但至少具有相似的结构(参见原始帖子进行比较)。
我同意 JMP 中内置的两个模拟器选项不合适。 关于特定主题的任何建议以阅读列公式或编写脚本? 我不熟悉任何可以为我解决这个问题的内置公式。 我可以编写这样的脚本,但需要知道从哪里开始。 我仍然需要研究 Peter Bartell 关于功能数据浏览器和 ARIMA 建模的其他建议,看看它们是否能处理它。
谢谢!
回复:模拟数据以生成更大的数据集以构建模型所以响应是一个时间相关的信号? 是否有预测因子或自相关是否重要?
你是什么意思 ”不幸的是,当我尝试使用 Profiler 的模拟功能并生成更大的数据集时,新的输出数据不会显示原始数据的任何相关结构。 " 所需结构的性质是什么?
数据与时间序列有何不同?
我认为 Prolfier 或 JMP Pro Simulate 平台功能中的模拟器无法满足您的需求。 列公式或脚本可能是最令人满意的方法。
你不能透露一些细节(理解)所以我们必须玩“二十题!”
回复:模拟数据以生成更大的数据集以构建模型嗨,马克,
感谢您的意见。
生成的数据非常慢——这意味着实际获取原始数据需要很长时间,几天和几周。 因此,构建一个 50K 大小的数据集是不可行的。 我正在使用一些 Pro(运行 Pro 14.1.0)建模函数来尝试生成一个模型,该模型不仅可以很好地预测数据,还可以捕获数据中的结构。 拥有一个模拟原始结构的更大数据集将非常有助于改进模型。 增加样本量(包括更多的训练、验证和测试大小)并捕获数据结构将有助于训练更好的模型——至少我认为。
这不是严格意义上的时间序列,尽管人们可以这样看。 数据事件不一定在时间上相互关联。 另一位发帖人建议进行时间序列分析,我将对其进行研究。
不幸的是,当我尝试使用 Profiler 的模拟功能并生成更大的数据集时,新的输出数据不会显示原始数据的任何相关结构。 我可以在其上构建一个非常适合的新模型,但是当我将新模型与原始模型(基于原始数据构建)进行比较时,使用原始数据,新模型的拟合效果不佳。
对不起,我不能更具体,但我不能讨论数据的细节。 我希望我的评论对你提出的观点有意义。
谢谢!
从我想做的事情来看,Profiler 中的模拟功能似乎是正确的方法,但它并没有给我想要得到的东西。 Platorm Simulation 绝对不是正确的方法,或者至少我可以看到如何调整它来满足我的需求。
回复:模拟数据以生成更大的数据集以构建模型嗨,彼得,
感谢您的评论。 我忘了在原始帖子中添加我正在运行 JMP Pro 14.1.0。
我可能要等到下一次更新推出,但我至少可以做一些阅读和跟进。
谢谢!
回复:模拟数据以生成更大的数据集以构建模型首先,您将如何使用模拟数据来改进模型? 是否有足够的数据来证明特定建模方法的可行性? 是否评估可能足以满足特定模型的样本量? 只是增加样本量的问题吗?
其次,您似乎只有一个时间序列。 这种解释正确吗?
第三,Profiler 的模拟功能适用于拟合或保存的模型。 您可以根据参数分布模型来描述预测变量和响应中的变化。 我不知道该机制是否适用于时间序列模型。 (其他专家可以在这里插话。)
平台模拟旨在基于具有随机组件的保存模型对数据进行重新采样,以生成平台中所选统计数据的经验采样分布。
我认为我可以获得一个 SAS 程序来模拟可以适应 JMP 列公式或脚本的时间序列数据。 (没有承诺。)
我在正确的轨道上吗?
回复:模拟数据以生成更大的数据集以构建模型如果您有 JMP Pro 14.2 版,您的问题听起来像是功能数据资源管理器的完美应用程序。 另一种选择可能是使用某种 ARIMA 构造的时间序列建模方法? 时间序列方法不需要 JMP Pro。