Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Drzewa decyzyjne/las losowy interakcje pomiędzy zmiennymi

Witam, w tej chwili zacząłem poznawać narzędzie jakim są lasy losowe, las jak i większość drzew przeprowadzają podziały w węzłach stosując bardzo proste reguły liniowe. Są to podziały liniowe, zatem zastanawiam się czy warto jest dodać do zbioru danych zmienne przekształcone nieliniowe (a raczej nie zachowujące kolejności elementów) na przykład : gdy x,y, to zmienne to do zbioru danych można dodać zmienną z=x*y. Czy stosowaliście takie podejście ? Jakim innym transformacjom można poddać dane oraz jak te transformacje wybrać ? Wiem, że taka procedura jest kosztowna obliczeniowo, ale w końcu można ją przeprowadzić tylko dla najbardziej istotnych zmiennych. Czy stosowaliście takie metody ?

W jaki sposób można wykryć zmienne, które badane łącznie mają większą siłę predykcyjną, niż te same zmienne badane osobno ? Czyli blad|x,y<(blad|x+blad|y)/2. Może służą ku temu jakieś miary zastosowane do łącznej gęstości p(x,y) ?

konto usunięte

Temat: Drzewa decyzyjne/las losowy interakcje pomiędzy zmiennymi

Witam

Poniżej może nie wyczerpująca lecz mam nadzieję użyteczna odpowiedź :)

1. Transformacje zmiennych
Zarówno dzrzewa jak i lasy mają ograniczoną zdolność radzenia sobie z zależnościami między zmiennymi i to nie tylko nielinniowymi lecz również linniowymi. Dlatego budowanie agregatów typu: A+B, A-B, A*B, A/B daje nam szansę pozyskania nowych zmiennych, które będą pomocne w zbudowaniu lepszego klasyfikatora. Jednak nie ma sensu stosować tych transformacji "na ślepo", zwłaszcza jeśli znamy interpretację zmiennych jakie mamy dostępne. Należy zastanowić się czy dana transformacja ma jakikolwiek sens. Na przykład: WAGA-WZROST nie stanowi żadnej ciekawej informacji, zaś: WAGA/WZROST ma całkiem sensowną interpretację i tym samym staje się dobrym kandydatem na nową zmienną.

2. Jak ocenić czy warto połączyć dwie zmienne czy też nie?
To nie jest proste pytanie i to conajmniej z 2 powodów:
a) nie określamy jak chcemy "połączyć" te zmienne, czy to ma być suma czy iloraz itp...
b) nie określamy co znaczy "czy warto" - czyli na czym polega nasza ocena
Punkt (b) zawiera w sobie nieco więcej niż tylko kwestię użytej miary oceny klasyfikacji. Problem polega na tym, że zależnie od tego jaki rodzaj klasyfikatora wybierzemy (drzewka, lasy, regresja, sieci neuronowe, ...) to wpływ nowej zmiennej może mieć duże lub małe znaczenie. Na przykład dodając do zbioru zmienną: X+Y dla drzewka możemy odnotować poprawę jakości modelu, zaś dla regresji logistycznej kompletnie nic się nie zmieni (poza potencjalnymi problemami z korelacją zmiennych w modelu). Konstrukcja regresji logistycznej powoduje, że przekształcenia liniowe (X+Y,X-Y) jest ona w stanie sama "wygenerować" poprzez odpowieni dobór współczynników. Jeśli więc taka zależność byłaby istotna to regresja niejako z automatu to uwzględni.

Zawsze możemy wykonać test. Na przykład: badamy czy przekształcenie X+Y ma sens. Robimy dodatkową zmienną: X+Y. Teraz budujemy 3 klasyfikatory:
k0 : na zmiennych (X,Y)
k1 : na zmiennych (X,Y,X+Y)
k2 : na zmiennych (X,Y,RANDOM)
gdzie RANDOM to zmienna losowa. Następnie porównujemy wyniki. Spodziewamy się, że najlepszy wynik powinien dawać model k1. Jeśli jednak wyniki te są porównywalne z modelem k2 to oznacza to, że nowa zmienna nie niesie istotnej informacji. Model k0 w większości przypadków powinien wypaść najsłabiej.

Powstaje pytanie: dlaczego model k2 ma w ogóle szansę "wygrać" z modelem k0?
Powód jest prosty - każda nowa zmienna, nawet jeśli jest losowa, może dać sznsę na odróżnienie od siebie kilku obserwacji (rekordów). Tym samym może ona wejść do modelu i dawać dobry wynik na zbiorze treningowym. Na zbiorze testowym należy zaś spodziewać się obnażenia takiej losowej zmiennej. Opisane zjawisko najłatwiej zaobserwować dla takich modeli jak drzewa czy lasy, zwłaszcza jeśli są to dość głębokie drzewa lub liczne lasy.

Nowa zmienna jaką dodajemy do modelu nie może wpływać na model tak samo jak zmienna losowa - to oznaczałoby, że zmienna taka jest po prostu nieprzydatna...

pozdrawiam
Michał M.

konto usunięte

Temat: Drzewa decyzyjne/las losowy interakcje pomiędzy zmiennymi

Witam

Poniżej może nie wyczerpująca lecz mam nadzieję użyteczna odpowiedź :)

1. Transformacje zmiennych
Zarówno dzrzewa jak i lasy mają ograniczoną zdolność radzenia sobie z zależnościami między zmiennymi i to nie tylko nielinniowymi lecz również linniowymi. Dlatego budowanie agregatów typu: A+B, A-B, A*B, A/B daje nam szansę pozyskania nowych zmiennych, które będą pomocne w zbudowaniu lepszego klasyfikatora. Jednak nie ma sensu stosować tych transformacji "na ślepo", zwłaszcza jeśli znamy interpretację zmiennych jakie mamy dostępne. Należy zastanowić się czy dana transformacja ma jakikolwiek sens. Na przykład: WAGA-WZROST nie stanowi żadnej ciekawej informacji, zaś: WAGA/WZROST ma całkiem sensowną interpretację i tym samym staje się dobrym kandydatem na nową zmienną.

2. Jak ocenić czy warto połączyć dwie zmienne czy też nie?
To nie jest proste pytanie i to conajmniej z 2 powodów:
a) nie określamy jak chcemy "połączyć" te zmienne, czy to ma być suma czy iloraz itp...
b) nie określamy co znaczy "czy warto" - czyli na czym polega nasza ocena
Punkt (b) zawiera w sobie nieco więcej niż tylko kwestię użytej miary oceny klasyfikacji. Problem polega na tym, że zależnie od tego jaki rodzaj klasyfikatora wybierzemy (drzewka, lasy, regresja, sieci neuronowe, ...) to wpływ nowej zmiennej może mieć duże lub małe znaczenie. Na przykład dodając do zbioru zmienną: X+Y dla drzewka możemy odnotować poprawę jakości modelu, zaś dla regresji logistycznej kompletnie nic się nie zmieni (poza potencjalnymi problemami z korelacją zmiennych w modelu). Konstrukcja regresji logistycznej powoduje, że przekształcenia liniowe (X+Y,X-Y) jest ona w stanie sama "wygenerować" poprzez odpowieni dobór współczynników. Jeśli więc taka zależność byłaby istotna to regresja niejako z automatu to uwzględni.

Zawsze możemy wykonać test. Na przykład: badamy czy przekształcenie X+Y ma sens. Robimy dodatkową zmienną: X+Y. Teraz budujemy 3 klasyfikatory:
k0 : na zmiennych (X,Y)
k1 : na zmiennych (X,Y,X+Y)
k2 : na zmiennych (X,Y,RANDOM)
gdzie RANDOM to zmienna losowa. Następnie porównujemy wyniki. Spodziewamy się, że najlepszy wynik powinien dawać model k1. Jeśli jednak wyniki te są porównywalne z modelem k2 to oznacza to, że nowa zmienna nie niesie istotnej informacji. Model k0 w większości przypadków powinien wypaść najsłabiej.

Powstaje pytanie: dlaczego model k2 ma w ogóle szansę "wygrać" z modelem k0?
Powód jest prosty - każda nowa zmienna, nawet jeśli jest losowa, może dać sznsę na odróżnienie od siebie kilku obserwacji (rekordów). Tym samym może ona wejść do modelu i dawać dobry wynik na zbiorze treningowym. Na zbiorze testowym należy zaś spodziewać się obnażenia takiej losowej zmiennej. Opisane zjawisko najłatwiej zaobserwować dla takich modeli jak drzewa czy lasy, zwłaszcza jeśli są to dość głębokie drzewa lub liczne lasy.

Nowa zmienna jaką dodajemy do modelu nie może wpływać na model tak samo jak zmienna losowa - to oznaczałoby, że zmienna taka jest po prostu nieprzydatna...

pozdrawiam
Michał M.
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Drzewa decyzyjne/las losowy interakcje pomiędzy zmiennymi

.Kamil Bęczyński edytował(a) ten post dnia 29.05.11 o godzinie 18:39
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Drzewa decyzyjne/las losowy interakcje pomiędzy zmiennymi

Michał Mikołajczyk:
Witam

Poniżej może nie wyczerpująca lecz mam nadzieję użyteczna odpowiedź :)
(...)
2. Jak ocenić czy warto połączyć dwie zmienne czy też nie?
To nie jest proste pytanie i to conajmniej z 2 powodów:
a) nie określamy jak chcemy "połączyć" te zmienne, czy to ma być suma czy iloraz itp...
b) nie określamy co znaczy "czy warto" - czyli na czym polega nasza ocena
Punkt (b) zawiera w sobie nieco więcej niż tylko kwestię użytej miary oceny klasyfikacji. Problem polega na tym, że zależnie od tego jaki rodzaj klasyfikatora wybierzemy (drzewka, lasy, regresja, sieci neuronowe, ...) to wpływ nowej zmiennej może mieć duże lub małe znaczenie. Na przykład dodając do zbioru zmienną: X+Y dla drzewka możemy odnotować poprawę jakości modelu, zaś dla regresji logistycznej kompletnie nic się nie zmieni (poza potencjalnymi problemami z korelacją zmiennych w modelu). Konstrukcja regresji logistycznej powoduje, że przekształcenia liniowe (X+Y,X-Y) jest ona w stanie sama "wygenerować" poprzez odpowieni dobór współczynników. Jeśli więc taka zależność byłaby istotna to regresja niejako z automatu to uwzględni.
(...)
pozdrawiam
Michał M.

Dziękuję za wyczerpującą odpowiedź, właśnie powróciłem ponownie do problemu dodawania nowych zmiennych.

W temacie interakcji pomiędzy zmiennymi w przypadku lasów losowych natrafiłem na ciekawą wzmiankę na stronie ich twórcy Leo Breiman'a :

"Interactions

The operating definition of interaction used is that variables m and k interact if a split on one variable, say m, in a tree makes a split on k either systematically less possible or more possible. The implementation used is based on the gini values g(m) for each tree in the forest. These are ranked for each tree and for each two variables, the absolute difference of their ranks are averaged over all trees.

This number is also computed under the hypothesis that the two variables are independent of each other and the latter subtracted from the former. A large positive number implies that a split on one variable inhibits a split on the other and conversely. This is an experimental procedure whose conclusions need to be regarded with caution. It has been tested on only a few data sets."

zaciekawiło mnie to, ale jeszcze nie przemyślałem tych informacji, więc nie będę się do nich odwoływał.

Pomimo długiego googlowania nie natrafiłem na materiały na temat możliwości lasów losowych w zakresie radzenia sobie z interakcjami pomiędzy zmiennymi. Zaskoczyło mnie to, że lasy radzą sobie słabo z zależnościami liniowymi (x+y,x-y) pomiędzy zmiennymi czy zna Pan jakąś publikację na ten temat, czy może pisze Pan na podstawie swojego doświadczenia ? Ze swojej strony mogę dodać, że lasy, choć dobrze radzą sobie z obecnością zmiennych nieistotnych, to jednak w przypadku nieusunięcia ich z modelu, spowodują duże pogorszenie wyników w zbiorze testowym, jeżeli rozkłady klas w zbiorze treningowym i testowym znacząco się różnią.

Wracając do Pana posta i jednego z moich pytań, które brzmiało : W jaki sposób można wykryć zmienne, które badane łącznie mają większą siłę predykcyjną, niż te same zmienne badane osobno - może służą ku temu jakieś miary zastosowane do łącznej gęstości p(x,y) ?

Założenia : dużo zmiennych, wszystkie ilościowe, bardzo duża liczba obserwacji, problem klasyfikacyjny.
Na początku ograniczę się do problemu klasyfikacji z dwoma klasami p(klasa1)=p(klasa2).I(x,y) - zmienna będąca wynikiem jakiejś interakcji, I(x,y,mean) to wzięcie średniej (niefortunnie dobrałem ogólną nazwę dla interakcji I, gdyż I zwyczajowo oznacza informację wzajemną, która zaraz się pojawi, a którą oznaczę MI )

Wydaje mi się, że w takim przypadku wystarczy porównać rozkłady I(x,y) w klasie 1 i 2, na przykład przy pomocy informacji wzajemnej im mniejsza wartość MI(I(x,y|klasa1),I(x,y|klasa2)) tym lepiej, oczywiście istnieje problem nakładania się rozkładów: I(x,y|klasa1) - ma rozkład normalny ze srednia w 0 I(x,y|klasa2) ma rozkład t-Student z niską liczbą stopni swobody, średnią 0, czyli MI jest całkiem spora, ale mody, średnie i mediany leżą w tym samym miejscu, więc wydaje się intuicyjne, że nowa zmienna nie dostarczy metodom liniowym nowych informacji.
Ponadto, wydaje mi się, że trzeba jeszcze porównać MI(I(x,y|klasa1),I(x,y|klasa2)) ze średnimi MI dla x i y w klasach 1 i 2, czyli przykładowo obliczając :
DiffMI(x,y)=2*MI( I(x,y|klasa1) , I(x,y|klasa2) )-
( MI(x|klasa1,x|klasa2) + MI(y|klasa1,y|klasa2) )
w ten sposób wiemy, jak dużo informacji wnosi interakcja w porównaniu ze zmiennymi z których powstała. Pomiar tej różnicy wartości informacji wzajemnych częściowo rozwiązuje problem, gdy nie oczyściliśmy zbioru z nieistotnych zmiennych. Mając zbiór który trójkom postaci : (x,y,rodzaj_interakcji), przypisuje MI(I(x,y|klasa1),I(x,y|klasa2)) oraz DiffMI(x,y) możemy wybrać te trójki (x,y,rodzaj_interakcji) które są najlepsze w przypadku obu wielkości lub wybrać zbiór Pareto optymalny i przeanalizować go jeszcze głębiej.
Problem pojawia się dla więcej, niż dla dwóch klas, gdyż nie jestem pewien jaką funkcję agregująca wybrać :
średnią [ MI(I(x,y|klasa_i),I(x,y|klasa_j) ] czy też,
max[ MI(I(x,y|klasa_i),I(x,y|klasa_j) ], max[] skupia się na wykryciu wyłącznie najlepszej poprawy zróżnicowania rozkładów pomiędzy tylko dwoma klasami, można też wybrać funkcję skupiającą się poprawie identyfikacji tylko jednej spośród wielu klas, czyli max od i, ze średnich obliczanych po j MI(I(x,y|klasa_i),I(x,y|klasa_j).
W przypadku wielu klas obliczanie agregatów różnic wspólnej informacji jest już mniej intuicyjne, nawet nie jestem pewien, czy obliczenie średniej z nich byłoby właściwe, może zamiast DiffMI(x,y) zastosować iloraz.

W przypadku wielu klas można posłużyć się wielowymiarowym uogólnieniem wzajemnej informacji, ale trudno jest znaleźć zaimplementowany estymator dla takiego uogólnienia, poza tym wydaje mi się, że w przypadku wielowymiarowym wystąpi problem w jakiś sposób podobny do "maskowania" :)
Pominięty został problem relatywnej istotności I(x,y) do pozostałych zmiennych, gdyż może okazać się, że :

MI(I(x,y|klasa1),z|klasa1)+ MI(I(x,y|klasa2),z|klasa2) będzie bardzo duże, co oznaczałoby, że I(x,y) zawiera te same informacje co istniejąca już zmienna z. Uwzględnienie tego problemu wymagałoby chyba wprowadzenia trzeciej cechy opisującej trójki (x,y,rodzaj_interakcji) lub jakiegoś poziomu odcinającego I(x,y) zbyt podobne do pewnego z, za wartość tego poziomu można uznać wartość MI(w|klasa1,z|klasa1)+MI(w|klasa2,z|klasa2) uśrednioną po wszystkich zmiennych w zbiorze.

Pominąłem tu problem estymacji samej informacji wzajemnej MI(), dla dużego zbioru danych nie powinno być problemu z "gładkością" funkcji. Jednak jak to bywa z danymi empirycznymi, mogą pojawić się pojawić lokalne maksima w ogonach rozkładu funkcji gęstości. Nie wiem też czy outliery wpływają znacząco na oszacowania MI().

Oczywiście trudno jest przeskoczyć bezpośrednią ingerencję użytkownika w proces tworzenia nowych zmiennych na przykład postaci : wariancja(zm1,zm2,zm3,...zm10),min(zm1,...,zm10)/max(zm1,...,zm10), gdzie zm1,...zm10 są tylko podzbiorem zbioru zmiennych, posiadającym podobną interpretację - gdy część ze zmiennych ma takie same interpretacje ale są mierzone w różnych okresach lub dla różnych wartości jakiejś zmiennej /parametru pomiaru np. pomiary natężenia dla różnych częstotliwości.

PozdrawiamKamil Bęczyński edytował(a) ten post dnia 29.05.11 o godzinie 20:47



Wyślij zaproszenie do