Analizuję niektóre dane, w których chciałbym przeprowadzić zwykłą regresję liniową, jednak nie jest to możliwe, ponieważ mam do czynienia z ustawieniem on-line z ciągłym strumieniem danych wejściowych (które szybko stają się zbyt duże dla pamięci) i potrzebują zaktualizować oszacowania parametrów podczas ich zużycia. tzn. nie mogę po prostu załadować wszystkiego do pamięci i przeprowadzić regresji liniowej dla całego zestawu danych.
Zakładam prosty liniowy model regresji wielowymiarowej, tj
Jaki jest najlepszy algorytm do tworzenia stale aktualizowanej oceny parametrów regresji liniowej i b ?
Idealnie:
- Chciałbym algorytm, który jest najbardziej złożonością przestrzenną i czasową na aktualizację, gdzie N jest wymiarowością zmiennej niezależnej ( x ), a M jest wymiarowością zmiennej zależnej ( y ).
- Chciałbym móc określić jakiś parametr, aby określić, jak bardzo parametry są aktualizowane przez każdą nową próbkę, np. 0,000001 oznaczałoby, że następna próbka dostarczy jedną milionową szacunku parametru. Dałoby to pewnego rodzaju wykładniczy rozkład dla efektu próbek w odległej przeszłości.
Odpowiedzi:
Maindonald opisuje sekwencyjną metodę opartą na obrotach Givensa . (Obrót Givensa jest ortogonalną transformacją dwóch wektorów, która zeruje dany wpis w jednym z wektorów.) W poprzednim etapie dokonałeś dekompozycji macierzy projektowej na macierz trójkątną T za pomocą transformacji ortogonalnej Q, tak że Q X = ( T , 0 ) ′ . (Uzyskanie wyników regresji z macierzy trójkątnej jest szybkie i łatwe). Po dołączeniu nowego wiersza v poniżej X skutecznie przedłużasz ( T , 0 )X T. Q QX=(T,0)′ v X Również przez niezerowy rząd, powiedz t . Zadanie polega na wyzerowaniu tego rzędu przy jednoczesnym zachowaniu wpisów w pozycjiprzekątnej T. Wykonuje to sekwencja rotacji Givens: rotacja z pierwszym rzędem T zeruje pierwszy element t ; następnie obrót z drugim rzędem T zeruje drugi element i tak dalej. Efektem jest przedwczesne Q przez serię obrotów, co nie zmienia jego ortogonalności.(T,0)′ t T T t T Q
Gdy macierz projektowa ma kolumny (co ma miejsce w przypadku regresji na zmiennych p plus stała), liczba potrzebnych obrotów nie przekracza p + 1, a każdy obrót zmienia dwa wektory p + 1 . Pamięć potrzebna dla T to O ( ( p + 1 ) 2 ) . Zatem ten algorytm ma koszt obliczeniowy O ( ( p + 1 ) 2 ) zarówno w czasie, jak i przestrzeni.p+1 p p+1 p+1 T O((p+1)2) O((p+1)2)
Podobne podejście pozwala określić wpływ regresji na usunięcie wiersza. Maindonald podaje formuły; podobnie jak Belsley, Kuh i Welsh . Dlatego jeśli szukasz ruchomego okna do regresji, możesz zachować dane dla okna w okrągłym buforze, przylegając do nowego układu odniesienia i upuszczając stary z każdą aktualizacją. Podwaja to czas aktualizacji i wymaga dodatkowej pamięci dla okna o szerokości k . Wydaje się, że 1 / k będzie analogiem parametru wpływu.O(k(p+1)) k 1/k
W przypadku rozkładu wykładniczego uważam (spekulacyjnie), że można dostosować to podejście do ważonych najmniejszych kwadratów, nadając każdej nowej wartości wagę większą niż 1. Nie powinno być potrzeby utrzymywania bufora poprzednich wartości ani usuwania starych danych.
Bibliografia
JH Maindonald, Obliczenia statystyczne. J. Wiley & Sons, 1984. Rozdział 4.
DA Belsley, E. Kuh, RE Welsch, Diagnostyka regresji: identyfikacja wpływowych danych i źródeł kolinearności. J. Wiley & Sons, 1980.
źródło
Myślę, że przekształcenie modelu regresji liniowej w model przestrzeni stanów da ci to, czego szukasz. Jeśli używasz R, możesz użyć pakietu dlm i zajrzeć do książki towarzyszącej autorstwa Petrisa i in.
źródło
Jest to bardzo wydajne i sposób, w jaki sieci neuronowe są zwykle szkolone. Możesz efektywnie przetwarzać nawet wiele próbek (powiedzmy 100 lub więcej).
Oczywiście można zastosować bardziej wyrafinowane algorytmy optymalizacji (pęd, gradient sprzężony, ...).
źródło
Zaskoczony, jak dotąd nikt inny tego nie dotykał. Regresja liniowa pełni kwadratową funkcję celu. Tak więc krok Newtona Raphsona z dowolnego punktu początkowego prowadzi prosto do optymów. Powiedzmy, że już wykonałeś regresję liniową. Funkcja celu to:
Dodaj to do starego hessianu podanego powyżej. Następnie zrób krok Newtona Raphsona.
I jesteś skończony.
źródło
Standardowe dopasowanie najmniejszych kwadratów daje współczynniki regresji
Na przykład, jeśli M = 1, wówczas jeden współczynnik wynosi
więc za każdym razem, gdy otrzymujesz nowy punkt danych, aktualizujesz obie sumy i obliczasz współczynnik i otrzymujesz zaktualizowany współczynnik.
źródło
Problem jest łatwiejszy do rozwiązania, gdy przepisujesz trochę rzeczy:
Y = y
X = [x, 1]
następnie
Y = A * X
Obliczenie pozwala znaleźć rozwiązanie jednorazowe
V = X '* X
i
C = X '* Y
zauważ, że V powinien mieć rozmiar N-by-N, a C rozmiar N-by-M. Parametry, których szukasz, są następnie podawane przez:
A = inv (V) * C
Ponieważ zarówno V, jak i C są obliczane poprzez zsumowanie danych, możesz obliczyć A dla każdej nowej próbki. Ma to jednak złożoność czasową O (N ^ 3).
Ponieważ V jest kwadratowe i półokreślone dodatnio, istnieje rozkład LU, co sprawia, że odwracanie V jest bardziej stabilne numerycznie. Istnieją algorytmy do przeprowadzania aktualizacji rangi 1 odwrotności macierzy. Znajdź je, a uzyskasz efektywne wdrożenie, którego szukasz.
Algorytmy aktualizacji rangi 1 można znaleźć w „Obliczeniach macierzy” Goluba i van Loana. Jest to trudny materiał, ale ma kompleksowy przegląd takich algorytmów.
Uwaga: Powyższa metoda daje oszacowanie metodą najmniejszych kwadratów na każdym etapie. Możesz łatwo dodawać wagi do aktualizacji X i Y. Gdy wartości X i Y stają się zbyt duże, można je skalować za pomocą jednego skalara, bez wpływu na wynik.
źródło