Drzewa decyzyjne w uczeniu maszynowym
- Poprzednia strona Trening/Testing
- Następna strona Wprowadzenie do MySQL

Drzewo decyzyjne (Decision Tree)
W tym rozdziale pokażemy, jak tworzyć "drzewo decyzyjne". Drzewo decyzyjne to diagram procesowy, który pomaga w podejmowaniu decyzji na podstawie wcześniejszego doświadczenia.
W tym przykładzie osoba spróbuje zdecydować, czy powinna wziąć udział w przedstawieniu komediowym.
Na szczęście, nasz przykładowy bohater zawsze rejestruje się na przedstawienie komediowe w mieście, rejestruje również informacje o aktorach komediowych i zapisuje, czy byli oni już tam.
Wiek | Doświadczenie | Rank | Nationality | Go |
---|---|---|---|---|
36 | 10 | 9 | UK | NO |
42 | 12 | 4 | USA | NO |
23 | 4 | 6 | N | NO |
52 | 4 | 4 | USA | NO |
43 | 21 | 8 | USA | YES |
44 | 14 | 5 | UK | NO |
66 | 3 | 7 | N | YES |
35 | 14 | 9 | UK | YES |
52 | 13 | 7 | N | YES |
35 | 5 | 9 | N | YES |
24 | 3 | 5 | USA | NO |
18 | 3 | 7 | UK | YES |
45 | 9 | 9 | UK | YES |
Teraz, na podstawie tego zestawu danych, Python może stworzyć drzewo decyzyjne, które można użyć do decydowania, czy warto wziąć udział w nowym koncercie.
Działanie
Najpierw zaimportuj wymagane moduły i użyj pandas do odczytania zestawu danych:
Przykład
Przeczytaj i wydrukuj zestaw danych:
import pandas from sklearn import tree import pydotplus from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt import matplotlib.image as pltimg df = pandas.read_csv("shows.csv") print(df)
Aby stworzyć drzewo decyzyjne, wszystkie dane muszą być liczbami.
Musimy przekształcić nieliczbowe kolumny 'Nationality' i 'Go' na liczby.
Pandas ma funkcję map()
Metoda, która przyjmuje słownik zawierający informacje o tym, jak przekształcać wartości.
{'UK': 0, 'USA': 1, 'N': 2}
Oznacza to, że wartość 'UK' jest przekształcana na 0, wartość 'USA' na 1, a wartość 'N' na 2.
Przykład
Zamień wartości tekstowe na liczby:
d = {'UK': 0, 'USA': 1, 'N': 2} df['Nationality'] = df['Nationality'].map(d) d = {'YES': 1, 'NO': 0} df['Go'] = df['Go'].map(d) print(df)
Następnie, musimy oddzielić kolumny cech od kolumny docelowej.
Kolumny cech to te, z których próbujemy przewidywać, a kolumny docelowe to te, które zawierają wartości, które próbujemy przewidywać.
Przykład
X to kolumna cech, y to kolumna docelowa:
features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)
Teraz możemy utworzyć rzeczywisty drzewo decyzyjne, dostosowany do naszych szczegółów, a następnie zapisać go na komputerze jako plik .png:
Przykład
Utwórz drzewo decyzji, zapisz je jako obraz i wyświetl go:
dtree = DecisionTreeClassifier() dtree = dtree.fit(X, y) data = tree.export_graphviz(dtree, out_file=None, feature_names=features) graph = pydotplus.graph_from_dot_data(data) graph.write_png('mydecisiontree.png') img=pltimg.imread('mydecisiontree.png') imgplot = plt.imshow(img) plt.show()
Wyjaśnienie wyników
Drzewo decyzji używa Twoich wcześniejszych decyzji do obliczenia prawdopodobieństwa, że chcesz zobaczyć aktora komediowego.
Pozwólmy przeczytać różne aspekty drzewa decyzji:

Rank
Rank <= 6.5
Oznacza to, że aktorzy komediowi o rankingu poniżej 6.5 będą podążać: True
Strzałka (w lewo), reszta jest zgodna z False
Strzałka (w prawo).
gini = 0.497
Oznacza jakość podziału, która zawsze jest liczbą w zakresie 0.0 do 0.5, gdzie 0.0 oznacza, że wszystkie próbki uzyskują ten sam wynik, a 0.5 oznacza, że podział jest całkowicie w środku.
samples = 13
Oznacza to, że w tym momencie decyzji jeszcze pozostaje 13 aktorów komediowych, ponieważ to jest pierwszy krok, więc wszyscy są aktorami komediowymi.
value = [6, 7]
Oznacza to, że w 13 aktorach komediowych 6 z nich uzyska "NO", a 7 "GO".
Gini
Metod podziału próbek jest wiele, w tym tutorialu używamy metody GINI.
Metoda Gini używa następującego wzoru:
Gini = 1 - (x/n)2 - (y/n)2
W tym, x to liczba pozytywnych odpowiedzi ("GO"), n to liczba próbek, y to liczba negatywnych odpowiedzi ("NO"), obliczane za pomocą następującego wzoru:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Następny krok zawiera dwa pudełka, jedno dla aktorów komediowych o 'Rank' 6.5 lub niższym, a reszta dla jednego pudełka.
True - 5 aktorów komediowych kończy się tutaj:
gini = 0.0
Oznacza to, że wszystkie próbki uzyskują ten sam wynik.
samples = 5
Oznacza to, że w tej gałęzi jeszcze pozostaje 5 aktorów komediowych (5 aktorów o poziomie 6.5 lub niższym).
value = [5, 0]
oznacza, że 5 otrzyma "NO", a 0 otrzyma "GO".
Fałsz - 8 aktorów teatralnych kontynuują:
Narodowość (narodowość)
Narodowość <= 0,5
oznacza, że aktorzy komediowi z wartością narodowości mniejszą niż 0,5 będą podążać za strzałką po lewej stronie (co oznacza wszystkich z Wielkiej Brytanii), a reszta za strzałką po prawej stronie.
gini = 0,219
oznacza, że około 22% próbek będzie poruszać się w jednym kierunku.
samples = 8
oznacza, że w tej gałęzi jeszcze pozostaje 8 aktorów komediowych (8 aktorów z oceną wyższą niż 6,5).
value = [1, 7]
oznacza, że z tych ośmiu aktorów komediowych, 1 aktor otrzyma "NO", a 7 aktorów otrzyma "GO".

Prawda - 4 aktorzy teatralni kontynuują:
Wiek (wiek)
Wiek <= 35,5
oznacza, że aktorzy komediowi w wieku 35,5 lat lub młodszy będą podążać za strzałką po lewej stronie, a reszta za strzałką po prawej stronie.
gini = 0,375
oznacza, że około 37,5% próbek będzie poruszać się w jednym kierunku.
samples = 4
oznacza, że w tej gałęzi jeszcze pozostaje 4 aktorów komediowych (4 aktorów z Wielkiej Brytanii).
value = [1, 3]
oznacza, że z tych czterech aktorów komediowych, 1 aktor otrzyma "NO", a 3 aktorzy otrzymają "GO".
Fałsz - 4 aktorzy komediowi tutaj kończą:
gini = 0.0
Oznacza, że wszystkie próbki uzyskują ten sam wynik.
samples = 4
oznacza, że w tej gałęzi jeszcze pozostaje 4 aktorów komediowych (4 aktorów z Wielkiej Brytanii).
value = [0, 4]
oznacza, że z tych czterech aktorów komediowych, 0 otrzyma "NO", a 4 otrzyma "GO".

Prawda - 2 aktorów komediowych tutaj kończą:
gini = 0.0
Oznacza, że wszystkie próbki uzyskują ten sam wynik.
samples = 2
oznacza, że w tej gałęzi jeszcze pozostaje 2 aktorów komediowych (2 aktorów 35,5 lat lub młodszych).
value = [0, 2]
oznacza, że z tych dwóch aktorów komediowych, 0 otrzyma "NO", a 2 otrzyma "GO".
Fałsz - 2 aktorzy teatralni kontynuują:
Doświadczenie (doświadczenie)
Doświadczenie <= 9,5
oznacza, że aktorzy komediowi z doświadczeniem 9,5 lat lub więcej będą podążać za strzałką po lewej stronie, a reszta za strzałką po prawej stronie.
gini = 0,5
oznacza, że 50% próbek będzie poruszać się w jednym kierunku.
samples = 2
oznacza, że w tej gałęzi jeszcze pozostaje 2 aktorów komediowych (2 aktorów powyżej 35,5 lat).
value = [1, 1]
oznacza, że z tych dwóch aktorów komediowych, 1 otrzyma "NO", a 1 otrzyma "GO".

Prawda - 1 aktor komediowy tutaj kończy:
gini = 0.0
Oznacza, że wszystkie próbki uzyskują ten sam wynik.
samples = 1
Oznacza, że w tej gałęzi pozostał 1 aktor komediowy (1 z których 1 ma 9,5 lat lub mniej doświadczenia w komedii).
value = [0, 1]
Oznacza, że 0 oznacza "Nie", 1 oznacza "Tak".
False - 1 aktor komediowy tutaj:
gini = 0.0
Oznacza, że wszystkie próbki uzyskują ten sam wynik.
samples = 1
Oznacza, że w tej gałęzi pozostał 1 aktor komediowy (z którego 1 ma więcej niż 9,5 lat doświadczenia w komedii).
value = [1, 0]
1 oznacza "Nie", 0 oznacza "Tak".
Przewidywane wartości
Możemy użyć drzewa decyzji do przewidywania nowych wartości.
Na przykład: Czy powinienem zobaczyć program z aktorem komediowym w wieku 40 lat, który ma 10 lat doświadczenia i ranking komedii wynosi 7?
Przykład
Użycie predict()
Metoda przewidywania nowych wartości:
print(dtree.predict([[40, 10, 7, 1]]))
Przykład
Co jeśli poziom komedii wynosi 6, jaka jest odpowiedź?
print(dtree.predict([[40, 10, 6, 1]]))
Różne wyniki
Jeśli uruchomisz go wystarczająco wiele razy, nawet jeśli wprowadzisz takie same dane, drzewo decyzji może dostarczyć różnych wyników.
To dlatego, że drzewo decyzji nie może dać nam 100% pewnej odpowiedzi. Odpowiedź opiera się na prawdopodobieństwie wyników, odpowiedzi mogą się różnić.
- Poprzednia strona Trening/Testing
- Następna strona Wprowadzenie do MySQL