Python -Tutorial

Python-HOME Python-Einführung Python-Erste Schritte Python-Syntax Python-Kommentare Python-Variablen Python-Datentypen Python-Zahlen Python-Casting Python-Strings Python-Booleans Python-Operatoren Python-Listen Python-Tupel Python-Sets Python-Wörterbücher Python Wenn ... Sonst Python-While-Schleifen Python-For-Schleifen Python-Funktionen Python-Lambda Python-Arrays Python-Klassen/Objekte Python-Vererbung Python-Iteratoren Python-Bereich Python-Module Python-Daten Python-Mathematik Python-JSON Python-RegEx Python-PIP Python Versuchen ... Außer Python-Benutzereingabe Formatierung von Python-Strings

Umgang mit Dateien

Umgang mit Python-Dateien Python-Dateien lesen Python-Dateien schreiben/erstellen Python-Dateien löschen

Python-Module

NumPy-Tutorial Panda-Komplettlösung Scipy-Tutorial

Python-Matplotlib

Matplotlib-Einführung Matplotlib loslegen Matplotlib-Pyplot Matplotlib-Plotten Matplotlib-Marker Matplotlib-Linie Matplotlib-Labels Matplotlib-Raster Matplotlib-Subplots Matplotlib-Scatter Matplotlib-Bars Matplotlib-Histogramme Matplotlib-Kreisdiagramme

Maschinelles Lernen

Einstieg Mittlerer Medianmodus Standardabweichung Perzentil Datenverteilung Normale Datenverteilung Streudiagramm Lineare Regression Polynomiale Regression Mehrfache Regression Skala Trainieren/Testen Entscheidungsbaum

Python-MySQL

MySQL-erste Schritte MySQL-Datenbank erstellen MySQL-Tabelle erstellen MySQL-Einfügung MySQL-Auswahl MySQL-Wo MySQL-Reihenfolge nach MySQL löschen MySQL-Drop-Tabelle MySQL-Update MySQL-Limit MySQL-Beitritt

Python-MongoDB

Beginnen Sie mit MongoDB MongoDB Datenbank erstellen MongoDB-Create-Sammlung MongoDB-Einfügung MongoDB-Suche MongoDB-Abfrage MongoDB-Sortierung MongoDB löschen MongoDB-Drop-Sammlung MongoDB-Update MongoDB-Limit

Python-Referenz

Python-Übersicht Eingebaute Python-Funktionen Python-String-Methoden Python-Listenmethoden Methoden des Python-Wörterbuchs Python-Tupelmethoden Python-Set-Methoden Python-Dateimethoden Python-Schlüsselwörter Python-Ausnahmen Python-Glossar

Modulreferenz

Zufallsmodul Anforderungsmodul Statistikmodul Mathe-Modul cMath-Modul

Python-Anleitung

Listenduplikate entfernen Einen String umkehren Fügen Sie zwei Zahlen hinzu

Python-Beispiele

Python-Beispiele Python-Compiler Python-Übungen Python-Quiz Python-Zertifikat

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

Xist die Feature-Spalte, yist 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.5bedeutet, dass jeder Komiker mit einem Rang von 6,5 oder niedriger dem TruePfeil (nach links) folgt und der Rest dem FalsePfeil (nach rechts) folgt.

gini = 0.497bezieht 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 = 13bedeutet, 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 xist die Anzahl der positiven Antworten ("GO"), nist die Anzahl der Stichproben und yist 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.5bedeutet, 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.375bedeutet, dass etwa 37,5 % der Proben in eine Richtung gehen würden.

samples = 4bedeutet, 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 = 4bedeutet, 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 = 2bedeutet, 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.5bedeutet, dass Comedians mit 9,5 Jahren oder weniger Erfahrung dem Pfeil nach links folgen und der Rest dem Pfeil nach rechts folgt.

gini = 0.5bedeutet, dass 50 % der Proben in eine Richtung gehen würden.

samples = 2bedeutet, 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 = 1bedeutet, 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.