eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingno i co z tymi algorytmami genetycznymi?
Ilość wypowiedzi w tym wątku: 14

  • 1. Data: 2009-10-22 00:52:05
    Temat: no i co z tymi algorytmami genetycznymi?
    Od: Mariusz Marszałkowski <m...@g...com>

    Powitać

    Jest dana macierz M, co ma R wierszy i C kolumn.
    Kolumny mają średnio V różnych wartości.
    Jest dana funkcja F odwzorowująca iloczyn kartezjański
    wierszy i klas RxK w zbiór liczb całkowitych.

    Szukane: drzewo klasyfikujące, binarne, składające się z N węzłów
    decyzyjnych (i N+1 liści), które przypisze wierszom takie klasy,
    alby
    suma F po wszystkich wierszach była bliska maksymalnej.

    Upraszczając, warunki w węzłach drzewa ograniczmy do M_ij <= C_j,
    gdzie C_j jest jedną z wartości kolumny j.
    Kolejne uproszczenie, niech drzewo składa się tylko z jednego
    węzła N=1 decyzyjnego i dwóch liści.

    Podejście bardzo naiwne:
    1) Weź wszystkie warunki, których jest VxC
    2) Każdy warunek sprawdź na wszystkich rekordach R, czyli
    VxCxR operacji
    3) Uwzględnij wszystkie kombinacje liści: K^(N+1)=KxK, razem
    VxCxRxKxK operacji

    Podejście mniej naiwne:
    1) Zbuduj sumy częściowe F dla każdej wartości w kolumnie i dla
    każdego sposobu przypisania jej do klasy: CxRxK operacji
    2) Posortuj sumy częsciowe po wartościach kolumny, mamy
    Cx(RxK+V*LG(V)) operacji
    3) Wybierz maksymalną sumę sum częściowych dla kombinacji
    klas (liści), mamy Cx(RxK+VxLg(V)+VxK) operacji

    Porównujemy jeden wzór z drugim:
    Cx(RxK+VxLg(V)+VxK)
    ----------------------------------
    VxCxRxKxK

    Co w przybliżeniu równa się:
    R + V*Lg(V) + V
    ------------------------
    VxRxK

    1 Lg(V) 1
    ----- + ---------- + ---------
    VxK RxK RxK

    Dla dużej ilości rekordów można zaokrąglić do
    1
    -----
    VxK

    Co przykładowo przy 5 klasach i 50 wartościach
    w kolumnie daje około: 1/50/5, czyli jedną dwieście
    pięćdziesiątą czasu wykonania "algorytmu bardzo
    naiwnego". Jeśli drzewo ma więcej węzłów niż
    jeden, stosunek obu czasów wykonania maleje
    wykładniczo.

    Jak działa algorytm genetyczny na dwóch
    powyżej opisanych algorytmów? Otóż działa
    tak jak pierwszy, czyli "bardzo naiwny". Algorytm
    genetyczny losuje (poniekąd to nie jest losowanie,
    ale inteligentny dobór) kombinacje reguł dla
    drzewa decyzyjnego a następnie testuje drzewo
    na wszystkich rekordach.

    Uważam że porównanie czasów obu algorytmów
    stawia algorytm genetyczny w bardzo niekorzystnej
    sytuacji. Testy które wykonałem zdają się to
    potwierdzać. W zależności od danych, dobrym
    algorytmem wyczerpującego przeszukania da
    się zbudować optymalne drzewo decyzyjne
    składające się 2-4 węzłowe. Algorytmem
    genetycznym też można, ale znalezienie równie
    dobrego rozwiązania przez algorytm genetyczny w
    tym samym czasie, jest znacznie mniej prawdopodobne,
    właśnie rzędu (1/250)^2 - (1/250)^4.

    Pozdrawiam serdecznie




  • 2. Data: 2009-10-22 09:39:41
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: "Filip Sielimowicz" <s...@t...tez.wp.pl>


    Użytkownik "Mariusz Marszałkowski" <m...@g...com> napisał w wiadomości
    news:65951300-fad8-4492-9ecb-724eb64dd4a7@g23g2000vb
    r.googlegroups.com...

    >Jak działa algorytm genetyczny na dwóch
    >powyżej opisanych algorytmów? Otóż działa
    >tak jak pierwszy, czyli "bardzo naiwny". Algorytm
    >genetyczny losuje (poniekąd to nie jest losowanie,
    >ale inteligentny dobór) kombinacje reguł dla
    >drzewa decyzyjnego a następnie testuje drzewo
    >na wszystkich rekordach.

    Zastosowałeś naiwny AG (naiwne kodowanie i naiwna
    funkcja oceny) - to masz wynik, jaki masz ;)))


  • 3. Data: 2009-10-22 10:27:18
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 22 Paź, 11:39, "Filip Sielimowicz" <s...@t...tez.wp.pl>
    wrote:

    > Zastosowałeś naiwny AG (naiwne kodowanie i naiwna
    > funkcja oceny) - to masz wynik, jaki masz ;)))

    Zaproponuj lepszy AG.
    Pozdrawiam


  • 4. Data: 2009-10-22 10:39:31
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: "Filip Sielimowicz" <s...@t...tez.wp.pl>


    Użytkownik "Mariusz Marszałkowski" <m...@g...com> napisał w wiadomości
    news:d824d3b8-0e3e-40ab-a2f9-aaba31b6be79@l31g2000vb
    p.googlegroups.com...
    On 22 Paź, 11:39, "Filip Sielimowicz" <s...@t...tez.wp.pl>
    wrote:

    > Zastosowałeś naiwny AG (naiwne kodowanie i naiwna
    > funkcja oceny) - to masz wynik, jaki masz ;)))

    Wiesz - może ja czegoś nie rozumiem - ale moim zdaniem
    nie opisałeś w jaki sposób zbudowałeś chromosom,
    jak wyglądało krzyżowanie i jak funkcja oceny.
    Masz liniowy chromosom, w który wrzucasz na sztywno
    wszystkie współczynniki z węzłów drzewa decyzyjnego ?

    Istotą AG jest składanie rozwiązania z kombinacji rozwiązań
    cząstkowych. Czy u Ciebie wymiana fragmentów chromosomów
    zawierajacych rozwiązania 'dobre' daje prawdopodobieństwo
    uzyskania rozwiązania 'lepszego' wyraźnie większe niż krzyżowanie
    dowolnych innych chromosomów, czy takie samo ?

    Przy opisie dwóch rozwiązań dokonałeś jakiejś obserwacji
    dot. problemu związanej z liczeniem sum częściowych - i tę
    wiedzę zaszyłeś w drugim algorytmie. Czy tę obserwację
    zastosowałes w AG ? Może jakaś wielokryterialna funkcja
    oceny by się przydała, albo wybierająca max z jakichś
    funkcji cząstkowych ?


  • 5. Data: 2009-10-22 10:46:43
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: "Filip Sielimowicz" <s...@t...tez.wp.pl>


    Użytkownik "Mariusz Marszałkowski" <m...@g...com> napisał w wiadomości
    news:65951300-fad8-4492-9ecb-724eb64dd4a7@g23g2000vb
    r.googlegroups.com...
    Powitać

    >Jest dana macierz M, co ma R wierszy i C kolumn.
    >Kolumny mają średnio V różnych wartości.
    >Jest dana funkcja F odwzorowująca iloczyn kartezjański
    >wierszy i klas RxK w zbiór liczb całkowitych.

    Prawdę mówiąc - nie rozumiem. jaki jest związek między
    'wartością kolumny' a funkcją F ? Jaki wpływ 'wartosc kolumny'
    ma na funkcję F ? Z powyższego wynika, jak dla mnie, że żaden.


  • 6. Data: 2009-10-22 12:25:00
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 22 Paź, 12:39, "Filip Sielimowicz" <s...@t...tez.wp.pl>
    wrote:
    >
    > > Zastosowałeś naiwny AG (naiwne kodowanie i naiwna
    > > funkcja oceny) - to masz wynik, jaki masz ;)))
    >
    > Wiesz - może ja czegoś nie rozumiem - ale moim zdaniem
    > nie opisałeś w jaki sposób zbudowałeś chromosom,
    > jak wyglądało krzyżowanie i jak funkcja oceny.
    > Masz liniowy chromosom, w który wrzucasz na sztywno
    > wszystkie współczynniki z węzłów drzewa decyzyjnego ?

    Dobrze się domyślasz, skoro nie opisałem, to użyłem
    naiwnego kodowana i naiwnego AG. Nie mam pojęcia
    co można zrobić aby ulepszyć AG i czy cokolwiek
    można ulepszyć.

    > Istotą AG jest składanie rozwiązania z kombinacji rozwiązań
    > cząstkowych. Czy u Ciebie wymiana fragmentów chromosomów
    > zawierajacych rozwiązania 'dobre' daje prawdopodobieństwo
    > uzyskania rozwiązania 'lepszego' wyraźnie większe niż krzyżowanie
    > dowolnych innych chromosomów, czy takie samo ?
    Nie rozumiem dlaczego w takim problemie jakiekolwiek krzyżowanie
    dobrych osobników ma dawać większe prawdopodobieństwo powstania
    lepszego osobnika. Jakie to by musiało być krzyżowanie?

    > Przy opisie dwóch rozwiązań dokonałeś jakiejś obserwacji
    > dot. problemu związanej z liczeniem sum częściowych - i tę
    > wiedzę zaszyłeś w drugim algorytmie. Czy tę obserwację
    > zastosowałes w AG ?
    No właśnie nie, polegałem na "sile algorytmu genetycznego", w
    ewolucji poniekąd sobie poradziły ;-)

    > Może jakaś wielokryterialna funkcja
    > oceny by się przydała, albo wybierająca max z jakichś
    > funkcji cząstkowych ?
    Może, ale co to by mogła być za funkcja?

    > Prawdę mówiąc - nie rozumiem. jaki jest związek między
    > 'wartością kolumny' a funkcją F ? Jaki wpływ 'wartosc kolumny'
    > ma na funkcję F ? Z powyższego wynika, jak dla mnie, że żaden.
    Coś w rodzaju:
    max (\sum_{i=1}^{i=N} F( i , T( i ) )

    N - ilość rekordów
    i = 1..N - to numer rekordu
    T( i ) szukany klasyfikator, przypisująca numer klasy 1..G rekordowi i
    F( i , T(i) ) to dowolna funkcja przypisująca dowolne wartości
    rekordowi i klasie - inaczej: funkcja F ocenia jakość klasyfikatora T
    ( i ).

    Trzeba znaleźć takie T żeby suma F była maksymalna.
    Ograniczenia nałożone na T są mniej/więcej takie:
    - ma być drzewem klasyfikującym
    - ma zawierać mało węzłów względem ilości rekordów, np. N*10^-5 -
    N*10^-6

    Pozdrawiam


  • 7. Data: 2009-10-22 14:53:53
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: "Filip Sielimowicz" <s...@t...tez.wp.pl>


    Użytkownik "Mariusz Marszałkowski" <m...@g...com> napisał w wiadomości
    news:7aef3e64-3e94-42af-82e4-784a813e6f34@p20g2000vb
    l.googlegroups.com...

    >Nie rozumiem dlaczego w takim problemie jakiekolwiek krzyżowanie
    >dobrych osobników ma dawać większe prawdopodobieństwo powstania
    >lepszego osobnika. Jakie to by musiało być krzyżowanie?

    No i właśnie dlatego bezpośrednie zastosowanie AG w tym przypadku jest do d
    ... ;)

    > No właśnie nie, polegałem na "sile algorytmu genetycznego", w
    > ewolucji poniekąd sobie poradziły ;-)
    Ewolucja rozwiązuje wiele, wiele mniej lub bardziej powiązanych
    problemów jednocześnie i kombinuje z łączeniem tych rozwiązań
    w całość.
    U Ciebie, póki co - problem jest jeden - funkcja F - o której
    nie wiemy nic ... Czy jest monotoniczna, czy ma jakieś minima-maksima itp
    (w zależności od rekordu i w zależności od T(i) ). Np. proste pytanie:
    Czy jeśli F ([x,y,z], k) ) daje wysoki wynik, to jest szansa, że
    F ([x,y,A], k) ) również da wysoki wynik ?

    >Coś w rodzaju:
    >max (\sum_{i=1}^{i=N} F( i , T( i ) )
    >
    >N - ilość rekordów
    >i = 1..N - to numer rekordu
    >T( i ) szukany klasyfikator, przypisująca numer klasy 1..G rekordowi i
    >F( i , T(i) ) to dowolna funkcja przypisująca dowolne wartości
    >rekordowi i klasie - inaczej: funkcja F ocenia jakość klasyfikatora T
    >( i ).
    >
    >Trzeba znaleźć takie T żeby suma F była maksymalna.
    >Ograniczenia nałożone na T są mniej/więcej takie:
    > - ma być drzewem klasyfikującym
    > - ma zawierać mało węzłów względem ilości rekordów, np. N*10^-5 -
    >N*10^-6

    Oki, to sprawa jest dużo jaśniejsza.
    Natomiast wydaje mi się, że kluczem do dobrego algorytmu AG jest tu
    jednak przyjrzenie się funkcji F i próba określenia jakichś jej własności.
    Jak znajdę w domu czas, to jeszcze nad tym poślęczę ... Brakuje mi tu
    jakiejś podpowiedzi dot. tego, czy klasy są podobne - tzn, czy
    są klasy, które dają podobne wyniki funkcji F dla podobnych rekordów.
    Wtedy krzyżowanie parametrów klasyfikatora będzie miało sens.
    Jeśli nie ma takich podobieństw między klasami (z punktu widzenia
    funkcji F) to mamy problem kombinatoryczny i trzeba by spróbować
    inaczej go podejść.

    Pierwsza rzecz, która mi się narzuca, to:
    - zostawić krzyżowanie, tak jak miałeś, ale funkcję oceny zdefiniować
    nie jako pełne sumowanie po wszystkich rekordach (tak zdaje się
    zrobiłeś - testujesz klasyfikator po wszystkim), ale wybierasz za
    każdym razem jakiś losowy zestaw rekordów ze zbioru, np. 10-100
    (losową próbkę, im więcej kolumn, tym większą), dla każdego
    z nich liczysz F i funkcją oceny jest albo max z tych wyników
    cząstkowych, albo suma. Pokombinowałbym z maxem.

    Nie upierałbym się też przy znlezieniu absolutnie idealnego T, ale
    zadowoliłbym się 'prawie idalnym' - badaj wykres funkcji
    przystosowania najlepszego osobnika w zależności od iteracji.


  • 8. Data: 2009-10-22 17:27:44
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 22 Paź, 16:53, "Filip Sielimowicz" <s...@t...tez.wp.pl>
    wrote:
    > > No właśnie nie, polegałem na "sile algorytmu genetycznego", w
    > > ewolucji poniekąd sobie poradziły ;-)
    >
    > Ewolucja rozwiązuje wiele, wiele mniej lub bardziej powiązanych
    > problemów jednocześnie i kombinuje z łączeniem tych rozwiązań
    > w całość.
    > U Ciebie, póki co - problem jest jeden - funkcja F - o której
    > nie wiemy nic ...
    Coś niezwykłego jest w Ewolucji, jeśli naprawdę to ona poradziła
    sobie
    ze skonstruowaniem oka, mózgu, itd. Wydaje się nieprawdopodobne
    aby ewolucja opierała się na czymś tak prostym jak krzyżowanie i
    mutacja.

    > Czy jest monotoniczna, czy ma jakieś minima-maksima itp
    > (w zależności od rekordu i w zależności od T(i) ). Np. proste pytanie:
    > Czy jeśli F ([x,y,z], k) ) daje wysoki wynik, to jest szansa, że
    > F ([x,y,A], k) ) również da wysoki wynik ?
    Właśnie tego wszystkiego o funkcji chcę się dowiedzieć od algorytmu
    który zbuduje klasyfikator. Chcę żeby klasyfikator sam wyznaczył
    miarę podobieństwa i podobnym rekordom przypisał te same klasy.

    > >Coś w rodzaju:
    > >max (\sum_{i=1}^{i=N} F( i , T( i ) ))
    >
    > Oki, to sprawa jest dużo jaśniejsza.
    > Natomiast wydaje mi się, że kluczem do dobrego algorytmu AG jest tu
    > jednak przyjrzenie się funkcji F i próba określenia jakichś jej własności
    Hmmm... może zbudować wiele drzew decyzyjne metodą losowo/zachłanną,
    następnie osobniki zainicjować węzłami z tych drzew i odpalić algorytm
    genetyczny... nie wiem czy to ma jakikolwiek sens.

    > Jak znajdę w domu czas, to jeszcze nad tym poślęczę ... Brakuje mi tu
    > jakiejś podpowiedzi dot. tego, czy klasy są podobne - tzn, czy
    > są klasy, które dają podobne wyniki funkcji F dla podobnych rekordów.
    > Wtedy krzyżowanie parametrów klasyfikatora będzie miało sens.
    > Jeśli nie ma takich podobieństw między klasami (z punktu widzenia
    > funkcji F) to mamy problem kombinatoryczny i trzeba by spróbować
    > inaczej go podejść.
    Problem jest kombinatoryczny z cechami statystycznymi. Czasami
    różnica jednego bitu powoduje że rekordy powinny przynależeć do
    innych klas. A czasami kombinacja kilku bitów często się powtarza
    w jednej klasie. Właśnie chciałbym badać funkcję F przy pomocy
    klasyfikatora.

    > Pierwsza rzecz, która mi się narzuca, to:
    > - zostawić krzyżowanie, tak jak miałeś, ale funkcję oceny zdefiniować
    > nie jako pełne sumowanie po wszystkich rekordach (tak zdaje się
    > zrobiłeś - testujesz klasyfikator po wszystkim), ale wybierasz za
    > każdym razem jakiś losowy zestaw rekordów ze zbioru, np. 10-100
    > (losową próbkę, im więcej kolumn, tym większą), dla każdego
    > z nich liczysz F i funkcją oceny jest albo max z tych wyników
    > cząstkowych, albo suma. Pokombinowałbym z maxem.
    Wydaje się ciekawe, na pewno znacznie by przyspieszyło
    obliczanie funkcji przystosowania.

    > Nie upierałbym się też przy znlezieniu absolutnie idealnego T, ale
    > zadowoliłbym się 'prawie idalnym' - badaj wykres funkcji
    > przystosowania najlepszego osobnika w zależności od iteracji.

    Dla dużej ilości danych nie ma szans na znalezienie optimum, no
    chyba że mocno ograniczy się ilość węzłów.

    Pozdrawiam


  • 9. Data: 2009-10-23 11:05:27
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: "Filip Sielimowicz" <s...@t...tez.wp.pl>

    Użytkownik "Mariusz Marszałkowski" <m...@g...com> napisał w wiadomości
    news:1817f1e4-113c-43f2-b936-8fecc6c6991e@p23g2000vb
    l.googlegroups.com...

    >Coś niezwykłego jest w Ewolucji, jeśli naprawdę to ona poradziła
    >sobie
    >ze skonstruowaniem oka, mózgu, itd. Wydaje się nieprawdopodobne
    >aby ewolucja opierała się na czymś tak prostym jak krzyżowanie i
    >mutacja.
    Trochę EOT, ale ... w jednym aspekcie natura ma przewagę nad komputerami:
    może dość swobodnie wykorzystywać siłę 'komputera molekularnego'.
    Kod genetyczny składa się z dwóch zestawów genów, do tego istnieje
    zjawisko duplikacji genów itp. Mutacja jednego z genów nie powoduje
    ucieczki poprzedniej wartości. Można by w przybliżeniu powiedzieć, że
    w każdej pozycji, każde lokum w genotypie może przyjmować
    RÓWNOCZEŚNIE kilka wartości. Trochę to też przypomina
    mechanikę kwantową ;). W dużym przybliżeniu mówiąc, natura liczy
    funkcję oceny na fenotypie jednocześnie dla bardzo wielu różnych
    kombinacji. U nas gen ma albo wartość A albo B i jeśli
    chcielibyśmy zasymulować naturę wprowadzajac dwa zestawy genów,
    musielibyśmy liczyć funkcję oceny wielokrotnie, dla różnych kombinacji
    genów dobieranych raz z jednego a raz z drugiego chromosomu. Przy
    długich genotypach złożoność obliczeniowa rośnie koszmarnie ...
    Natura zaś się tym nie martwi: wrzuca produkcję białka A, wrzuca
    równolegle produkcję białka B, a funkcją oceny zajmuje się 'komputer
    molekularny' - sprawdzi, jak oba te białka mają się do wszystkich innych
    białek, które są produkowane równolegle w otoczeniu, czy mają na siebie
    jakiś wpływ, czy nie. Mutując A w C nie traci A ;) Tak w dużym
    przybliżeniu ;)


    >Właśnie tego wszystkiego o funkcji chcę się dowiedzieć od algorytmu
    >który zbuduje klasyfikator. Chcę żeby klasyfikator sam wyznaczył
    >miarę podobieństwa i podobnym rekordom przypisał te same klasy.
    Ok, jasna sprawa.

    >Hmmm... może zbudować wiele drzew decyzyjne metodą losowo/zachłanną,
    >następnie osobniki zainicjować węzłami z tych drzew i odpalić algorytm
    >genetyczny... nie wiem czy to ma jakikolwiek sens.
    Teraz się zastanawiam, jak Ty to zrobiłeś ;)

    Osobnikiem-fenotypem u Ciebie jest klasyfikator. Chromosomem
    jest liniowy zestaw cech, opisujący jednoznacznie klasyfikator. Np.
    lista reguł. Jak ty to właściwie robiłeś ? W jaki sposób upakowałeś
    drzewo decyzyjne w chromosom i w jaki sposób robisz krzyżowanie ?
    To jest sprawa kluczowa.

    >Problem jest kombinatoryczny z cechami statystycznymi. Czasami
    >różnica jednego bitu powoduje że rekordy powinny przynależeć do
    >innych klas. A czasami kombinacja kilku bitów często się powtarza
    >w jednej klasie. Właśnie chciałbym badać funkcję F przy pomocy
    >klasyfikatora.
    Mówisz 'bitu'. Czy elementami rekordów/macierzy są pojedyncze bity ?


    >> każdym razem jakiś losowy zestaw rekordów ze zbioru, np. 10-100
    >> (losową próbkę, im więcej kolumn, tym większą), dla każdego
    >> z nich liczysz F i funkcją oceny jest albo max z tych wyników
    >> cząstkowych, albo suma. Pokombinowałbym z maxem.
    >Wydaje się ciekawe, na pewno znacznie by przyspieszyło
    >obliczanie funkcji przystosowania.

    Daj info, jak Ty skonstruowałeś chromosom i krzyżowanie, tymczasem
    ja tu coś wyeksponuję na 'dalszy ciąg':
    Napisałeś wcześniej:

    3) Uwzględnij wszystkie kombinacje liści: K^(N+1)=KxK, razem
    VxCxRxKxK operacji

    3) Wybierz maksymalną sumę sum częściowych dla kombinacji
    klas (liści), mamy Cx(RxK+VxLg(V)+VxK) operacji

    Co to znaczy 'kombinacji liści' ?
    W operacji krzyżowania dwóch drzew decyzyjnych widzę tu
    największe pole do popisu - np. przez takie zdefiniowanie krzyżowania,
    by modyfikowało decyzje nadając im różne priorytety (poprzez przestawianie
    węzłów decyzyjnych w górę/w dół drzewa i mieszania ich z decyzjami
    z drugiego drzewa).
    Reguły masz postaci
    "Upraszczając, warunki w węzłach drzewa ograniczmy do M_ij <= C_j,
    gdzie C_j jest jedną z wartości kolumny j."
    Nie bardzo kumam, co oznacza tu owe C_j. To wartość wylosowana ze
    wszystkich rekordów ? Rozumiem, że jest to po prostu jakiś mniej lub
    bardziej przypadkowo wygenerowany współczynnik ?
    Czy w twoim wypadku z jednym węzłem, chromosom wygląda
    po prostu jak czwórka (P, I, K1, K2) - gdzie P to odpowiednik powyższego
    C_j (próg), I to numer branego pod uwagę elementu z rekordu a K1 i K2
    to klasy (liście) ?
    Mam tylko wątpliwości co do tego I 9czy je masz) - nie wiem dokładnie,
    jak to drzewo decyzyjne wybiera u Ciebie jedną z wartości (kolumnę)
    w wierszu.

    W każdym bądź razie ja bym szedł w kierunku takim, że drzewo zapisuję
    w postaci chromosomu jako zbiór par (P1,I1), (P2,I2), a na końcu liście
    K1, K2, ... Krzyżowanie i mutację bym zdefiniował jako wymianę i przesuwanie
    w ramach chromosomu cegiełek (par) (P,I) z tym, że bym uważał na to, by
    razem z wymianą między chromosomami reguł na ostatnim poziomie
    wymieniać też liście (dał bym zasadę 'liście należą do ostatniej reguły').
    Potem bym się zastanowił nad mutacjami związanymi z modyfikacją
    samych P i K. W przypadku P mamy w przybliżeniu liczby rzeczywiste, w
    przypadku
    K mamy jakiś zbiór klas, czyli liczby całkowite. Więc zadanie jest o tyle
    'niebanalne', że mamy do czynienia po pierwsze z drzewem, po drugie
    mamy niejednorodne geny - inaczej trzeba postępować z progami, inaczej
    z liściami(klasami) - inne operatory mutacji itp.

    W każdym bądź razie, najpierw bym mutacje całkowicie porzucił i skupił
    się na krzyżowaniu, z generowaniem dużej populacji początkowej.
    Powinieneś dzięki temu uzyskać taki efekt, gdzie AG będzie budował
    ciągi decyzyjne i kombinował zarówno z wartościami progów, jak i z
    kolejnością decyzji (które podejmować wpierw), oraz ze znalezieniem
    najistotniejszych dla klasyfikacji kolumn - czyli będzie badał 'co jest
    sensowne i ważne z punktu widzenia F'.

    Jak będzie ta podstawa, to widzę mnóstwo możliwości dalszych
    modyfikacji operatorów - w zależności od oceny ich sensowności.
    Może warto wymieniać progi między regułami - będzie to miało
    sens, jeśli funkcja F ma skłonności ku takim równościom
    F((A, B ..), K) = F( (B, A...), K) - a być może jest to w ogóle
    bez sensu, bo A i B (różne kolumny) są zupełnie różnych typów.
    Tego nie wiem. Na razie zakładam, że kolumny są raczej różnych
    typów, wartości nie można między nimi wymieniać.

    Jak coś niejasne - pytaj ;)


  • 10. Data: 2009-10-23 16:27:23
    Temat: Re: no i co z tymi algorytmami genetycznymi?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 23 Paź, 13:05, "Filip Sielimowicz" <s...@t...tez.wp.pl>
    wrote:

    > Trochę EOT, ale ... w jednym aspekcie natura ma przewagę nad komputerami:
    > może dość swobodnie wykorzystywać siłę 'komputera molekularnego'.
    > Kod genetyczny składa się z dwóch zestawów genów, do tego istnieje
    > zjawisko duplikacji genów itp. Mutacja jednego z genów nie powoduje
    > ucieczki poprzedniej wartości. Można by w przybliżeniu powiedzieć, że
    > w każdej pozycji, każde lokum w genotypie może przyjmować
    > RÓWNOCZEŚNIE kilka wartości. Trochę to też przypomina
    > mechanikę kwantową ;). W dużym przybliżeniu mówiąc, natura liczy
    > funkcję oceny na fenotypie jednocześnie dla bardzo wielu różnych
    > kombinacji. U nas gen ma albo wartość A albo B i jeśli
    > chcielibyśmy zasymulować naturę wprowadzajac dwa zestawy genów,
    > musielibyśmy liczyć funkcję oceny wielokrotnie, dla różnych kombinacji
    > genów dobieranych raz z jednego a raz z drugiego chromosomu. Przy
    > długich genotypach złożoność obliczeniowa rośnie koszmarnie ...
    > Natura zaś się tym nie martwi: wrzuca produkcję białka A, wrzuca
    > równolegle produkcję białka B, a funkcją oceny zajmuje się 'komputer
    > molekularny' - sprawdzi, jak oba te białka mają się do wszystkich innych
    > białek, które są produkowane równolegle w otoczeniu, czy mają na siebie
    > jakiś wpływ, czy nie. Mutując A w C nie traci A ;) Tak w dużym
    > przybliżeniu ;)
    Dobrze że to opisałeś, nie miałem pojęcia że istnieją takie mechanizmy
    w
    naturalnej ewolucji. Naiwne krzyżowanie cech, nawet na taką skalę jaką
    jest cała planeta i miliardy lat czasu, wydaje się słabym pomysłem.

    > >Hmmm... może zbudować wiele drzew decyzyjne metodą losowo/zachłanną,
    > >następnie osobniki zainicjować węzłami z tych drzew i odpalić algorytm
    > >genetyczny... nie wiem czy to ma jakikolwiek sens.
    >
    > Teraz się zastanawiam, jak Ty to zrobiłeś ;)
    >
    > Osobnikiem-fenotypem u Ciebie jest klasyfikator. Chromosomem
    > jest liniowy zestaw cech, opisujący jednoznacznie klasyfikator. Np.
    > lista reguł. Jak ty to właściwie robiłeś ? W jaki sposób upakowałeś
    > drzewo decyzyjne w chromosom i w jaki sposób robisz krzyżowanie ?
    > To jest sprawa kluczowa.
    Kombinowałem bardzo różnie. Np. budowałem tablicę wszystkich
    sensownych reguł. Taką tablicę traktowałem jak zbiór atomowych
    reguł. Eksperymentowałem z prostymi regułami i z bardziej
    skomplikowanymi:

    Prosta reguła to np.: if( dane[nr_wiersza][nr_kolumny] operacja
    wartość )
    Operacja to porównanie typu: równy, różny, mniejszy, itd.
    Np. mając 30 kolumn, w każdej kolumnie 50 różnych wartosci, możemy
    zbudować
    30x50=1500 sensownych reguł typu: if( dane[nr_wier][nr_kol] <=
    wartość )

    Bardziej rozbudowana reguła to np.: if( vmin <= dane[nr_wier][nr_kol]
    <= vmax )
    Dla 30 kolumn i 50 różnych wartości wychodzi 30x51x50/2=~40tys
    sensownych
    reguł.

    Najbardziej rozbudowane reguły jakich próbowałem były takie:
    if( vmin <= dane[nr_wier][nr_kol_1] operacja dane[nr_wier][nr_kol_2]
    <= vmax )
    gdzie operacja byla: dodawaniem, odejmowanie, albo mnożeniem.
    Ten najbardziej skomplikowany wzór na budowę reguły dawał około 80mln
    sensownych reguł, dla zbioru danych jak powyżej.

    Takich atomowych reguł można użyć do wypełnienia węzłów w drzewie
    decyzyjnym. Drzewo decyzyjne najczęściej budowałem w zwykłej
    tablicy liniowej. Każdy element tablicy składał się z:
    - reguły atomowej
    - indeks tablicy gdy reguła pasuje do rekordu (gdy reguła odpala)
    - indeks tablicy gdy reguła nie odpala
    - numer klasy do jakiej należy rekord, jeśli element tablicy jest
    liściem


    Krzyżowania i mutacji dokonywałem na różnych reprezentacjach. Czasami
    postępowałem po chamsku: genem było miejsce w tablicy reprezentującej
    drzewo, a dopuszczalnymi allelami zbiór reguł atomowych, bądź iloczyn
    kartezjański:
    - reguł atomowych
    - indeksów do węzłów potomnych gdy reguła odpala
    - indeksów do węzłów potomnych gdy reguła nie odpala
    - klas do jakich zostanie przypisany rekord gdy węzeł jest liściem

    Na różne sposoby dodawałem finezji chamskiemu algorytmowi
    genetycznemu:
    1) Każdy osobnik miał swoją kopię (to chyba diploidalność/
    poliploidalność), jeśli w
    wyniku mutacji i krzyżowania nie dochodziło do zwiększenia funkcji
    przystosowania,
    to osobnik z pewnym prawdopodobieństwem zostawał całkowicie
    odtwarzany
    z kopii.
    2) Reguły atomowe miały swój ranking. Jeśli w wyniku mutacji regula r1
    została
    zastąpiona regułą r2 i doszło do zwiększenia funkcji
    przystosowania, to zwiększał
    się ranking reguły r2. Reguły z większym rankingiem miały (dużo)
    większe
    prawdopodobieństwo wylosowania w następnych mutacjach
    3) Budowałem drzewo decyzyjne tylko z jednej reguły, obliczałem
    wartość funkcji
    przystosowania dla takiego drzewa, a następnie nadawałem regułom
    atomowym
    początkowy ranking "proporcjonalnie" do wartości funkcji
    przystosowania.
    4) Wprowadzałem mutację "inteligentną", jeśli reguła przed mutacją
    była na
    zakresie vmin <= kolumna_x <= vmax, to po mutacji z dużym
    prawdopodobieństwem
    też dotyczyła kolumny_x, a zakres <vmin,vmax> nieznacznie się
    rozszerzał lub
    zawężał.

    To tyle odnośnie kodowania chamskiego. Poza chamskim stosowałem też
    coś co
    nie wiem jak się nazywa, a sam nazwałem "systemem głosowania". Każdy
    gen był ciągiem
    bajtów, czyli wartości z przedziału <0,255>. W każdym genie, czyli w
    ciągu
    bajtów, były pod-ciągi bajtów. Wartości z każdego podciągu były
    sumowane i w
    ten sposób była ustalana "siła głosu". Przykładowo rekord składa się z
    4-rech
    kolumn. Pod-ciąg składa się z 10 bajtów. Więc część genu biorąca
    udział w
    głosowaniu za wyborem konkretnej kolumny to 4x10=40 bajtów.
    Przykładowo
    w wyniku zsumowania kolejnych 10-cio bajtowych podciągów wychodzą
    wartości: 10,11,20,30.
    Największa jest suma czwarta, więc zostanie wybrana kolumna czwarta.
    Analogicznym
    pod-ciągiem bajtów były zakodowane wszystkie cechy reguły: kolumny,
    operacje
    arytmetyczne, wartości przedziału <vmin,vmax>, itd. Dalej już nie
    muszę
    opisywać... z genów powstawały reguły, z reguł drzewa, dla drzew
    funkcja
    przystosowania, selekcja najlepiej przystosowanych, krzyrzowanie,
    mutacja...

    Czasami w "systemie głosowania" bajty głosujące na konkretną (jedną)
    cechę reguły
    rozrzucałem po całym osobniku. Np. bajty głosujące na kolumnę leżały
    na losowych pozycjach:
    13,34,67,86 w osobniku o długości 100 bajtów. Geny nie były ciągami od
    N do N+10 przylegających
    do siebie bajtów, ale były maskami bajtów z losowo wybranych pozycji.

    > >Problem jest kombinatoryczny z cechami statystycznymi. Czasami
    > >różnica jednego bitu powoduje że rekordy powinny przynależeć do
    > >innych klas. A czasami kombinacja kilku bitów często się powtarza
    > >w jednej klasie. Właśnie chciałbym badać funkcję F przy pomocy
    > >klasyfikatora.
    >
    > Mówisz 'bitu'. Czy elementami rekordów/macierzy są pojedyncze bity ?
    Reprezentacje danych w komputerze zawsze można przestawić jako
    ciągi bitów. Ale wartości w kolumnach są niezbyt licznym podzbiorem
    liczb całkowitych, np. o mocy równej 50.

    Użyłem określenia bit, aby podkreślić, że czasami niewielka zmiana w
    danych wejściowych może decydować o zmianie ich klasy, a czasami
    nawet po istotnej zmianie rekord cały czas należy do tej samej klasy.
    Więc dane reprezentują problem z pogranicza problemu kombinatorycznego
    i
    statystycznego. Liczę na wyłonienie tych statystycznych cech.

    > Daj info, jak Ty skonstruowałeś chromosom i krzyżowanie, tymczasem
    > ja tu coś wyeksponuję na 'dalszy ciąg':
    > Napisałeś wcześniej:
    >
    > 3) Uwzględnij wszystkie kombinacje liści: K^(N+1)=KxK, razem
    > VxCxRxKxK operacji
    >
    > 3) Wybierz maksymalną sumę sum częściowych dla kombinacji
    > klas (liści), mamy Cx(RxK+VxLg(V)+VxK) operacji
    >
    > Co to znaczy 'kombinacji liści' ?
    Liściem nazwałem węzeł który nie zawiera już żadnej reguły, zawiera
    tylko numer klasy do której zostanie przypisany rekord.
    Drzewo binarne z jedną regułą może zaklasyfikować rekord do jednej z
    dwóch klas. Drzewo takie zawiera jeden węzeł z regułą decyzyjną i
    dwa liście. Jeśli dopuszczalna ilość klas wynosi K, to pierwszy liść
    może zawierać numer klasy od 1 do K. Niezależnie od wartości w
    pierwszym liściu, drugi liść także może zawierać numer klasy od 1 do
    K.
    Daje to K^L wariacji dla L liści, powinienem do razu użyć określenia
    wariacji
    zamiast kombinacji :) Oczywiście niewielki jest praktyczny sens liści
    wyprowadzonych z tego samego węzła i klasyfikujących do tej samej
    klasy, można więc zamiast KxK dać Kx(K-1) w drzewie jedno-regułowym.

    > W operacji krzyżowania dwóch drzew decyzyjnych widzę tu
    > największe pole do popisu - np. przez takie zdefiniowanie krzyżowania,
    > by modyfikowało decyzje nadając im różne priorytety (poprzez przestawianie
    > węzłów decyzyjnych w górę/w dół drzewa i mieszania ich z decyzjami
    > z drugiego drzewa).
    Nie sprawdzałem jeszcze tego sposobu, ale czeka na swoją kolej.

    > Reguły masz postaci
    > "Upraszczając, warunki w węzłach drzewa ograniczmy do M_ij <= C_j,
    > gdzie C_j jest jedną z wartości kolumny j."
    > Nie bardzo kumam, co oznacza tu owe C_j. To wartość wylosowana ze
    > wszystkich rekordów ? Rozumiem, że jest to po prostu jakiś mniej lub
    > bardziej przypadkowo wygenerowany współczynnik ?
    C_j to konkretna wartość z kolumny. Dajmy przykładową tabelę:
    1 4 1 0 5
    1 1 0 4 4
    2 1 1 3 5
    1 1 0 0 1
    1 2 0 3 0
    2 1 2 2 2
    2 2 1 0 4
    Kolumna pierwsza to numer klasy.
    Kolumna druga to wartość funkcji celu F, jeśli klasyfikator T
    na podstawie kolumn 3,4,5 przypisze rekord do dobrej
    klasy (tej określonej w pierwszej kolumnie) to funkcja F
    zwraca wartość z drugiej kolumny, jeśli klasyfikator T źle
    przypisze klasę, to funkcja F zwraca np. wartość z drugiej
    kolumny pomnożoną przez -1. Oczywiście klasyfikator "nie zna"
    wartości z kolumny pierwszej i drugiej.

    Na tym przykładzie widać, że reguła:
    if( kolumna_3 < 1 ) then klasa 1
    wybierze dokładnie te same rekordy co reguła:
    if( kolumna_3 < 1.1 ) then klasa 1
    Więc nie ma sensu testować obu reguł. Tylko dlatego
    użyłem określenia C_j, aby podkreślić, że zbiór sensowych reguł
    jest ograniczony przez ilość wartości w kolumnie j-tej.

    Z ograniczonej ilości wartości w kolumnach także wynika wzór
    na przyspieszenie dzięki sumom częściowym. W czasie liniowym
    względem ilości rekordów można zbudować sumy częściowe funkcji F dla
    wszystkich wartości pojawiających się w kolumnie. Następnie w czasie
    liniowym
    względem ilości wartości można przetestować wszystkie reguły typu:
    mniejszy równy.
    Więc ilość operacji wynosi ilość_rekordów + ilość_wartości. Bez sum
    częściowych
    ilość operacji wynosiłaby ilosc_rekordow*ilosc_wartosci.

    > Czy w twoim wypadku z jednym węzłem, chromosom wygląda
    > po prostu jak czwórka (P, I, K1, K2) - gdzie P to odpowiednik powyższego
    > C_j (próg), I to numer branego pod uwagę elementu z rekordu a K1 i K2
    > to klasy (liście) ?
    > Mam tylko wątpliwości co do tego I 9czy je masz) - nie wiem dokładnie,
    > jak to drzewo decyzyjne wybiera u Ciebie jedną z wartości (kolumnę)
    > w wierszu.
    Mam nadzieję że udało mi się to wyjaśnić powyżej.

    > W każdym bądź razie ja bym szedł w kierunku takim, że drzewo zapisuję
    > w postaci chromosomu jako zbiór par (P1,I1), (P2,I2), a na końcu liście
    > K1, K2, ... Krzyżowanie i mutację bym zdefiniował jako wymianę i przesuwanie
    > w ramach chromosomu cegiełek (par) (P,I) z tym, że bym uważał na to, by
    > razem z wymianą między chromosomami reguł na ostatnim poziomie
    > wymieniać też liście (dał bym zasadę 'liście należą do ostatniej reguły').
    > Potem bym się zastanowił nad mutacjami związanymi z modyfikacją
    > samych P i K. W przypadku P mamy w przybliżeniu liczby rzeczywiste, w
    > przypadku
    > K mamy jakiś zbiór klas, czyli liczby całkowite. Więc zadanie jest o tyle
    > 'niebanalne', że mamy do czynienia po pierwsze z drzewem, po drugie
    > mamy niejednorodne geny - inaczej trzeba postępować z progami, inaczej
    > z liściami(klasami) - inne operatory mutacji itp.
    No i rozmiar przestrzeni rozwiązań decyduje o niebanalności. Załóżmy
    że
    wybieramy jako regułę atomową tą najbardziej zaawansowaną z trzech
    jakie przestawiłem na początku. Więc mamy około 80mln reguł
    atomowych.
    Załóżmy że drzewo ma mieć 10 węzłów wewnętrznych + 11 liści, problem
    niech
    ma 6 klas, a dane to 2mln rekordów w tabeli. Więc mamy około 100
    cyfrową
    liczbę rozwiązań.

    Poza tym w algorytmie zachłannym (dzięki sztuczce z sumami
    częściowymi)
    można dość szybko generować jedno (albo nawet dwu) węzłowe optymalne
    poddrzewa. Następnie w algorytmie zachłannym do rozwiązania włącza się
    to optymalne poddrzewo, które najbardziej maksymalizuje rozwiązanie.
    Takiej sztuczki w algorytmie genetycznym chyba nie da się zrobić,
    przynajmniej
    ja nie wiem jak.

    > W każdym bądź razie, najpierw bym mutacje całkowicie porzucił i skupił
    > się na krzyżowaniu, z generowaniem dużej populacji początkowej.
    > Powinieneś dzięki temu uzyskać taki efekt, gdzie AG będzie budował
    > ciągi decyzyjne i kombinował zarówno z wartościami progów, jak i z
    > kolejnością decyzji (które podejmować wpierw), oraz ze znalezieniem
    > najistotniejszych dla klasyfikacji kolumn - czyli będzie badał 'co jest
    > sensowne i ważne z punktu widzenia F'.
    >
    > Jak będzie ta podstawa, to widzę mnóstwo możliwości dalszych
    > modyfikacji operatorów - w zależności od oceny ich sensowności.
    > Może warto wymieniać progi między regułami - będzie to miało
    > sens, jeśli funkcja F ma skłonności ku takim równościom
    > F((A, B ..), K) = F( (B, A...), K) - a być może jest to w ogóle
    > bez sensu, bo A i B (różne kolumny) są zupełnie różnych typów.

    Znaczenie niektórych kolumn jest bardzo podobne a innych zupełnie
    różne. Fajnie by było, jakby algorytm genetyczny sam odkrył reguły
    podobieństwa pomiędzy kolumnami i sam swoją pracę tak
    sparametryzował,
    aby szybciej podać lepsze rozwiązanie ;-) Może jeden algorytm
    genetyczny
    by dobierał parametry dla drugiego algorytmu genetycznego ;-)

    > Tego nie wiem. Na razie zakładam, że kolumny są raczej różnych
    > typów, wartości nie można między nimi wymieniać.
    Wartości każdej kolumny należą do małego podzbioru liczb całkowitych.
    Małego, czyli o liczności od 2 do około 100 elementów.

    Pozdrawiam serdecznie

strony : [ 1 ] . 2


Szukaj w grupach

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: