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

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

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