Сохранение FittedModel глючит - PullRequest
11 голосов
/ 06 июля 2011

С помощью 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 с диска
  • Фу глючит

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

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

Есть хороший обходной путь?

1 Ответ

10 голосов
/ 06 июля 2011

Это известная ошибка, и, к счастью, существует простой обходной путь.Перед оценкой 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] в основном вызывает нагрузку.

...