Szukanie współczynników nieliniowego równania z trzema niewiadomymi

0

Witam,
Mam 3 argumenty, oraz wynik obliczeń oparty na tych 3 wartościach. W jaki sposób dobrać współczynniki, do równania z 3 niewiadomymi? Znam przedział wartości, oraz dysponuję wieloma tysiącami próbek (wartości i wynik).
pozdrawiam.

0

Czyli chcesz znaleźć model, tj. funkcję postaci y = f(x_1, x_2, x_3) wiążącą zmienne wejściowe z wyjściowymi tak, aby móc później przewidywać jej wartości?

Jeśli tak, to możesz do tego użyć regresji nieliniowej.
Z wartości wejściowych budujesz macierz X o liczbie wierszy równej liczbie próbek z kolumnami np.: 1(1 w każdym wierszu), x1, x2, x12, x22, x1 * x2, z wyjściowych wektor y, szukasz wektora współczynników b.
W tym celu rozwiązujesz równanie b = (X<sup>T X)</sup>{-1} X^Ty
To równanie jest rozwiązaniem optymalnym zadania minimalizacji sumy kwadratów błędów. (Czyli różnic między modelowaną a rzeczywistą wartością y.)
Następnym etapem jest obliczenie wartości współczynnika korelacji wielowymiarowej R, założenie hipotezy o nieistotności modelu i sprawdzenie jej testem F Fishera Snedecora, tj. obliczenie wartości F i sprawdzenie czy jest większa niż krytyczna wartość F wyznaczona z tablic (albo obliczona ze wzoru) o K i N-K-1 stopniach swobody (N - liczba prób, K - liczba parametrów modelu). Jeżeli F > Fkr, to hipoteza jest odrzucana, więc model jest prawidłowy.
Jeśli nie, to odrzuca z modelu współczynniki, których wartość funkcji t jest mniejsza niż krytyczna wyznaczona na podstawie testu t Studenta o N-K-1 stopniach swobody.
Wartości t dla każdego współczynnika oblicza się z wzoru.:
t = \frac{|b_k|}{\frac{1}{N - K - 1}(y<sup>T y-b</sup>T X^T y)\sqrt{c_{kk}}}
Gdzie k, to numer współczynnika, a c_{kk} jest diagonalnym elementem macierzy (X<sup>T X)</sup>{-1}.

Jeśli nie chcesz tego robić samodzielnie, to pewno Matlab, Statistica albo Tanagra to potrafią.

0

a jakie to równanie?

0

A wiesz jaka jest zależność między tymi współczynnikami i wartością wyjściową? Z tego co piszesz brzmi to jakbyś zakładał, że jest to zależność liniowa i chcesz rozwiązać zwykłe równanie, czy tak?

0

Dzięki somekind, spróbuję zrozumieć to co napisałeś i to przetestować. Czekam również na inne propozycje rozwiązania zagadki.

0

Z tym że rozwiązanie somekinda jest czysto algebraiczne i może nie przystawać do rzeczywistości, gdy dane mają swoje fizyczne znaczenie. Gdy tak jest - model buduje się, biorąc pod uwagę jednostki fizyczne.

0
Marcin napisał(a)

Dzięki somekind, spróbuję zrozumieć to co napisałeś i to przetestować. Czekam również na inne propozycje rozwiązania zagadki.

Jaśniejszy opis może jest tutaj: http://m6.mech.pk.edu.pl/~skoczyp/mp/MP_04_regresja.pdf lub tutaj: http://www.uz.zgora.pl/~ducinski/pliki/rn.pdf
A dobra książka w tym temacie: http://library.northsouth.edu/Upload/Applied%20Regression%20Analysis.pdf

Inne propozycje? Jeśli metody analityczne Ci się nie podobają, to regresję możesz przeprowadzić przy użyciu sieci neuronowej.

ElevenEleven napisał(a)

Z tym że rozwiązanie somekinda jest czysto algebraiczne i może nie przystawać do rzeczywistości, gdy dane mają swoje fizyczne znaczenie. Gdy tak jest - model buduje się, biorąc pod uwagę jednostki fizyczne.

Hmm... Myślę, że nazwanie mnie autorem tego jest sporym nadużyciem. ;)
Żaden model nie będzie w pełni odwzorowywał rzeczywistości, taka jest już natura modeli, zawsze zakłada się też istnienie błędów w modelowanych wartościach.

Co masz na myśli pisząc o fizycznym znaczeniu i braniu pod uwagę jednostek? Czy to, że modele dla potrzeb fizycznych buduje się inaczej niż ekonometryczne czy biologiczne?

0
somekind napisał(a)

Co masz na myśli pisząc o fizycznym znaczeniu i braniu pod uwagę jednostek? Czy to, że modele dla potrzeb fizycznych buduje się inaczej niż ekonometryczne czy biologiczne?

To, że jeżeli wejście X1 jest w metrach, wejście X2 w sekundach, a wyjście w m/s, to model może być jedynie postaci AX1/X2, choćby liczbowo bardziej pasowało 3.965X1 + 2.72X1X2 + 4.54(X2)^2 - 10.31415

0

@ElevenEleven, to wygląda sensownie na "zdrowy chłopski rozum", ale przekreśla możliwość znalezienia modeli wielu zjawisk, jeśli wymiary zmiennych nie pasują. Co wtedy?
A jeżeli przeprowadzisz analizę głównych składowych, to jakie masz jednostki? :)

0

Chcesz do tego skany skryptu? :-P Tydzień temu miałem na laborce MNK.

0
somekind napisał(a)

@ElevenEleven, to wygląda sensownie na "zdrowy chłopski rozum", ale przekreśla możliwość znalezienia modeli wielu zjawisk, jeśli wymiary zmiennych nie pasują. Co wtedy?

Jeżeli zjawisko jest czysto fizyczne, to jednostki po prostu muszą pasować. Trzeba pierw wyprowadzić ogólny model, a potem jego współczynniki. Jeżeli dane się z modelem średnio zgadzają, można się zastanowić, czy znacznej ich części nie stanowią outliers (obserwacja odstająca - po angielsku lepiej brzmi ;)). Wtedy - całość opakować algorytmem ransac, lmeds lub pochodnym/podobnym. W najgorszym wypadku - wyjście zależy od jeszcze innego wejścia, z którego danych nie mamy (wtedy jesteśmy w ciemnej d**** ;)).
Nawet w zjawiskach "niezbyt fizycznych", trzeba weryfikować wyniki, które choćby były liczbowo poprawne, są abstrakcyjne, np. jeżeli cena papryki rośnie o 2zł/kg, a poparcie PiSu o 2pp., to w Warszawie ciśnienie rośnie o 40hPa.

0

Tak w ogóle, to wszystko zależy jeszcze od tego, czy jest to układ liniowy względem parametrów, a nieliniowy względem wejść (bo ja o takim pisałem) czy nieliniowy względem parametrów.

ElevenEleven napisał(a)

Jeżeli zjawisko jest czysto fizyczne, to jednostki po prostu muszą pasować.

No chyba, że zredukowano ich wymiar, wtedy jednostek nie ma wcale, prawda?
Ale pewno zjawiska fizyczne są łatwiejsze w modelowaniu, bo opierają się w dużej mierze na poznanych i opisanych procesach.

Nawet w zjawiskach "niezbyt fizycznych", trzeba weryfikować wyniki, które choćby były liczbowo poprawne, są abstrakcyjne, np. jeżeli cena papryki rośnie o 2zł/kg, a poparcie PiSu o 2pp., to w Warszawie ciśnienie rośnie o 40hPa.

Nie no, ja myślałem, że my piszemy o modelowaniu, a nie o badaniu losowych korelacji. :)

Podczas modelowania wiemy przecież co i na podstawie czego będziemy modelować. Dobieramy takie zmienne niezależne, o których wiemy, że mają wpływ na zmienną zależną, nie wiemy tylko jaka to jest zależność. Być może w modelach fizycznych jednostki muszą się zgadzać, ale np. przy takich procesach biologicznych, w których trudniej jest założyć charakter relacji, bo nie znamy wszystkich mechanicznych czy chemicznych aspektów działania organizmu, może się chyba okazać, że np. temperatura organizmu zależy od iloczynu masy spożytego selera i podanej aspiryny podzielonego przez powierzchnię skóry oraz pomnożonego przez początkową temperaturę.

0

Nawet w przypadku zjawisk fizycznych nie wszystkie równania opiera się na teorii. Na przykład przy zjawiskach występujących przy mieszaniu dwóch cieczy (głównie objętość i entalpia nadmiarowa) korzysta się przy weryfikacji wyników i wyznaczaniu współczynników aktywności z równania Redlicha-Kistera. Jest to równanie czysto empiryczne, zbliżone do prostej regresji wielomianowej. Wartości parametrów tego równania nie mają żadnego sensu fizycznego oraz nie da się ich przewidzieć.

0
somekind napisał(a)

Podczas modelowania wiemy przecież co i na podstawie czego będziemy modelować. Dobieramy takie zmienne niezależne, o których wiemy, że mają wpływ na zmienną zależną, nie wiemy tylko jaka to jest zależność.

No właśnie - nie zawsze wiemy. Jak czynniki ekonomiczne przekładają się na - wspomniane już - poparcie partii politycznych? Które uwzględnić? Między innymi tym zajmuje się knowledge acquisition. Patrząc z szerszej perspektywy, sprawa jest naprawdę skomplikowana. Ale jeżeli mamy już gotowe dane tak jak tutaj (sami nie musimy ich zbierać), to połowa pracy za nami ^^.

0

To teraz pytanie zagadka - we wzorze na t brana jest wartość c_{kk} czyli diagonalny element macierzy (X<sup>T X)</sup>{-1}. Wartość ta jest pierwiastkowana, więc wypadałoby, żeby była dodatnia. Co jednak, gdy jest ujemna?
Coś mi się kojarzy, że ktoś kiedyś mówił, że elementy tej macierzy są wartościami kowariancji, zaś diagonalne są korelacjami i nie mogą być ujemne. Ale na ile to prawda, to nie wiem, nigdzie nie znajduję potwierdzenia. :/
Zatem jeśli mi wychodzą ujemne, to znaczy, że model jest do d**y, czy np. skopałem odwracanie macierzy?

0

A liczysz zwykłe odwrócenie macierzy czy może takie odwrócenie: http://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_pseudoinverse ?

0
0x200x20 napisał(a)

A liczysz zwykłe odwrócenie macierzy czy może takie odwrócenie: http://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_pseudoinverse ?

Normalnie odwracam metodą eliminacji Gaussa-Jordana. To źle? Macierz 45x45, elementy mają wartości od -105829792963298 do 193538492812295. Dla testowych macierzy działa prawidłowo.

0

Pobawiłem się wczoraj Scilabem i zrozumiałem wreszcie, czemu wszyscy narzekają na francuskie samochody i czemu Ariane 5 miała awarię. W skrócie: odczyt 1,7 MB pliku CSV trwa kilka minut (Excel robi to natychmiast), mnożenie macierzy nie zawsze się udaje, a na zapis do CSV brakuje mu pamięci (8GB). Dobrze, że w czasach budowy Wieży Eiffla nie było jeszcze Scilaba, bo efektem byłaby studnia.

Okazało się, że dzięki swojemu niespotykanemu geniuszowi wyprzedziłem (kolejny już raz) nasze czasy (a nawet radzieckich naukowców) i napisałem program, który odwraca każdą macierz, również takie, które zdaniem matematyków-teoretyków są nieodwracalne. ;) No i stąd brały się moje ujemne korelacje. Matlab potwierdził moje przypuszczenia komunikatem "matrix is close to singular or badly scaled", mimo że niby jakąś wyliczył (jakiś niezdecydowany).

Tak czy siak, jedna kwestia jest nierozwiązana - jak rozumieć i co zrobić w sytuacji, w której macierz X^T X jest nieodwracalna? Model jest całkowicie bez sensu? Odrzucić losowy parametr?

0

Tak jak pisałem - zastosować Moore–Penrose pseudoinverse (w matlabie pinv zamiast inv).
Nawiasem mówiąc jeżeli macierz jest nieodwracalna to prawdopodobnie masz jakieś zależoności liniowe między atybutami.

0

Wydaje mi się, że Xt*X jest macierzą dodatnio określoną, dlatego na pewno jest odwracalna. Warto sprawdzić ^^.

0

Chyba najprostszy przykład:
X= [1 1; 1 1];
Y = X'*X;
inv(Y)
pinv(Y)

0

Tylko wtedy wzór

\hat{b} = (X<sup>T X)</sup>{-1} X^Ty

Zamienia się na:

\hat{b} = X^{+}y

Gdzie X^{+} to pseudoodwrotność.

http://mathworld.wolfram.com/Moore-PenroseMatrixInverse.html

0
0x200x20 napisał(a)

Nawiasem mówiąc jeżeli macierz jest nieodwracalna to prawdopodobnie masz jakieś zależoności liniowe między atybutami.

Czyli źle uwarunkowane zdanie? Jest w ogóle sens liczyć tę pseudoinwersję w takim razie? Czy są jakieś szanse, że wyjdzie z tego jakiś sensowny model?
No i czy potem da się przeprowadzić weryfikację parametrów modelu testem t Studenta, czy znowu wyjdą jakieś głupie wartości?

0

Jak masz tylko 18 atrybutów to możesz sam poszukać i usunąć atrybuty, które są od się zależnie liniowo. Albo zastosować któryś z algorytmów redukcji wymiaru (chociażby policzyć macierz korelacji i zobaczyć między którymi atrybutami wartość jest równa +/-1).
A sens liczeniia pinv zamiast inv jest taki, że pinv został stworzony do radzenia sobia z liniowo zależnymi danymi, z czym zwykły inv sobie nie radzi. pinv zwróci przybliżoną odwrotność macierzy (w przypadku gdy macierz jest nieodwracalna), tak więc wciąż możesz tego użyć do zbudowania modelu.
Nie mam pojęcia jak to będzie działać z testem t studenta - może zamiast wiekowych testów statystycznych sprzed ery komputerów lepiej użyć Cross Validacji?

0

18 atrybutów mam przed PCA, do budowy macierzy wejść zostaje mi ich 8. Z tego, co zauważyłem, to liniowe zależności wychodzą dla kolumn będących iloczynem dwóch atrybutów, nie ma między nimi korelacji równych 1, ale są większe niż 0.99.
Używam t Studenta, bo we wszystkich materiałach z tej dziedziny jakie znalazłem jest o nim mowa. O ile się orientuję, cross validation polega na podziale zbioru wejściowego na podzbiory uczące i testowe, więc to jest chyba inny poziom abstrakcji niż test istotności parametrów?

0

18 atrybutów mam przed PCA, do budowy macierzy wejść zostaje mi ich 8. Z tego, co zauważyłem, to liniowe zależności wychodzą dla kolumn będących iloczynem dwóch atrybutów, nie ma między nimi korelacji równych 1, ale są większe niż 0.99

Generalnie chodziło o 'wysoką' wartość współczynnika korelacji. 1 to by było gdyby dane były idealnie niezaszumione.
Jeżeli chodzi o Cross Walidację - to jest po prostu symulacja prawdziwej sytuacji. Dzielisz zbiór na część znaną dla algorytmu i część nieznaną - patrzysz jak twój model nauczony na danych znanych przewiduje wartości danych nieznanych. W przeciwieństwie do testu t-studenta taki test nie robi żadnych założeń co do rozkładu danych (z tego co pamiętam test t-studenta zakłada, że dane są losowane z rozkładu normalnego). Kiedyś używano testu t-studenta ponieważ wymaga mniej obliczeń, co było błogosławieństwem jak się wszystko liczyło na kartce. Natomiast teraz sytuacja się trochę zmieniła :]
Test t-studenta jest wciąż dobry jak masz małą ilość próbek, ale to nie jest Twoja sytuacja.

0
0x200x20 napisał(a)

Jeżeli chodzi o Cross Walidację - to jest po prostu symulacja prawdziwej sytuacji. Dzielisz zbiór na część znaną dla algorytmu i część nieznaną - patrzysz jak twój model nauczony na danych znanych przewiduje wartości danych nieznanych.

Wydaje mi się, że weryfikację modelu dla danych testowych przeprowadza się tak czy siak w każdej metodzie.
Natomiast nie bardzo rozumiem, jak tą metodą mam odrzucić najgorszy parametr? No chyba, że zamiast pracy krokowej mam wyznaczyć wszystkie możliwe modele, a następnie obliczyć sumę błędów dla każdego z nich dla zbioru testowego i wybrać najlepszy. Tylko tych modeli będzie bardzo dużo.

W przeciwieństwie do testu t-studenta taki test nie robi żadnych założeń co do rozkładu danych (z tego co pamiętam test t-studenta zakłada, że dane są losowane z rozkładu normalnego).

Konkretnie, zakłada się stochastyczną niezależność i normalność zakłóceń.

0

Jeśli test t-studenta służy Ci tylko jako wskazówka do odrzucania parametrów to OK. Natomiast do walidacji modelu to się średnio nadaje.
Nawiasem mówiąc istnieje sposób na automatyczne osłabienie niektórych nieistotnych współczynników: po angielsku Regularization. Tu masz to opisane: http://cs229.stanford.edu/notes/cs229-notes5.pdf

Natomiast nie bardzo rozumiem, jak tą metodą mam odrzucić najgorszy parametr? No chyba, że zamiast pracy krokowej mam wyznaczyć wszystkie możliwe modele, a następnie obliczyć sumę błędów dla każdego z nich dla zbioru testowego i wybrać najlepszy. Tylko tych modeli będzie bardzo dużo.

Będzie dokładnie 2^8 czyli wcale nie tak dużo. Czyli prosty brute force w tym przypadku to nie głupi pomysł.

0
0x200x20 napisał(a)

Jeśli test t-studenta służy Ci tylko jako wskazówka do odrzucania parametrów to OK. Natomiast do walidacji modelu to się średnio nadaje.

Do walidacji modelu używam F-Snedecora.

Będzie dokładnie 2^8 czyli wcale nie tak dużo. Czyli prosty brute force w tym przypadku to nie głupi pomysł.

Macierz wejść dla modelu liniowego ma 9 kolumn (8 zmiennych objaśniających + stała). Ale dla modelu kwadratowego będzie ich już 45, a 2^45, to jest już chyba raczej dużo.

Dzięki za linka, może coś wykombinuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1