numpy: код для обновления наименьших квадратов с большим количеством наблюдений - PullRequest
3 голосов
/ 10 мая 2011

Я ищу основанную на numpy реализацию обычных наименьших квадратов, которая позволила бы обновлять подгонку с большим количеством наблюдений. Нечто подобное алгоритму прикладной статистики AS 274 или R's biglm.

В противном случае также будет интересна процедура обновления QR-разложения новыми строками.

Есть указатели?

Ответы [ 4 ]

4 голосов
/ 11 мая 2011

scikits.statsmodels имеет рекурсивный OLS, который обновляет обратный X'X в песочнице, который можно использовать для этого.(используется только для вычисления рекурсивных остатков OLS.)

Натаниэль Смит опубликовал свой код для OLS, когда данные слишком велики для размещения в памяти в списке рассылки scipy-user.Основные обновления кода X'X.

Я думаю, что у econpy также есть функция для этого.

У Pandas есть расширяющийся OLS, но он может быть нелегким в использовании онлайн.

Код Натаниэля может быть ближе всего к biglm.Я не думаю, что есть что-то для общей линейной модели (ковариация ошибок отличается от идентичности).

Всем нужно немного поработать, прежде чем их можно будет использовать для этого.Я не знаю ни одного Python (-wrapped) кода, который бы обновил QR.

обновление: см. http://mail.scipy.org/pipermail/scipy-dev/2010-February/013853.html

в cholmod есть инкрементные qr и cholesky, но я не пробовал, ни лицензирование, ни компиляцию при проблемах с Windows, и я не думаю, чтоЯ пытался заставить incremental_qr работать, см. Вложения

http://mail.scipy.org/pipermail/scipy-dev/2010-February/013844.html

1 голос
/ 10 мая 2011

Это еще не подробный ответ, но:

AFAIK, обновление QR, например , это не реализовано в numpy, но, в любом случае, я хотел бы спросить васуказать более детальный способ, к чему вы на самом деле стремитесь.

Особенно, почему было бы неприемлемо просто рассчитать новую оценку для x (из Ax= b) с k последними наблюдениями, когда (кучка) новых наблюдений поступает (и с современным оборудованием,k действительно может быть довольно большим)?

1 голос
/ 10 мая 2011

Вы можете попробовать проект pythonequations на http://code.google.com/p/pythonequations/downloads/list,, хотя он может быть больше, чем вам нужно, он использует scipy и numpyЭтот код является промежуточным программным обеспечением для онлайн-сайта http://zunzun.com для кривых и подгонки поверхности (я автор).Исходный код содержит много примеров.Кроме того, одного веб-сайта может быть достаточно - пожалуйста, попробуйте.

 James Phillips
 2548 Vera Cruz Drive
 Birmingham, AL  35235  USA

 zunzun@zunzun.com
0 голосов
/ 10 мая 2011

Часть файла LSQ.F90 компилируется достаточно легко,

gfortran-4.4 -shared -fPIC -g -o lsq.so LSQ.F90

, и это работает в Python,

from ctypes import cdll

lsq = cdll.LoadLibrary('./lsq.so')

Как только я выясняю вызов функции, явключу его в этот ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...