Сохранение FittedModel является ошибкой

С Mathematica 7 и 8 мы обнаружили, что Mathematica не удалось правильно сохранить и получить результат подгонки. Я надеюсь, что кто-то здесь знает: какова наилучшая практика для этой ошибки?

Наша задача состоит в том, что мы устанавливаем множество наборов данных с помощью функции NonlinearModelFit, которая возвращает FittedModel для каждого набора данных. Эти припадки занимают некоторое время, и мы попытались использовать Save и DumpSave для запоминания результатов в файл. Последующий анализ использует Get, чтобы вернуть FittedModel обратно.

Mathematica выполняет команду "Сохранить и получать без предупреждений", но 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 не работает

Кто-нибудь видел такое поведение раньше?

Есть ли хорошее объяснение этой ошибки?

Есть ли хороший способ обхода?

Ответ 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] в основном заставляет загружать.