Maschinelles Lernen - Entscheidungsbaum


Entscheidungsbaum (Decision Tree)

In diesem Kapitel werden wir Ihnen zeigen, wie man ein "Entscheidungsbaum" erstellt. Ein Entscheidungsbaum ist ein Flussdiagramm, das Ihnen hilft, Entscheidungen auf Basis Ihrer früheren Erfahrungen zu treffen.

In diesem Beispiel wird eine Person versuchen zu entscheiden, ob er/sie an einem Komödienprogramm teilnehmen sollte.

Glücklicherweise wird unsere Beispielperson jedes Mal registriert, wenn ein Komödienprogramm im Dorf stattfindet, und einige Informationen über die Komödienakteure eingetragen, sowie ob er/sie daran teilgenommen hat.

Alter Erfahrung 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

Jetzt kann Python basierend auf diesem Datenmenge einen Entscheidungsbaum erstellen, der verwendet werden kann, um zu entscheiden, ob es sich lohnt, an jeder neuen Aufführung teilzunehmen.

Arbeitsweise

Zunächst müssen die erforderlichen Module importiert und die Datenmenge mit pandas gelesen werden:

Beispiel

Datenmenge lesen und ausgeben:

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)

Führen Sie ein Beispiel aus

Um einen Entscheidungsbaum zu erstellen, müssen alle Daten numerisch sein.

Wir müssen die nicht-numerischen Spalten 'Nationality' und 'Go' in numerische Werte umwandeln.

Pandas hat eine map() Methode, die ein Dictionary akzeptiert, das Informationen darüber enthält, wie die Werte umgewandelt werden sollen.

{'UK': 0, 'USA': 1, 'N': 2}

Das bedeutet, dass der Wert 'UK' in 0, den Wert 'USA' in 1 und den Wert 'N' in 2 umgewandelt wird.

Beispiel

Stringwerte in numerische Werte 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)

Führen Sie ein Beispiel aus

Dann müssen wir die Merkmalsspalte von der Zielspalte trennen.

Die Merkmalsspalte ist die Spalte, aus der wir versuchen, Vorhersagen zu treffen, und die Zielspalte ist die Spalte mit den Werten, die wir versuchen, vorherzusagen.

Beispiel

X ist die Merkmalsspalte, y ist die Zielspalte:

features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)

Führen Sie ein Beispiel aus

Nun können wir eine tatsächliche Entscheidungsbaum erstellen, die unseren Details entspricht, und dann eine .png-Datei auf dem Computer speichern:

Beispiel

Erstellen Sie einen Entscheidungsbaum, speichern Sie ihn als Bild und zeigen Sie das Bild an:

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()

Führen Sie ein Beispiel aus

Ergebnisdeutung

Der Entscheidungsbaum verwendet Ihre vorherigen Entscheidungen, um die Wahrscheinlichkeit zu berechnen, dass Sie eine Komödie besuchen möchten.

Lassen Sie uns verschiedene Aspekte des Entscheidungsbaums lesen:


Rank

Rank <= 6.5 Das bedeutet, dass Komödianten mit einem Rang von weniger als 6.5 diesem Muster folgen werden. True Pfeil (nach links), der Rest folgt. False Pfeil (nach rechts).

gini = 0.497 Das bedeutet die Qualität der Aufteilung und ist immer eine Zahl zwischen 0.0 und 0.5, wobei 0.0 bedeutet, dass alle Proben das gleiche Ergebnis erzielen, und 0.5 bedeutet, dass die Aufteilung vollständig in der Mitte erfolgt.

samples = 13 Das bedeutet, dass zu diesem Zeitpunkt noch 13 Komödianten in der Entscheidung bleiben, da dies der erste Schritt ist und daher alle Komödianten sind.

value = [6, 7] Das bedeutet, dass von den 13 Komödianten 6 ein "NO" erhalten und 7 ein "GO" erhalten.

Gini

Es gibt viele Methoden zur Aufteilung von Proben, und wir verwenden in diesem教程 die GINI-Methode.

Die Gini-Methode verwendet den folgenden Ausdruck:

Gini = 1 - (x/n)2 - (y/n)2

Hierbei ist x die Anzahl der positiven Antworten ("GO"), n die Anzahl der Proben und y die Anzahl der negativen Antworten ("NO"). Der folgende Ausdruck wird verwendet, um zu berechnen:

1 - (7 / 13)2 - (6 / 13)2 = 0.497


Der nächste Schritt enthält zwei Kästchen, eines für Komödianten mit 'Rank' 6.5 oder niedriger, und das andere für die restlichen.

True - Hier enden 5 Komödianten:

gini = 0.0 Das bedeutet, dass alle Proben das gleiche Ergebnis erzielen.

samples = 5 Die folgende Branche enthält noch 5 Komödianten (deren Rang 6.5 oder niedriger ist).

value = [5, 0] Das bedeutet, dass 5 "NEIN" erhält und 0 "WEG" erhält.

False - 8 Theaterdarsteller gehen weiter:

Nationality (Nationalität)

Nationality <= 0,5 Das bedeutet, dass Komödianten mit einem Nationalitätswert kleiner als 0,5 der linken Pfeil folgen (das bedeutet alle aus Großbritannien), und die其余en der rechten Pfeil folgen werden.

gini = 0,219 Das bedeutet, dass etwa 22% der Proben in eine Richtung bewegen werden.

samples = 8 Das bedeutet, dass in dieser Zweigstelle noch 8 Komödianten bleiben (8 Komödianten mit einem Rating höher als 6,5).

value = [1, 7] Das bedeutet, dass von diesen 8 Komödianten 1 "NEIN" erhält und 7 "WEG" erhält.


True - 4 Theaterdarsteller gehen weiter:

Age (Alter)

Age <= 35,5 Das bedeutet, dass Komödianten unter 35,5 Jahren der linken Pfeil folgen und die其余en der rechten Pfeil folgen werden.

gini = 0,375 Das bedeutet, dass etwa 37,5% der Proben in eine Richtung bewegen werden.

samples = 4 Das bedeutet, dass in dieser Zweigstelle noch 4 Komödianten bleiben (4 britische Komödianten).

value = [1, 3] Das bedeutet, dass von diesen 4 Komödianten 1 "NEIN" erhält und 3 "WEG" erhält.

False - 4 Komödianten enden hier:

gini = 0.0 Das bedeutet, dass alle Proben dasselbe Ergebnis erzielen.

samples = 4 Das bedeutet, dass in dieser Zweigstelle noch 4 Komödianten bleiben (4 britische Komödianten).

value = [0, 4] Das bedeutet, dass von diesen 4 Komödianten 0 "NEIN" erhält und 4 "WEG" erhält.


True - 2 Komödianten enden hier:

gini = 0.0 Das bedeutet, dass alle Proben dasselbe Ergebnis erzielen.

samples = 2 Das bedeutet, dass in dieser Zweigstelle noch 2 Komödianten bleiben (2 Komödianten unter 35,5 Jahren).

value = [0, 2] Das bedeutet, dass von diesen 2 Komödianten 0 "NEIN" erhält und 2 "WEG" erhält.

False - 2 Theaterdarsteller gehen weiter:

Experience (Erfahrung)

Experience <= 9,5 Das bedeutet, dass Komödianten mit 9,5 Jahren Erfahrung oder mehr der linken Pfeil folgen und die其余en der rechten Pfeil folgen werden.

gini = 0,5 Das bedeutet, dass 50% der Proben in eine Richtung bewegen werden.

samples = 2 Das bedeutet, dass in dieser Zweigstelle noch 2 Komödianten bleiben (2 Komödianten über 35,5 Jahren).

value = [1, 1] Das bedeutet, dass einer der beiden Komödianten "NEIN" erhält und einer "WEG" erhält.


True - 1 Komödiant endet hier:

gini = 0.0 Das bedeutet, dass alle Proben dasselbe Ergebnis erzielen.

samples = 1 Das bedeutet, dass in dieser Untergruppe noch ein Komödienactor übrig ist (einer hat 9,5 Jahre oder weniger Erfahrung).

value = [0, 1] 0 bedeutet "NEIN", 1 bedeutet "JA".

False - 1 Komödienactor bis hierher:

gini = 0.0 Das bedeutet, dass alle Proben dasselbe Ergebnis erzielen.

samples = 1 Das bedeutet, dass in dieser Untergruppe noch ein Komödienactor übrig ist (von denen einer über 9,5 Jahre Erfahrung hat).

value = [1, 0] 1 bedeutet "NEIN", 0 bedeutet "JA".

Vorhersagewerte

Wir können den Entscheidungsbaum verwenden, um neue Werte vorherzusagen.

Zum Beispiel: Sollte ich eine Show sehen, die von einem 40-jährigen amerikanischen Komödienactor mit 10 Jahren Erfahrung und einer Komödienbewertung von 7 gespielt wird?

Beispiel

Verwenden predict() Methoden zur Vorhersage neuer Werte:

print(dtree.predict([[40, 10, 7, 1]]))

Führen Sie ein Beispiel aus

Beispiel

Was ist die Antwort, wenn die Komödienstufe 6 ist?

print(dtree.predict([[40, 10, 6, 1]]))

Führen Sie ein Beispiel aus

Unterschiedliche Ergebnisse

Wenn er ausreichend oft ausgeführt wird, liefert der Entscheidungsbaum auch unterschiedliche Ergebnisse, selbst wenn die gleichen Daten eingegeben werden.

Das liegt daran, dass der Entscheidungsbaum uns keine 100%ige Bestätigung geben kann. Es basiert auf der Wahrscheinlichkeit der Ergebnisse, daher können die Antworten unterschiedlich sein.