Uczymy się budowad drzewa decyzyjne algorytmem ID 3.
Rozważmy binarną klasyfikację C. Jeśli mamy zbiór przykładów S, dla którego potrafimy stwierdzid, które przykłady ze zbioru S dają wartośd pozytywną dla C (p+) a które wartośd negatywną dla C (p-) wówczas entropię (ang. Entropy) dla S obliczymy jako:
Zatem mając daną klasyfikację na większą liczbę klas (C dzieli się na kategorie c1, ..., cn) i wiedząc które przykłady ze zbioru S mają klasę ci obliczymy odpowiednią proporcję dla pi, a wtedy entropię dla S policzymy jako:
Interpretacja wartości: -p*log2(p) jest taka, że kiedy p osiąga wartośd bliską zeru (0) (tak się dzieje m.in. wtedy, gdy kategoria ma tylko kilka przykładów (jest mało liczna), wtedy wartośd log(p) osiąga dużą wartośd ujemną, ale po wymnożeniu przez wartośd p ostatecznie cała entropia osiąga wartośd bliską 0. Podobnie, jeśli p osiąga wartośd bliską 1 (gdy kategoria rozważana pochłania większośd przykładów ze zbioru), wtedy wartośd log(p) jest bliska 0, a wtedy całościowa entropia także osiąga wartośd 0. To ma na celu pokazad, że entropia osiąga wartośd bliską 0 albo wtedy gdy dla danej kategorii jest bardzo mało przykładów, albo wręcz dana kategoria pochłania większośd przykładów zadanych w analizowanym zbiorze.
Information Gain
Na każdym etapie budowy drzewa trzeba wybrad atrybut który będzie tworzył dany węzeł w drzewie. Na początku powstaje problem, który atrybut powinien budowad korzeo drzewa.
W tym celu oblicza się zysk informacyjny jaki da dany atrybut jeśli to jego użyjemy do budowy węzła w drzewie:
Jeśli więc mamy atrybut A z jego możliwymi wartościami, dla każdej możliwej wartości v, obliczymy entropię dla tej wartości danego atrybutu (Sv):
Załóżmy, że mamy zbiór 4 elementów w zbiorze S = {s1,s2,s3,s4} i że mamy tzw. binarną kategoryzację, a więc dwie klasy {positive, negative} takie, że s1 oznacza klasę positive a reszta negative. Jeśli teraz chcemy obliczyd zysk informacyjny (ang. information gain) dla atrybutu A, który ma 3 możliwe wartości {v1,v2,v3} i założymy, że
s1 ma wartośd v2 dla atrybutu A
s2 ma wartośd v2 dla atrybutu A
s3 ma wartośd v3 dla atrybutu A
s4 ma wartośd v1 dla atrybutu A
musimy w pierwszej kolejności obliczyd wartośd entropii dla S:
p+ = ¼ p- = ¾
Więc obliczamy:
Entropy(S) = -(1/4)log2(1/4) -(3/4)log2(3/4) = -(1/4)(-2) -(3/4)(-0.415) = 0.5 + 0.311 = 0.811 log2(x) = ln(x)/ln(2), gdzie ln(2) jest logarytmem naturalnym z liczby 2.
Następnie obliczamy ważoną entropię Entropy(Sv) dla każdej wartości v = v1, v2, v3, v4 pamiętając, że ważenie entropii wymaga obliczenia wyrażenia (|Svi|/|S|).
Sv1 = {s4}, sv2={s1, s2}, sv3 = {s3}.
Zatem obliczamy odpowiednio wartości:
(|Sv1|/|S|) * Entropy(Sv1) = (1/4) * (-(0/1)log2(0/1) - (1/1)log2(1/1)) = (1/4)(-0 -(1)log2(1)) = (1/4)(-0 -0) = 0 (|Sv2|/|S|) * Entropy(Sv2) = (2/4) * (-(1/2)log2(1/2) - (1/2)log2(1/2)) = (1/2) * (-(1/2)*(-1) - (1/2)*(-1)) = (1/2) * (1) = 1/2
(|Sv3|/|S|) * Entropy(Sv3) = (1/4) * (-(0/1)log2(0/1) - (1/1)log2(1/1)) = (1/4)(-0 -(1)log2(1)) = (1/4)(-0 -0) = 0 Zauważ, że 0 log2(0) jest równe 0 zaś log2(1) = 0 oraz log2(1/2) = -1.
Zsumowanie tych 3 wartości da nam wartośd entropii dla S Gain(S,A) = 0.811 - (0 + 1/2 + 0) = 0.311
Zadanie
Wyobraźmy sobie, że zawsze w weekend wykonujemy podobne czynności: robimy zakupy, oglądamy film, gramy w tenisa, albo po prostu zostajemy w domu. To co robimy zwykle zależy od 3 czynników: od pogody (wiatr, deszcz, słooce), od tego ile mamy pieniędzy (bogaty, biedny) oraz od tego czy odwiedzą Cię wtedy znajomi.
przykład pogoda znajomi pieniądze czynnośd
W1 Sunny Yes Rich Cinema
W2 Sunny No Rich Tennis
W3 Windy Yes Rich Cinema
W4 Rainy Yes Poor Cinema
W5 Rainy No Rich Stay
W6 Rainy Yes Poor Cinema
W7 Windy No Poor Cinema
W8 Windy No Rich Shopping
W9 Windy Yes Rich Cinema
W10 Sunny No Rich Tennis
Czyli mamy na 10 przykładów:
6 razy wartośd „Cinema” – czyli 6 razy na 10 mamy wartośd „Cinema”
2 razy wartośd „tennis”
1 raz wartośd „shopping”
1 raz wartośd „stay”
Entropy(S) = -pcinema log2(pcinema) -ptennis log2(ptennis) -pshopping log2(pshopping) -pstay_in log2(pstay_in) = -(6/10) * log2(6/10) -(2/10) * log2(2/10) -(1/10) * log2(1/10) -(1/10) * log2(1/10) = -(6/10) * -0.737 -(2/10) * -2.322 -(1/10) * -3.322 -(1/10) * -3.322 = 0.4422 + 0.4644 + 0.3322 + 0.3322 = 1.571
Gain(S, pogoda) = 1.571 - (|Ssun|/10)*Entropy(Ssun) - (|Swind|/10)*Entropy(Swind) - (|Srain|/10)*Entropy(Srain) = 1.571 - (0.3)*Entropy(Ssun) - (0.4)*Entropy(Swind) - (0.3)*Entropy(Srain) = 1.571 - (0.3)*(0.918) - (0.4)*(0.81125) - (0.3)*(0.918) = 0.70
Gain(S, znajomi) = 1.571 - (|Syes|/10)*Entropy(Syes) - (|Sno|/10)*Entropy(Sno) = 1.571 - (0.5) * 0 - (0.5) * 1.922 = 1.571 - 0.961 = 0.61
Gain(S, pieniądze) = 1.571 - (|Srich|/10)*Entropy(Srich) - (|Spoor|/10)*Entropy(Spoor) = 1.571 - (0.7) * (1.842) - (0.3) * 0 = 1.571 - 1.2894 = 0.2816
To oznacza, że pierwszym węzłem w drzewie, a więc korzeniem drzewa będzie atrybutu „pogoda”.
Od tego węzła wyprowadzamy krawędzie (tyle ile wartości miał atrybut „pogoda”).
Przyjrzyjmy się pierwszej gałęzi Ssunny = {W1, W2, W10}.
Nie jest ona pusta, więc musimy sprawdzid jakie możliwe kategorie są przypisane wszystkim przykładom z tej grupy czyli elementom W1, W2 orazW10. Są to wartości: Cinema, Tennis i Tennis. Ponieważ nie są one wszystkie z jednej kategorii (ale w tym przypadku z dwóch: Cinema i Tennis), nie możemy od razu utworzyd liścia drzewa i zakooczyd budowy drzewa w tej gałęzi. Musimy rozbudowad tę gałąź. A więc w kolejnej iteracji wybrad nowy atrybut, który rozdzieli te 3 przykłady W1, W2 i W10 jak się spodziewacie na 2 kategorie: Cinema i Tennis.
Teraz zajmijmy się drugą gałęzią Swindy = {W3, W7, W8, W9}.
Znów jest tak, że elementy w tej gałęzi drzewa niestety nie należą do wspólnej jednej kategorii toteż musimy rozbudowad tą gałąź poprzez utworzenie w niej węzła z kolejnym atrybutem, który najlepiej rozdzieli te 4 elementy.
Jaki to ma byd atrybutu ?
Na pewno nie ”pogoda” bo przecież ten dopiero co użyliśmy do budowy korzenia drzewa. Musimy sprawdzid teraz wszystkie pozostałe atrybuty, i wybrad ten z nich który da największy zysk informacyjny.
Gain(Ssunny, znajomi) = ? Gain(Ssunny, pieniądze) = ? Entropy(Ssunny) = 0.918.
Ssunny = {W1,W2,W10}
przykład pogoda znajomi pieniądze czynnośd
W1 Sunny Yes Rich Cinema
W2 Sunny No Rich Tennis
W10 Sunny No Rich Tennis
Gain(Ssunny, znajomi) = 0.918 - (|Syes|/|S|)*Entropy(Syes) - (|Sno|/|S|)*Entropy(Sno) = 0.918 - (1/3)*0 - (2/3)*0 = 0.918
Gain(Ssunny, pieniądze) = 0.918 - (|Srich|/|S|)*Entropy(Srich) - (|Spoor|/|S|)*Entropy(Spoor) = 0.918 - (3/3)*0.918 - (0/3)*0 = 0.918 - 0.918 = 0
Entropy(Syes) =0 Entropy(Sno) =0
Już zatem wiadomo, że Gain(Ssunny, znajomi) będzie równa wartośd maksymalnej, bo wartości cząstkowe dadzą wartośd 0, a więc od wartości 0.918 odejmując 0 otrzymamy nadal wartośd 0.918.
Gdy policzymy natomiast Gain(Ssunny, pieniądze) otrzymamy wartośd 0, a więc informację, ze atrybut
„pieniądze” nie wnosi dla tej gałęzi żadnej użytecznej informacji, wiec nie powinniśmy go używad do budowy węzła. Jedynym więc słusznym węzłem będzie węzeł „znajomi”.
Zadanie!
Dokooczcie budowę drzewa !