-
81. Data: 2010-02-05 06:55:43
Temat: Re: matlab taki wydajny?
Od: bartekltg <b...@g...com>
On 5 Lut, 04:43, Mariusz Marszałkowski <m...@g...com> wrote:
> W Pytonie też są takie gotowce jak uniwersalna szukaczka minimów?
Pewnie znajda sie lepsze szukaczki, ale ogolnie do abaw numerycznych
masz pakiety numpy i scipy.
pozdrawiam
bartekltg
-
82. Data: 2010-02-05 16:54:27
Temat: Re: matlab taki wydajny?
Od: Mariusz Marszałkowski <m...@g...com>
On 5 Lut, 07:55, bartekltg <b...@g...com> wrote:
> On 5 Lut, 04:43, Mariusz Marszałkowski <m...@g...com> wrote:
>
> > W Pytonie też są takie gotowce jak uniwersalna szukaczka minimów?
>
> Pewnie znajda sie lepsze szukaczki, ale ogolnie do abaw numerycznych
> masz pakiety numpy i scipy.
To bede musial sie rozejrzec, ile mozna pisac samemu ;)
Pozdrawiam
-
83. Data: 2010-02-05 17:17:02
Temat: Re: matlab taki wydajny?
Od: Mariusz Marszałkowski <m...@g...com>
On 5 Lut, 07:53, bartekltg <b...@g...com> wrote:
> On 3 Lut, 22:19, Mariusz Marszałkowski <m...@g...com> wrote:
>
> > liniowe. Domyslam sie ze z tak zdefiniowanym zadaniem nie ma problemu,
> > ale
> > po jednym rozwiazaniu trzeba utworzyc dodatkowa kolumne przez poddanie
> > nieliniowej funkcji kilku innych kolumny (na chybil tafil, albo
> > systematycznie wszystkie
> > kombinacjie) i podac najlepsze dopasowanie.
>
> Jesli masz na mysli fminsearch, to znajduje lokalne minimum
> i chyba nie najlepiej radzi sobie ze zbyt duza liczba
zmiennych.http://en.wikipedia.org/wiki/Nelder%E2%80%
93Mead_method
>
> Jesli dobrze rozumiem, chcesz miec jakis wklad kombinatoryczny.
Mam parametry wejsciowe x_i i np. jeden parametr wyjsciowy y.
Nastepnie rozszerzam parametry wejsciowe o jeden dodatkowy
przez poddanie nieliniowej funkcji kazdej kombinacji funkcja( x_i ,
x_j ).
Jesli mam 50 parametrow wejsciowych, to wychodzi 2500 kombinacji.
WIec trzeba 2500 razy ulozyc uklad rownan normalnych, kazdy
rozwiazac i podac kombinacje x_i, x_j ktora daje najlepsze
dopasowanie.
To co zwraca funkcja( x_i , x_j ) traktujemy jako 51-szy parametr.
> Tego ta funkcja nie zrobi. Jesli jednak dopuszczasz, aby w
> rozwiazaniu
> byly wszytkie, to niepotrzebne beda mialy maly wspolczynnik i tyle
To też dobra metoda, szczegolnie jesli do glownej przekatnej doda
sie pewne liczby wieksze od zera.
> (rozumiem, ze przez 'nieliniowosc' rozumiesz np to, ze wspolrzynnik
> jest odchyleniem rozkaldu gaussa, a nie, ze do symy wchodzi
> parametr*funkcja(wartosc kolumny) )
Raczej parametr * funkcja( x_i , x_j )
> Miliardy wierszy to gigabajty.
Niestety to moja zmora. Z reguly brakuje dobrych danych przy
data minning. Moje dane nie mieszcza sie na 10 nowoczesnych
dyskach. A moze jakas baza danych ma zaimplementowana
regresje liniowa dla wielu parametrow? Jakis odpowiednik
excelowskiego reglinp?
> Matlab nie musi byc wtedy najlepszym
Hmmm, dziwne, powinien miec opcje ze macierz lezy na
dysku w pliku tekstowym albo binarnym. To raczej
zwykla rzecz ze dane leza na dysku a w pamieci sa
tylko "zmienne algorytmu".
Pozdrawiam
-
84. Data: 2010-02-05 21:58:52
Temat: Re: matlab taki wydajny?
Od: bartekltg <b...@g...com>
On 5 Lut, 18:17, Mariusz Marszałkowski <m...@g...com> wrote:
> Mam parametry wejsciowe x_i i np. jeden parametr wyjsciowy y.
> Nastepnie rozszerzam parametry wejsciowe o jeden dodatkowy
> przez poddanie nieliniowej funkcji kazdej kombinacji funkcja( x_i ,
> x_j ).
> Jesli mam 50 parametrow wejsciowych, to wychodzi 2500 kombinacji.
> WIec trzeba 2500 razy ulozyc uklad rownan normalnych, kazdy
> rozwiazac i podac kombinacje x_i, x_j ktora daje najlepsze
> dopasowanie.
> To co zwraca funkcja( x_i , x_j ) traktujemy jako 51-szy parametr.
Nie trzeba za kazdym razem ukladac calego zagadnienia...
> > Tego ta funkcja nie zrobi. Jesli jednak dopuszczasz, aby w
> > rozwiazaniu
> > byly wszytkie, to niepotrzebne beda mialy maly wspolczynnik i tyle
>
> To też dobra metoda, szczegolnie jesli do glownej przekatnej doda
> sie pewne liczby wieksze od zera.
?
> Raczej parametr * funkcja( x_i , x_j )
Czyli to cały czas liniowe zagadneinie najmnieszych kwadratow.
Bawienie sie w nieliniowe solvery tylko dodanarzut.
> > Miliardy wierszy to gigabajty.
>
> Niestety to moja zmora. Z reguly brakuje dobrych danych przy
> data minning. Moje dane nie mieszcza sie na 10 nowoczesnych
> dyskach. A moze jakas baza danych ma zaimplementowana
> regresje liniowa dla wielu parametrow? Jakis odpowiednik
> excelowskiego reglinp?
To wcale nie jest tak duzo danych jak na zadanie, ktore chesz
rozwiazac. Przyjrzyj sie dokladnie zagadnieniu. Jesli nie macie
problemu z tym, ze rozwiazujesz to rownaniem normalnym
(uwarunkowanie etc) to jedyne co musisz zrobic z danymi
to policzyc pewna ilosc iloczynow skalarnych.
1225 <x_i,x_j>, 50 <x_i, y>
125000< x_i, f(x_j,x_k) > i 2500<y,f(x_i,x_j)>
Jesli bys chciel dodac wiecej niz tylko jedna,
'nieliniowa funkcja od tabelek' dojdzie cos rzedu
3mln elementow(chyba, ze .. dluzsza historia;).
Wszytko liczysz w jednym przebiegu odczytywania danych,
nastepnie bawisz sie jedynie z _malymi_ obiektami (51x51)
X.' * X i X.' * y ( X.' -transponowane X).
Samo policzenie tych iloczynow jest wiekszym problemem.
Zajmie to na nowym komputerze cos rzedu wieksze kilka godzin
na miliard danych:)
Sumowac tez trzeba sprytnie (albo odpowiednio podwyzszajac
przecyzje, lepiej sprytnie, nieco to zalezy od danych).
Dobrym pomyslem jest tez zastanowienie sie, czy iloscny skalarnego
mniej istotnych par nie mozna przyblizac, szacowan np za pomoca
znacznie mniejszego podwektora Wtedy i zagadnienie uwzgledniajace
52 parametry na zwyklym PC.
Moze potrzebujecie matematyka z delikatnym zamilowaniem do
numerkow? :-)
> > Matlab nie musi byc wtedy najlepszym
>
> Hmmm, dziwne, powinien miec opcje ze macierz lezy na
> dysku w pliku tekstowym albo binarnym. To raczej
> zwykla rzecz ze dane leza na dysku a w pamieci sa
> tylko "zmienne algorytmu".
To znacznie zwieksza czas. I chyba nie ma za czestych zastosowan.
Zobacz, ile czasu zajeloby mnozenie 2 macierzy kwadratowych
zajmujacych wiekszaosc Twojego ramu. Strzelmy 20000x20000
(3GB). 1000 razy dluzej niz 2000x2000.
Z drugiej storny gugiel sugeruje, ze cos wie o mnozeniu macierzy
na dyskach. Jednak podejrzewam, ze i tak raczej uzywa sie tego do
macierzy rzadkich (jakies guglowskie pozycjonowanie etc).
Twoje zagadnienie jest prostrze, programik czyta, mnozy, dodaje, goto
start;)
pozdrawiam
bartekltg
-
85. Data: 2010-02-06 00:26:24
Temat: Re: matlab taki wydajny?
Od: Mariusz Marszałkowski <m...@g...com>
On 5 Lut, 22:58, bartekltg <b...@g...com> wrote:
> On 5 Lut, 18:17, Mariusz Marszałkowski <m...@g...com> wrote:
>
> > Mam parametry wejsciowe x_i i np. jeden parametr wyjsciowy y.
> > Nastepnie rozszerzam parametry wejsciowe o jeden dodatkowy
> > przez poddanie nieliniowej funkcji kazdej kombinacji funkcja( x_i ,
> > x_j ).
> > Jesli mam 50 parametrow wejsciowych, to wychodzi 2500 kombinacji.
> > WIec trzeba 2500 razy ulozyc uklad rownan normalnych, kazdy
> > rozwiazac i podac kombinacje x_i, x_j ktora daje najlepsze
> > dopasowanie.
> > To co zwraca funkcja( x_i , x_j ) traktujemy jako 51-szy parametr.
>
> Nie trzeba za kazdym razem ukladac calego zagadnienia...
Chyba jednak trzeba, ponieważ podczas budowania układu w każdym z
równań występuje mnożenie przez nowy element funk( x_i , x_j ) ?
> > To też dobra metoda, szczegolnie jesli do glownej przekatnej doda
> > sie pewne liczby wieksze od zera.
>
> ?
Mamy wektory doświadczalne których elementy to x_1, x_2, y.
Normalnie szukamy najlepszego dopasowania funkcją:
f(x) = a * x_1 + b * x_2 + c
Czyli minimalizujemy sume ( a * x_1 + b * x_2 + c - y )^2
Ale możemy też minimalizować trochę inne wyrażenie:
( a * x_1 + b * x_2 + c - y )^2 + C1 * a^2 + C2 * b^2 + C3 * c^2
Jak policzysz teraz pochodne tego wyrażenia po a,b,c;
przyrównasz do zera, stworzysz układ równań liniowych,
to wyjdzie że główna przekątna została zwiększona o
odpowiednio 2*C1,2*C2,2*C3. W ten sposób automatycznie
dajesz karę za duże wartości parametrów, a wiec parametry
o mniejszym znaczeniu mają stosunkowo mniejsze wartości.
> > Raczej parametr * funkcja( x_i , x_j )
>
> Czyli to cały czas liniowe zagadneinie najmnieszych kwadratow.
> Bawienie sie w nieliniowe solvery tylko dodanarzut.
Tak, to cały czas dopasowanie najmniejszymi kwadratami. Po
zbadaniu siłowym, po wyczuciu intuicyjnym wybiera się
funkcje które dzialaja najlepiej i dopiero za drugim razem
optymalizacja nieliniowa.
> > > Miliardy wierszy to gigabajty.
>
> > Niestety to moja zmora. Z reguly brakuje dobrych danych przy
> > data minning. Moje dane nie mieszcza sie na 10 nowoczesnych
> > dyskach. A moze jakas baza danych ma zaimplementowana
> > regresje liniowa dla wielu parametrow? Jakis odpowiednik
> > excelowskiego reglinp?
>
> To wcale nie jest tak duzo danych jak na zadanie, ktore chesz
> rozwiazac. Przyjrzyj sie dokladnie zagadnieniu. Jesli nie macie
> problemu z tym, ze rozwiazujesz to rownaniem normalnym
> (uwarunkowanie etc)
Pojawiają się problemy ze złym uwarunkowaniem. Wtedy wywalam
całe równanie :)
> Jesli bys chciel dodac wiecej niz tylko jedna,
> 'nieliniowa funkcja od tabelek' dojdzie cos rzedu
> 3mln elementow(chyba, ze .. dluzsza historia;).
Najpierw jedną, później drugą, później trzecią...
W zaleznosci jaka daje jakie efekty, troche zgadywania,
w koncu rozrasta sie i na koniec jeszcze metoda nieliniowa.
> Wszytko liczysz w jednym przebiegu odczytywania danych,
> nastepnie bawisz sie jedynie z _malymi_ obiektami (51x51)
> X.' * X i X.' * y ( X.' -transponowane X).
>
> Samo policzenie tych iloczynow jest wiekszym problemem.
> Zajmie to na nowym komputerze cos rzedu wieksze kilka godzin
> na miliard danych:)
Policzenie tego jest proporcjonalne do odczytu danych z dysku.
Ale czasami mam bardzo dużo zer, wtedy moza skompresowac
i trzymac wszystko w RAM.
> Sumowac tez trzeba sprytnie (albo odpowiednio podwyzszajac
> przecyzje, lepiej sprytnie, nieco to zalezy od danych).
Mozna robic dwie sumy, jedna mala, a druga duza. Jak ta mala
urosnie na tyle, alby miala wplyw na duza to mozna polaczyc
obie. Nie bawilem sie w to nigdy. Ciekawe czy da sie rozwiazac
stabilniej uklad rownan, jakbym kazdy parametr mial wyrazony
jako dwie sumy? Hmmm... moze to prosty sposob na zwiekszenie
stabilnosci?
> Dobrym pomyslem jest tez zastanowienie sie, czy iloscny skalarnego
> mniej istotnych par nie mozna przyblizac, szacowan np za pomoca
> znacznie mniejszego podwektora Wtedy i zagadnienie uwzgledniajace
> 52 parametry na zwyklym PC.
> Moze potrzebujecie matematyka z delikatnym zamilowaniem do
> numerkow? :-)
Raczej potrzebujemy cudu :)
> Twoje zagadnienie jest prostrze, programik czyta, mnozy, dodaje, goto
> start;)
Tak, wiem :)
Pozdrawiam
-
86. Data: 2010-02-06 01:26:01
Temat: Re: matlab taki wydajny?
Od: bartekltg <b...@g...com>
On 6 Lut, 01:26, Mariusz Marszałkowski <m...@g...com> wrote:
> Chyba jednak trzeba, ponieważ podczas budowania układu w każdym z
> równań występuje mnożenie przez nowy element funk( x_i , x_j ) ?
Podstaw sobie wirtualnie nowa tabelka x_{51+50j+i}=funk( x_i , x_j )
i nie mysl o niej inaczej.
> Tak, to cały czas dopasowanie najmniejszymi kwadratami. Po
> zbadaniu siłowym, po wyczuciu intuicyjnym wybiera się
> funkcje które dzialaja najlepiej i dopiero za drugim razem
> optymalizacja nieliniowa.
Ale ja w tym zagadnieniu dalej nigdzie nie widze miejsca z
nieliniowoscia.
Liniowosc w regresji dotyczy sie liniowej zaleznosci od parametrow,
a nie danych.
> Policzenie tego jest proporcjonalne do odczytu danych z dysku.
> Ale czasami mam bardzo dużo zer, wtedy moza skompresowac
> i trzymac wszystko w RAM.
Na odczyt 50 zmiennych (jedna linijka danych) wykonujesz
kilkaset tysiecy operacji zmiennoprzecinkowych.
Za to pozniej masz luksusowa sytuacje.
>
> > Sumowac tez trzeba sprytnie (albo odpowiednio podwyzszajac
> > przecyzje, lepiej sprytnie, nieco to zalezy od danych).
>
> Mozna robic dwie sumy, jedna mala, a druga duza. Jak ta mala
> urosnie na tyle, alby miala wplyw na duza to mozna polaczyc
> obie. Nie bawilem sie w to nigdy. Ciekawe czy da sie rozwiazac
Sposobow jest wiele. Ktory wybrac, zalezy nieco od danych.
> stabilniej uklad rownan, jakbym kazdy parametr mial wyrazony
> jako dwie sumy? Hmmm... moze to prosty sposob na zwiekszenie
> stabilnosci?
Niewiele to pomoze.
> Raczej potrzebujemy cudu :)
Atam. Chyba, ze czegos istotnego o problemie nie dopowiedziales.
Propozycje podtrzymuje;p
pozdrawiam
bartek
-
87. Data: 2010-02-06 05:50:30
Temat: Re: matlab taki wydajny?
Od: Mariusz Marszałkowski <m...@g...com>
On 6 Lut, 02:26, bartekltg <b...@g...com> wrote:
> On 6 Lut, 01:26, Mariusz Marszałkowski <m...@g...com> wrote:
>
> > Chyba jednak trzeba, ponieważ podczas budowania układu w każdym z
> > równań występuje mnożenie przez nowy element funk( x_i , x_j ) ?
>
> Podstaw sobie wirtualnie nowa tabelka x_{51+50j+i}=funk( x_i , x_j )
> i nie mysl o niej inaczej.
No chyba dokładnie tak robię, ale nie widzę cały czas sposobu aby
nie nie budować tabelki od nowa.
> Ale ja w tym zagadnieniu dalej nigdzie nie widze miejsca z
> nieliniowoscia.
Funkcje nieliniowe mają parametry. Dobierane są one intuicyjnie/siłowo
i
jest rozwiązywane równanie. Jeśli dopasowanie jest dobre, to metodą
nieliniowa dobierane są "dokładnie".
> Atam. Chyba, ze czegos istotnego o problemie nie dopowiedziales.
> Propozycje podtrzymuje;p
Uproscilem wszystko na potrzby szybkiego listu na forum. Te dane
to maskakra. Wydaje się że w danych nie ma wiecej zaleznosci niz
znalezlismy zaraz na poczatku, albo są nadzywczaj skomplikowane.
Pozdrawiam
-
88. Data: 2010-02-06 22:22:02
Temat: Re: matlab taki wydajny?
Od: Roman Werpachowski <r...@g...com>
On 4 Lut, 10:40, Adam Przybyla <a...@r...pl> wrote:
> Roman Werpachowski <r...@g...com> wrote:
> > On 3 Feb, 17:23, Adam Piotrowski <k...@i...pl> wrote:
> >> Wiktor S. pisze:
>
> >> >> Dlaczego mam sie nie dziwic? Matlab chyba jest cholernie drogi?
>
> >> > Mnie zastanawia, jakie sa zastosowania, w których sie faktycznie OPLACA
> >> > wybulic TAKI majatek na Matlaba... bo jakies chyba sa, skoro program zyje?
>
> >> Stosowany jest czesto do obliczen inzynierskich na uczelniach -
> >> wystarczy podstawowa wiedza na temat programowania a mozna pisac
> >> zaawansowane programy symulujace rozne zjawiska. Z ciekawszych
> >> zastosowan Matlaba jak dla mnie to ... sterowanie praca akceleratora
> >> liniowego
>
> > W ogole to przeciez Matlab nie jest taki drogi, zeby jakis bank czy
> > hedge fund nie mogl kupic po licencji dla kazdego analityka (ktory nie
> > musi byc programista, zeby napisac calkiem wydajny kod numeryczny).
>
> > Druga potezna zaleta Matlaba jest latwa wizualizacja danych, to czesto
> > wazniejsze niz predkosc mnozenia macierzy.
>
> ... hihi, to ciekawe czemu DoE sponsoruje Pythona aby tyle nie wydawac
> na matlaba;-) Z powazaniem
> Adam Przybyla
Nie wiem, ich się spytaj, na pewno Ci wyjaśnią.
RW
-
89. Data: 2010-02-08 21:38:25
Temat: Re: matlab taki wydajny?
Od: bartekltg <b...@g...com>
On 6 Lut, 06:50, Mariusz Marszałkowski <m...@g...com> wrote:
> On 6 Lut, 02:26, bartekltg <b...@g...com> wrote:> On 6 Lut, 01:26, Mariusz
Marszałkowski <m...@g...com> wrote:
>
> > > Chyba jednak trzeba, ponieważ podczas budowania układu w każdym z
> > > równań występuje mnożenie przez nowy element funk( x_i , x_j ) ?
>
> > Podstaw sobie wirtualnie nowa tabelka x_{51+50j+i}=funk( x_i , x_j )
> > i nie mysl o niej inaczej.
>
> No chyba dokładnie tak robię, ale nie widzę cały czas sposobu aby
> nie nie budować tabelki od nowa.
Obiekt A = X.' * X ma rozmiar tylko 51x51 (50kilka). Nie musisz
powrotnie
przeliczac wszytkiego, a jedynie elementy na 'brzegu'.
Pomysl byl taki, zeby policzyc wiecej roznych elementow dla tej
tabelki w jednym przebiegu po dysku, a dopioero pozniej ukladac z
nich
A= X.' * X i X.' * y
> Funkcje nieliniowe mają parametry. Dobierane są one intuicyjnie/siłowo
> i
> jest rozwiązywane równanie. Jeśli dopasowanie jest dobre, to metodą
> nieliniowa dobierane są "dokładnie".
Pamietaj o sztuczkach z pracowni fizycznej. Czesc 'nieliniowosci'
da sie wyrzucic odpowiednimi sztuczkami.
> Uproscilem wszystko na potrzby szybkiego listu na forum. Te dane
> to maskakra. Wydaje się że w danych nie ma wiecej zaleznosci niz
> znalezlismy zaraz na poczatku, albo są nadzywczaj skomplikowane.
Masz ogrom danych a zaleznosci nie tak wiele. Bardzo prawdopobne,
ze jesli wezmiesz tylko czesc danych dopasowanie bedzie tez dobre.
Wersja naiwna to losowo wybrana pewna ilosc(nadal duza) danych.
W wersji zaawansowanej mozesz pogoglac za ekspanderami.
Na podzbiorze dobierasz dane, poznniej liniowo(zaburzasz liniowo
nieliniowe czlony) sprawdzasz dopasowanie na calych danych.
Jesli sie wiele nie zmienilo, wynik jest dobry.
pzodrawiam
bartekltg