Maschinelles Lernen - Entscheidungsbaum
Entscheidungsbaum
In diesem Kapitel zeigen wir Ihnen, wie Sie einen "Entscheidungsbaum" erstellen. Ein Entscheidungsbaum ist ein Flussdiagramm und kann Ihnen helfen, Entscheidungen auf der Grundlage früherer Erfahrungen zu treffen.
In dem Beispiel versucht eine Person zu entscheiden, ob sie zu einer Comedy-Show gehen soll oder nicht.
Glücklicherweise hat sich unsere Beispielperson jedes Mal registriert, wenn es eine Comedy-Show in der Stadt gab, und einige Informationen über den Comedian registriert, und auch registriert, ob er / sie gegangen ist oder nicht.
Das Alter | Erfahrung | Rang | Staatsangehörigkeit | gehen |
36 | 10 | 9 | Vereinigtes Königreich | NEIN |
42 | 12 | 4 | Vereinigte Staaten von Amerika | NEIN |
23 | 4 | 6 | n | NEIN |
52 | 4 | 4 | Vereinigte Staaten von Amerika | NEIN |
43 | 21 | 8 | Vereinigte Staaten von Amerika | JA |
44 | 14 | 5 | Vereinigtes Königreich | NEIN |
66 | 3 | 7 | n | JA |
35 | 14 | 9 | Vereinigtes Königreich | JA |
52 | 13 | 7 | n | JA |
35 | 5 | 9 | n | JA |
24 | 3 | 5 | Vereinigte Staaten von Amerika | NEIN |
18 | 3 | 7 | Vereinigtes Königreich | JA |
45 | 9 | 9 | Vereinigtes Königreich | JA |
Basierend auf diesem Datensatz kann Python nun einen Entscheidungsbaum erstellen, der verwendet werden kann, um zu entscheiden, ob es sich lohnt, an neuen Shows teilzunehmen.
Wie funktioniert es?
Importieren Sie zunächst die benötigten Module und lesen Sie den Datensatz mit Pandas:
Beispiel
Datensatz lesen und ausdrucken:
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)
Um einen Entscheidungsbaum zu erstellen, müssen alle Daten numerisch sein.
Wir müssen die nicht numerischen Spalten „Nationalität“ und „Go“ in numerische Werte umwandeln.
Pandas hat eine map()
Methode, die ein Wörterbuch mit Informationen zum Konvertieren der Werte verwendet.
{'UK': 0, 'USA': 1, 'N': 2}
Mittelwerte wandeln die Werte „UK“ in 0, „USA“ in 1 und „N“ in 2 um.
Beispiel
Stringwerte in Zahlenwerte umwandeln:
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)
Dann müssen wir die Featurespalten von der Zielspalte trennen .
Die Feature-Spalten sind die Spalten, die wir versuchen vorherzusagen , und die Zielspalte ist die Spalte mit den Werten, die wir vorherzusagen versuchen.
Beispiel
X
ist die Feature-Spalte,
y
ist die Zielspalte:
features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)
Jetzt können wir den eigentlichen Entscheidungsbaum erstellen, ihn mit unseren Details ausstatten und eine .png-Datei auf dem Computer speichern:
Beispiel
Erstellen Sie einen Entscheidungsbaum, speichern Sie ihn als Bild und zeigen Sie das Bild:
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()
Ergebnis erklärt
Der Entscheidungsbaum verwendet Ihre früheren Entscheidungen, um die Wahrscheinlichkeit zu berechnen, ob Sie einen Komiker sehen möchten oder nicht.
Lassen Sie uns die verschiedenen Aspekte des Entscheidungsbaums lesen:
Rang
Rank <= 6.5
bedeutet, dass jeder Komiker mit einem Rang von 6,5 oder niedriger dem
True
Pfeil (nach links) folgt und der Rest dem False
Pfeil (nach rechts) folgt.
gini = 0.497
bezieht sich auf die Qualität der Aufteilung und ist immer eine Zahl zwischen 0,0 und 0,5, wobei 0,0 bedeuten würde, dass alle Proben das gleiche Ergebnis erhalten würden, und 0,5 bedeuten würde, dass die Aufteilung genau in der Mitte erfolgt.
samples = 13
bedeutet, dass zu diesem Zeitpunkt der Entscheidung noch 13 Komiker übrig sind, was alle sind, da dies der erste Schritt ist.
value = [6, 7]
bedeutet, dass von diesen 13 Comedians 6 ein "NEIN" und 7 ein "GO" bekommen.
Gini
Es gibt viele Möglichkeiten, die Samples aufzuteilen, wir verwenden in diesem Tutorial die GINI-Methode.
Die Gini-Methode verwendet diese Formel:
Gini = 1 - (x/n)2 - (y/n)2
Wo x
ist die Anzahl der positiven Antworten ("GO"),
n
ist die Anzahl der Stichproben und
y
ist die Anzahl der negativen Antworten ("NO"), was uns diese Berechnung gibt:
1 - (7 / 13)2 - (6 / 13)2 = 0.497
Der nächste Schritt enthält zwei Kästchen, ein Kästchen für die Comedians mit einem „Rang“ von 6,5 oder niedriger und ein Kästchen mit den anderen.
Wahr - 5 Comedians enden hier:
gini = 0.0
bedeutet, dass alle Proben das gleiche Ergebnis erzielten.
samples = 5
bedeutet, dass es in diesem Zweig noch 5 Komiker gibt (5 Komiker mit einem Rang von 6,5 oder niedriger).
value = [5, 0]
bedeutet, dass 5 ein "NEIN" und 0 ein "GO" erhält.
Falsch – 8 Comedians fahren fort:
Staatsangehörigkeit
Nationality <= 0.5
bedeutet, dass die Comedians mit einem Nationalitätswert von weniger als 0,5 dem Pfeil nach links folgen (also alle aus dem Vereinigten Königreich, ), und der Rest dem Pfeil nach rechts folgt.
gini = 0.219
bedeutet, dass etwa 22 % der Proben in eine Richtung gehen würden.
samples = 8
bedeutet, dass es noch 8 Comedians in diesem Zweig gibt (8 Comedians mit einem Rang höher als 6,5).
value = [1, 7]
bedeutet, dass von diesen 8 Komikern 1 ein "NEIN" und 7 ein "GO" bekommen.
Stimmt - 4 Comedians fahren fort:
Das Alter
Age <= 35.5
bedeutet, dass Comedians im Alter von 35,5 oder jünger dem Pfeil nach links folgen und der Rest dem Pfeil nach rechts folgt.
gini = 0.375
bedeutet, dass etwa 37,5 % der Proben in eine Richtung gehen würden.
samples = 4
bedeutet, dass es in dieser Branche noch 4 Comedians gibt (4 Comedians aus Großbritannien).
value = [1, 3]
bedeutet, dass von diesen 4 Comedians 1 ein "NEIN" und 3 ein "GO" bekommen.
Falsch - 4 Comedians enden hier:
gini = 0.0
bedeutet, dass alle Proben das gleiche Ergebnis erzielten.
samples = 4
bedeutet, dass es in dieser Branche noch 4 Comedians gibt (4 Comedians, die nicht aus Großbritannien stammen).
value = [0, 4]
bedeutet, dass von diesen 4 Comedians 0 ein "NEIN" und 4 ein "GO" bekommen.
Wahr - 2 Comedians enden hier:
gini = 0.0
bedeutet, dass alle Proben das gleiche Ergebnis erzielten.
samples = 2
bedeutet, dass es in dieser Branche noch 2 Comedians gibt (2 Comedians im Alter von 35,5 Jahren oder jünger).
value = [0, 2]
bedeutet, dass von diesen 2 Comedians 0 ein "NEIN" und 2 ein "GO" bekommen.
Falsch – 2 Comedians fahren fort:
Erfahrung
Experience <= 9.5
bedeutet, dass Comedians mit 9,5 Jahren oder weniger Erfahrung dem Pfeil nach links folgen und der Rest dem Pfeil nach rechts folgt.
gini = 0.5
bedeutet, dass 50 % der Proben in eine Richtung gehen würden.
samples = 2
bedeutet, dass es in dieser Branche noch 2 Comedians gibt (2 Comedians älter als 35,5).
value = [1, 1]
bedeutet, dass von diesen 2 Comedians 1 ein "NEIN" und 1 ein "GO" bekommt.
True - 1 Comedian endet hier:
gini = 0.0
bedeutet, dass alle Proben das gleiche Ergebnis erzielten.
samples = 1
bedeutet, dass in dieser Branche noch 1 Komiker übrig ist (1 Komiker mit 9,5 Jahren oder weniger Erfahrung).
value = [0, 1]
bedeutet, dass 0 ein "NEIN" und 1 ein "GO" erhält.
Falsch - 1 Comedian endet hier:
gini = 0.0
bedeutet, dass alle Proben das gleiche Ergebnis erzielten.
samples = 1
bedeutet, dass es in dieser Branche noch 1 Komiker gibt (1 Komiker mit mehr als 9,5 Jahren Erfahrung).
value = [1, 0]
bedeutet, dass 1 ein "NEIN" und 0 ein "GO" erhält.
Werte vorhersagen
Wir können den Entscheidungsbaum verwenden, um neue Werte vorherzusagen.
Beispiel: Soll ich mir eine Show mit einem 40-jährigen amerikanischen Komiker mit 10 Jahren Erfahrung und einem Comedy-Ranking von 7 ansehen?
Beispiel
Verwenden Sie die Methode "predict()", um neue Werte vorherzusagen:
print(dtree.predict([[40, 10, 7, 1]]))
Beispiel
Was wäre die Antwort, wenn der Comedy-Rang 6 wäre?
print(dtree.predict([[40, 10, 6, 1]]))
Unterschiedliche Ergebnisse
Sie werden sehen, dass der Entscheidungsbaum unterschiedliche Ergebnisse liefert, wenn Sie ihn oft genug ausführen, selbst wenn Sie ihn mit denselben Daten füttern.
Denn der Entscheidungsbaum gibt uns keine 100% sichere Antwort. Es basiert auf der Wahrscheinlichkeit eines Ergebnisses, und die Antwort wird variieren.