Michał Bieroński, 218324
Mateusz Burniak, 218321
Polega na sekwencyjnym dzieleniu zbiorów na dwa rozłączne i dopełniające się podzbiory tak, by były możliwie jednorodne.
Który z trzech węzłów może zostać łatwo opisany?
Konkluzja: im bardziej nieczysty węzeł - tym więcej potrzeba informacji by go opisać.
Gdzie p i q oznaczają odpowiednio prawdopodobieństwo sukcesu i porażki w danym węźle.
Można to wykorzystać w przypadku kategoryzacji - podział węzła.
Drzewo zaczyna od pojedynczego węzła reprezentującego cały zbiór treningowy.
Jeżeli wszystkie przykłady należą do jednej klasy decyzyjnej, to zbadany węzeł staje się liściem i jest on etykietowany tą decyzją.
W przeciwnym przypadku algorytm wykorzystuje miarę entropii jako heurystyki do wyboru atrybutu, który najlepiej dzieli zbiór przykładów treningowych.
Dla każdego wyniku testu tworzy się jedno odgałęzienie i przykłady treningowe są odpowiednio rozdzielone do nowych węzłów (poddrzew).
Algorytm działa dalej w rekurencyjny sposób dla zbiorów przykładów przydzielonych do poddrzew.
Algorytm kończy się, gdy kryterium stopu jest spełnione.
Kategoria | 1 | 0 |
---|---|---|
Płeć | K | M |
Wzrost | Wysoki | Niski |
Klasa | IX | X |
Gra | Tak | Nie |
Text
Text
import pandas as pd
from sklearn import tree
from sklearn.externals.six import StringIO
import pydotplus
df = pd.read_csv("data.csv", header=0)
original_headers = list(df.columns.values)
df = df._get_numeric_data()
numpy_array = df.as_matrix()
X = numpy_array[:, :3]
Y = numpy_array[:, -1]
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(X, Y)
dot_data = StringIO()
tree.export_graphviz(clf,
out_file=dot_data,
feature_names=original_headers[:3],
class_names=['Tak', 'Nie'],
filled=True, rounded=True,
impurity=False)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("cricket.pdf")
graph.write_png("cricket.png")
Metoda pozwalająca na znalezienie różnic statystycznych pomiędzy podwęzłami, a węzłem rodzicem.
Corrado Gini, XX w.,
włoski statystyk
i demograf
Jeśli populacja jest czysta, to losowy wybór dwóch danych, które należą do tej samej klasy występuje z prawdopodobieństwem równym 1.
\( p \) - prawdopodobieństwo sukcesu
\( q \) - prawdopodobieństwo porażki
Gini dla kobiet: \( 0.2^2 + 0.8^2 = 0.68 \)
Gini dla mężczyzn: \( 0.65^2 + 0.35^2 = 0.55 \)
Średnia ważona dla płci: \( \frac{10}{30} \times 0.68 + \frac{20}{30} \times 0.55 = 0.59 \)
Gini dla młodszych: \( 0.43^2 + 0.57^2 = 0.51 \)
Gini dla starszych: \( 0.56^2 + 0.44^2 = 0.51 \)
Średnia ważona dla wieku: \( \frac{14}{30} \times 0.51 + \frac{16}{30} \times 0.51 = 0.51 \)
Podobnie jak poprzednio
\( \bar X \) - to średnia
\( X \) - wartość aktualna
\( n \) - liczba wartości
Dla kobiet:
\( \bar X = \frac {2 \times 1 + 8 \times 0} {10} = 0.2 \)
\( Var = \frac {2 \times (1 -0.2)^2 + 8 \times (0-0.2)^2} {10} \)
\( Var = 0.16 \)
Dla mężczyzn:
\( \bar X = \frac {13 \times 1 + 7 \times 0} {20} = 0.65 \)
\( Var = \frac {13 \times (1 -0.65)^2 + 7 \times (0-0.65)^2} {20} \)
\( Var = 0.23\)
Wariancja ważona dla płci: \( \frac{10}{30} \times 0.16 + \frac{20}{30} \times 0.23 = 0.21 \)
Dla młodszych:
\( \bar X = \frac {6 \times 1 + 8 \times 0} {14} = 0.43 \)
\( Var = \frac {6 \times (1 -0.43)^2 + 8 \times (0-0.43)^2} {14} = 0.24 \)
Dla starszych:
\( \bar X = \frac {9 \times 1 + 7 \times 0} {16} = 0.56 \)
\( Var = \frac {9 \times (1 -0.56)^2 + 7 \times (0-0.56)^2} {16} = 0.25 \)
Wariancja ważona dla wieku: \( \frac{14}{30} \times 0.24 + \frac{16}{30} \times 0.25 = 0.25 \)
Michał Bieroński, 218324
Mateusz Burniak, 218321