Python: самый быстрый способ выполнить миллионы простых линейных регрессий только с одной экзогенной переменной.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: самый быстрый способ выполнить миллионы простых линейных регрессий только с одной экзогенной переменной.

Сообщение Anonymous »

Я выполняю покомпонентную регрессию данных временных рядов. По сути, это тот случай, когда вместо регрессии y к x1, x2, ..., xN мы бы регрессировали y к x< только sub>1, y против только x2, ... и возьмите регрессию, которая больше всего уменьшает сумму квадратных остатков, и добавьте ее в качестве базового обучающегося. Это повторяется M раз, так что окончательная модель представляет собой сумму многих простых линейных регрессий формы y против xi (только 1 экзогенная переменная), в основном градиентное повышение с использованием линейной регрессии в качестве базовых обучающихся. .
Проблема в том, что, поскольку я выполняю скользящую оконную регрессию для данных временных рядов, мне приходится выполнять регрессию N × M × T, что составляет более миллиона OLS. Хотя каждый OLS работает очень быстро, на моем слабом ноутбуке его запуск занимает несколько часов.
В настоящее время я использую statsmodels.OLS.fit() как способ получить мои параметры для каждого y против линейной регрессии xi как таковой. Z_matrix — это матрица данных, а i представляет ith столбец, который нужно срезать для регрессии. Количество строк составляет около 100, а размер z_matrix — примерно 100 × 500.

Код: Выделить всё

    ols_model = sm.OLS(endog=endog, exog=self.z_matrix[:, i][..., None]).fit()
return ols_model.params, ols_model.ssr, ols_model.fittedvalues[..., None]
Я прочитал предыдущий пост в 2016 году. Самый быстрый способ рассчитать множество регрессий в Python? что использование повторных вызовов моделей статистики неэффективно, и я попробовал один из ответов, который предлагал pinv numpy, который, к сожалению, медленнее:

Код: Выделить всё

    # slower: 40sec vs 30sec for statsmodel for 100 repeated runs of 150 linear regressions
params = np.linalg.pinv(self.z_matrix[:, [i]]).dot(endog)
y_hat = self.z_matrix[:, [i]]@params
ssr = sum((y_hat-endog)**2)
return params, ssr, y_hat
Есть ли у кого-нибудь лучшие предложения по ускорению вычисления линейной регрессии? Мне просто нужны оцененные параметры, сумма квадратных остатков и прогнозируемое значение ŷ. Спасибо!


Подробнее здесь: https://stackoverflow.com/questions/625 ... th-1-exoge
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»