保存FittedModel有缺陷

11

在Mathematica 7和8版本中,我们发现Mathematica不能正确地保存和获取拟合程序的结果。我希望有人知道:如何解决这个bug的最佳实践方法?

我们的任务是使用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计算
  • 将foo保存或DumpSave到磁盘
  • 删除和/或清除foo
  • 从磁盘中获取foo
  • foo可以正常工作

但如果重新启动内核,它将失败

  • 将FittedModel作为foo计算
  • 将foo保存或DumpSave到磁盘
  • 杀死并重新启动内核
  • 从磁盘中获取foo
  • foo存在漏洞

有人看到过这种行为吗?

是否有关于这个bug的好的解释?

是否有一个好的解决方法?


3
你能添加一个简短的代码示例吗? - Dr. belisarius
1个回答

10

这是一个已知的bug,幸运的是有一个简单的解决方法。在评估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] 的评估基本上强制进行加载。


我们将在明天早上(英国时间)首先尝试一下! - Chris Kuklewicz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接