eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak dobrze uwarunkować metodę najmniejszych kwadratów › Re: Jak dobrze uwarunkować metodę najmniejszych kwadratów
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming,pl.sci.matematyka
    Subject: Re: Jak dobrze uwarunkować metodę najmniejszych kwadratów
    Date: Tue, 5 Apr 2016 16:09:22 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 119
    Message-ID: <ne0guj$575$1@node2.news.atman.pl>
    References: <ndkmg7$l07$1@node2.news.atman.pl>
    NNTP-Posting-Host: 89-73-81-145.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1459865363 5349 89.73.81.145 (5 Apr 2016 14:09:23 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 5 Apr 2016 14:09:23 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
    Thunderbird/38.6.0
    In-Reply-To: <ndkmg7$l07$1@node2.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:209267 pl.sci.matematyka:153317
    [ ukryj nagłówki ]

    On 01.04.2016 04:30, Borneq wrote:
    > Rysowałem punkty na płaszczyźnie i chciałem do tego dopasować prostą.

    To albo nieprecyzyjne opisanie problemu, albo opisanie problemu
    innego, niż starasz się rozwiązać.

    Regresja liniowa jest estymatorem największej wiarygodności dla
    modelu
    Y_i = a*X_i + b + e_i
    gdzie e_i jest błędem o rozkłądzie normalnym.
    Czyli dopasowanie funkcji liniowej do wykresu punktów.

    Dopasowanie prostej do punktów na płaszczyźnie (pelna symetria) robi
    się przez SVD.
    http://mst.mimuw.edu.pl/lecture.php?lecture=ona&part
    =Ch7


    > Metodą najmniejszych kwadratów (np.
    > http://www.algorytm.org/procedury-numeryczne/metoda-
    najmniejszych-kwadratow.html)

    > Współczynnik a był w ogóle nie przystający do danych. Nie wiedziałem
    > dlaczego, szukałem błędu a wszystko się zgadzało.
    > W końcu odkryłem że miałem float a nie double.

    Fuuuu.
    :)

    > Problemem było to , że
    > odejmowaliśmy dwie bliskie sobie duże liczby a wynik był małą liczbą.
    > Czy można zmienić wzorki tak, by zadanie było lepiej uwarunkowane?

    Na dzień dobry zalecam nie używać serwisów dla licealistów;-)
    Tyle materiałow w sieci leży.

    http://www.mimuw.edu.pl/~pokar/StatystykaI/Ksiazki/N
    iemiroBook.pdf (9.2.1)
    Czy nawet wiki:
    https://en.wikipedia.org/wiki/Simple_linear_regressi
    on#Fitting_the_regression_line

    a = sum[ (y- y_sr)(x- x_sr) ] / sum[ (x- x_sr)^2 ]

    b = y_sr - a * x_sr


    Dwuprzebiegowe... I co z tego:)

    Wriancje (mianownik piwrwszego ułamka) da się policzyć w jednym przbiegu
    https://en.wikipedia.org/wiki/Algorithms_for_calcula
    ting_variance#Online_algorithm
    więc pewnie jakby pokombinować, da się poodbnie policzyć
    korelacje x,y (licznik) ale to i tak jest ciut mniej dokładne niż
    przez policzenie najpierw średniej.

    Dodatkowo, jeśli danych masz naprawdę dużo, trzeba je posumować
    ostrożnie. Sposoby są od odpowiedniego uporzadkowania
    od najmniejszych, od najwiekszych, kopiec w porzadku wartosci
    bezwzglednej i zawsze dwie najmniejsze, czy wrescei takie wynalazki:
    https://en.wikipedia.org/wiki/Pairwise_summation
    https://en.wikipedia.org/wiki/Kahan_summation_algori
    thm
    albo po prostu użyj powiekszonej precyzji. Float128 jest już wszędzie.

    Pamietaj, że nigdy nie dostaniesz lepszego względnego wyniku niż
    precyzje danych * uwarunkowanie sumy ( sum |x_i| / sum x_i).


    Co do przesuwania i reskalowania danych:

    Wróćmy do prawdziwej, pełnej (chyba po polsku oficjalna nazwa to
    wieloraka) regresji. Zwyłą regresję
    y_i = b_1 x_i + b_0 + e_i

    zapisujemy jako

    Y = X b + e

    Y to wektor [y_1;,y_2...]
    b to wektor [b_1; b_0]
    (oba stojące)
    e_i to wektor błędów
    X to maceirz
    X = [x_1, 1 ;
    x_2, 1;
    x_3, 1;
    ...]
    (kolumna x-ów i kolumna jedynek).

    Wzorki z regresji proistej są równoważne rozwiązaniu
    równanian normalnego:

    X^t Y = X^t X b

    X^t X = [ sum x_i^2 , sum x_i; sum x_i, n ]

    X^t Y = [ sum y_i x_i, sum y_i ]

    ponieważ do rozwiązania b potrzeba 'odwrócić' macierz X^t X,

    b = (X^t X)^-1 X^t Y

    pownaa mieć ona jak najmniejsze uwarunkowania

    Przesunięcie x-ów na środek pomaga, bo maceirz jest diagonalna
    sum x_i=0
    X^t X = [ sum x_i^2 , 0; 0, n ]

    Najlepsze uwarunkowanie (po prostu 1) będzie, gdy sum x_i^2 == n
    (ale po przesunieciu do centrum nie wiem, czy to nawet ma jeszcze
    znaczenie).

    pzdr
    bartekltg










Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: