Ускорение оценки перекрывающихся аддитивных моделей (мгкв) - PullRequest
2 голосов
/ 23 февраля 2020

У меня есть некоторый набор переменных, и я подгоняю множество (сотни тысяч) аддитивных моделей, каждая из которых включает в себя подмножество всех переменных. Зависимая переменная одинакова в каждом случае, и некоторые модели перекрываются или являются вложенными. Не все независимые переменные должны входить в модель непараметрически. Для ясности, у меня может быть набор переменных {x1,x2,x3,x4,x5} и оценка:
a) y=c+f(x1)+f(x2),
b) y=c+x1+f(x2),
c) y=c+f(x1)+f(x2)+x3, et c.

Мне интересно, могу ли я что-нибудь сделать, чтобы ускорить оценку игры в этом случае? Есть ли что-то, что вычисляется снова и снова, что я мог бы рассчитать один раз и передать функции?

Что я уже пробовал:

  • Запоминание, поскольку модели повторяются время от времени точно.
  • Неохотно переключается с регрессионных сплайнов на тонких пластинах на кубические c сплайны регрессии (довольно значительное улучшение).
  • Руководство mgcv гласит:

    Пользователь может сохранить большинство преимуществ подхода tprs, предоставив сокращенный набор ковариатные значения, из которых можно получить базис - обычно число используемых ковариатных значений будет существенно меньше, чем количество данных, и существенно больше, чем базисное измерение, k.

    Это вызвало довольно заметное улучшение с небольшими моделями, например, 5 сглаживания, но не с большими моделями, например, 10 сглаживания. На самом деле, в последнем случае это часто приводило к тому, что оценка занимала (потенциально намного) больше.

Что я хотел бы попробовать, но не знаю, возможно ли это:

  • Одна очевидная вещь, которая повторяется, скажем, y=c+f(x1)+f(x2) и y=c+x1+f(x2), - это вычисление базиса для f(x2). Если бы мне пришлось каждый раз использовать одни и те же узлы, как (если это вообще возможно) я мог бы пересчитать базис для каждой переменной и затем передать его в mgcv? Ожидаете ли вы, что это принесет значительное улучшение времени?

Есть что-нибудь еще, что вы бы порекомендовали?

...