【问题标题】:Saving FittedModel is buggy保存 FittedModel 有问题
【发布时间】:2011-07-06 12:15:35
【问题描述】:

在 Mathematica 7 和 8 中,我们发现 Mathematica 无法正确保存和获取拟合例程的结果。我希望这里有人知道:解决此错误的最佳做法是什么?

我们的任务是使用 NonlinearModelFit 拟合大量数据集,它为每个数据集返回一个 FittedModel。这些拟合需要一段时间,我们尝试使用 Save 和 DumpSave 将结果存储到文件中。随后的分析使用 Get 将 FittedModel(s) 拉回。

Mathematica 在没有警告的情况下执行 Save & Get,但返回的 FittedModel 有问题。我们调用 Get 并从磁盘加载 FittedModel,将结果称为“foo”。尝试 foo[10] 使用输入 10 评估拟合模型。我们看到的错误是 foo["BestFitParameters"] 应该返回一个规则列表,而是将字符串插入到函数中,因为它是像 10 这样的数字。尝试 foo [{"BestFitParameters","BestFitParameters"}] 应该在一个列表中给出两次规则,但在错误的 foo 中保持未评估。

除此之外还有一个奇怪和误导性的行为,取决于我们是删除/清除 foo 还是退出内核:

  • 将 FittedModel 计算为 foo
  • 保存或 DumpSave foo 到磁盘
  • 删除和/或清除 foo
  • 从磁盘获取 foo
  • foo 工作正常

但是如果我们重启内核就会失败

  • 将 FittedModel 计算为 foo
  • 保存或 DumpSave foo 到磁盘
  • 杀死并重新启动内核
  • 从磁盘获取 foo
  • foo 有问题

以前有人见过这种行为吗?

这个错误背后有很好的解释吗?

有没有好的解决方法?

【问题讨论】:

  • 你能添加一个简短的代码示例吗?

标签: wolfram-mathematica mathematica-8


【解决方案1】:

这是一个已知的错误,幸运的是,有一个简单的解决方法。在评估 Get 以读取保存的 FittedModel 之前,先评估一个虚拟拟合模型代码。

In[1]:= NonlinearModelFit[Range[5], a x, x, a];

In[2]:= Get[FileNameJoin[{$HomeDirectory, "Desktop", "bignlm.mx"}]];

In[3]:= AbsoluteTiming[nlm["BestFitParameters"]]

Out[3]= {17.6010000, {a -> 1.45015, b -> 2.33999}}

如果跳过此初始评估,则由于未能自动加载实现该功能的所有相关代码,因此拟合模型似乎无法正常工作。 In[1] 的评估基本上是强制加载。

【讨论】:

  • 我们将在早上(英国时间)第一件事尝试一下!
猜你喜欢
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多