tutorial
Transkrypt
tutorial
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) * (-(1/2)*(-1) - (1/2)*(-1)) = (1/2) * (1) = 1/2
-
(1/2)log2(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
W1
W2
W3
W4
W5
W6
W7
W8
W9
W10
pogoda
Sunny
Sunny
Windy
Rainy
Rainy
Rainy
Windy
Windy
Windy
Sunny
znajomi
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
pieniądze
Rich
Rich
Rich
Poor
Rich
Poor
Poor
Rich
Rich
Rich
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”
czynnośd
Cinema
Tennis
Cinema
Cinema
Stay
Cinema
Cinema
Shopping
Cinema
Tennis
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)
= 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)
= 1.571 - (0.7) * (1.842) - (0.3) * 0 = 1.571 - 1.2894 = 0.2816
-
-
(|Sno|/10)*Entropy(Sno)
(|Spoor|/10)*Entropy(Spoor)
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
W1
W2
W10
pogoda
Sunny
Sunny
Sunny
znajomi
Yes
No
No
pieniądze
Rich
Rich
Rich
czynnośd
Cinema
Tennis
Tennis
Gain(Ssunny,
znajomi)
=
0.918
(|Syes|/|S|)*Entropy(Syes)
= 0.918 - (1/3)*0 - (2/3)*0 = 0.918
Gain(Ssunny,
pieniądze)
=
0.918
(|Srich|/|S|)*Entropy(Srich)
= 0.918 - (3/3)*0.918 - (0/3)*0 = 0.918 - 0.918 = 0
-
-
(|Sno|/|S|)*Entropy(Sno)
(|Spoor|/|S|)*Entropy(Spoor)
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 !