Scikit Learn - Entscheidungsbäume

In diesem Kapitel lernen wir die Lernmethode in Sklearn kennen, die als Entscheidungsbäume bezeichnet wird.

Decisions Tress (DTs) sind die leistungsstärkste nicht parametrische überwachte Lernmethode. Sie können für die Klassifizierungs- und Regressionsaufgaben verwendet werden. Das Hauptziel von DTs besteht darin, ein Modell zu erstellen, das den Wert der Zielvariablen vorhersagt, indem einfache Entscheidungsregeln gelernt werden, die aus den Datenmerkmalen abgeleitet werden. Entscheidungsbäume haben zwei Hauptentitäten; Einer ist der Wurzelknoten, an dem sich die Daten teilen, und der andere sind Entscheidungsknoten oder Blätter, an denen wir die endgültige Ausgabe erhalten haben.

Entscheidungsbaum-Algorithmen

Verschiedene Entscheidungsbaum-Algorithmen werden unten erläutert -

ID3

Es wurde 1986 von Ross Quinlan entwickelt. Es wird auch als Iterativer Dichotomiser 3 bezeichnet. Das Hauptziel dieses Algorithmus besteht darin, für jeden Knoten die kategorialen Merkmale zu finden, die den größten Informationsgewinn für kategoriale Ziele erzielen.

Dadurch kann der Baum auf seine maximale Größe vergrößert werden, und um die Fähigkeit des Baums für unsichtbare Daten zu verbessern, wird ein Bereinigungsschritt ausgeführt. Die Ausgabe dieses Algorithmus wäre ein Mehrwegbaum.

C4.5

Es ist der Nachfolger von ID3 und definiert dynamisch ein diskretes Attribut, das den kontinuierlichen Attributwert in einen diskreten Satz von Intervallen aufteilt. Aus diesem Grund wurde die Einschränkung kategorialer Merkmale aufgehoben. Es konvertiert den ID3-trainierten Baum in Sätze von 'IF-THEN'-Regeln.

Um die Reihenfolge zu bestimmen, in der diese Regeln angewendet werden sollen, wird zuerst die Genauigkeit jeder Regel bewertet.

C5.0

Es funktioniert ähnlich wie C4.5, benötigt jedoch weniger Speicher und erstellt kleinere Regelsätze. Es ist genauer als C4.5.

WAGEN

Es wird als Klassifizierungs- und Regressionsbaum-Algorithmus bezeichnet. Grundsätzlich werden binäre Teilungen unter Verwendung der Merkmale und des Schwellenwerts generiert, die den größten Informationsgewinn an jedem Knoten ergeben (der als Gini-Index bezeichnet wird).

Die Homogenität hängt vom Gini-Index ab. Je höher der Wert des Gini-Index, desto höher wäre die Homogenität. Es ist wie der C4.5-Algorithmus, aber der Unterschied besteht darin, dass er keine Regelsätze berechnet und auch keine numerischen Zielvariablen (Regression) unterstützt.

Klassifizierung mit Entscheidungsbäumen

In diesem Fall sind die Entscheidungsvariablen kategorisch.

Sklearn Module - Die Scikit-Lernbibliothek enthält den Modulnamen DecisionTreeClassifier zum Durchführen einer Klassifizierung mehrerer Klassen für einen Datensatz.

Parameter

Die folgende Tabelle enthält die von sklearn.tree.DecisionTreeClassifier Modul -

Sr.Nr. Parameter & Beschreibung
1

criterion - string, optional default = "gini"

Es stellt die Funktion dar, um die Qualität eines Split zu messen. Unterstützte Kriterien sind "Gini" und "Entropie". Die Standardeinstellung ist Gini für Gini-Verunreinigungen, während Entropie für den Informationsgewinn gilt.

2

splitter - string, optional default = "best"

Es teilt dem Modell mit, welche Strategie von "am besten" oder "zufällig" gewählt wird, um die Aufteilung an jedem Knoten zu wählen.

3

max_depth - int oder None, optionaler Standardwert = None

Dieser Parameter bestimmt die maximale Tiefe des Baums. Der Standardwert ist None. Dies bedeutet, dass die Knoten erweitert werden, bis alle Blätter rein sind oder bis alle Blätter weniger als min_smaples_split-Samples enthalten.

4

min_samples_split - int, float, optionaler Standard = 2

Dieser Parameter gibt die Mindestanzahl von Abtastwerten an, die zum Teilen eines internen Knotens erforderlich sind.

5

min_samples_leaf - int, float, optionaler Standard = 1

Dieser Parameter gibt die Mindestanzahl von Stichproben an, die erforderlich sind, um sich an einem Blattknoten zu befinden.

6

min_weight_fraction_leaf - float, optionaler Standard = 0.

Mit diesem Parameter erhält das Modell den minimalen gewichteten Bruchteil der Summe der Gewichte, die erforderlich sind, um sich an einem Blattknoten zu befinden.

7

max_features - int, float, string oder None, optionaler Standardwert = None

Es gibt dem Modell die Anzahl der Features, die bei der Suche nach der besten Aufteilung berücksichtigt werden müssen.

8

random_state - int, RandomState-Instanz oder None, optional, default = none

Dieser Parameter stellt den Startwert der erzeugten Pseudozufallszahl dar, die beim Mischen der Daten verwendet wird. Folgende sind die Optionen -

  • int- In diesem Fall ist random_state der Startwert, der vom Zufallszahlengenerator verwendet wird.

  • RandomState instance - In diesem Fall ist random_state der Zufallszahlengenerator.

  • None - In diesem Fall ist der Zufallszahlengenerator die von np.random verwendete RandonState-Instanz.

9

max_leaf_nodes - int oder None, optionaler Standardwert = None

Mit diesem Parameter kann ein Baum mit max_leaf_nodes auf die beste Art und Weise wachsen. Der Standardwert ist none, was bedeutet, dass eine unbegrenzte Anzahl von Blattknoten vorhanden ist.

10

min_impurity_decrease - float, optionaler Standard = 0.

Dieser Wert dient als Kriterium für die Aufteilung eines Knotens, da das Modell einen Knoten aufteilt, wenn diese Aufteilung eine Abnahme der Verunreinigung größer oder gleich bewirkt min_impurity_decrease value.

11

min_impurity_split - float, Standard = 1e-7

Es stellt die Schwelle für ein frühes Stoppen des Baumwachstums dar.

12

class_weight - Diktat, Liste der Diktate, "ausgeglichen" oder "Keine", Standard = Keine

Es repräsentiert die mit Klassen verbundenen Gewichte. Das Formular lautet {class_label: weight}. Wenn wir die Standardoption verwenden, bedeutet dies, dass alle Klassen das Gewicht eins haben sollen. Auf der anderen Seite, wenn Sie möchtenclass_weight: balancedverwendet die Werte von y, um die Gewichte automatisch anzupassen.

13

presort - bool, optionaler Standardwert = False

Es teilt dem Modell mit, ob die Daten vorsortiert werden sollen, um das Finden der besten Teilungen bei der Anpassung zu beschleunigen. Der Standardwert ist false, aber wenn er auf true gesetzt ist, kann dies den Trainingsprozess verlangsamen.

Attribute

Die folgende Tabelle enthält die von verwendeten Attribute sklearn.tree.DecisionTreeClassifier Modul -

Sr.Nr. Parameter & Beschreibung
1

feature_importances_ - Array of Shape = [n_Features]

Dieses Attribut gibt die Feature-Wichtigkeit zurück.

2

classes_: - Array of Shape = [n_classes] oder eine Liste solcher Arrays

Es stellt die Klassenbeschriftungen dar, dh das Problem mit der einzelnen Ausgabe, oder eine Liste von Arrays mit Klassenbeschriftungen, dh das Problem mit mehreren Ausgaben.

3

max_features_ - int

Es repräsentiert den abgeleiteten Wert des Parameters max_features.

4

n_classes_ - int oder Liste

Es repräsentiert die Anzahl der Klassen, dh das Problem mit einer einzelnen Ausgabe, oder eine Liste der Anzahl von Klassen für jede Ausgabe, dh das Problem mit mehreren Ausgaben.

5

n_features_ - int

Es gibt die Anzahl von features wenn die Methode fit () ausgeführt wird.

6

n_outputs_ - int

Es gibt die Anzahl von outputs wenn die Methode fit () ausgeführt wird.

Methoden

Die folgende Tabelle enthält die von verwendeten Methoden sklearn.tree.DecisionTreeClassifier Modul -

Sr.Nr. Parameter & Beschreibung
1

apply(self, X [, check_input])

Diese Methode gibt den Index des Blattes zurück.

2

decision_path(self, X [, check_input])

Wie der Name schon sagt, gibt diese Methode den Entscheidungspfad im Baum zurück

3

fit(self, X, y [, sample_weight,…])

Die Methode fit () erstellt einen Entscheidungsbaumklassifizierer aus dem angegebenen Trainingssatz (X, y).

4

get_depth(selbst)

Wie der Name schon sagt, gibt diese Methode die Tiefe des Entscheidungsbaums zurück

5

get_n_leaves(selbst)

Wie der Name schon sagt, gibt diese Methode die Anzahl der Blätter des Entscheidungsbaums zurück.

6

get_params(Selbst [, tief])

Wir können diese Methode verwenden, um die Parameter für den Schätzer zu erhalten.

7

predict(self, X [, check_input])

Der Klassenwert für X wird vorhergesagt.

8

predict_log_proba(Selbst, X)

Es werden Klassenprotokollwahrscheinlichkeiten der von uns, X, bereitgestellten Eingabestichproben vorhergesagt.

9

predict_proba(self, X [, check_input])

Es werden Klassenwahrscheinlichkeiten der von uns bereitgestellten Eingabestichproben X vorhergesagt.

10

score(self, X, y [, sample_weight])

Wie der Name schon sagt, gibt die score () -Methode die mittlere Genauigkeit der angegebenen Testdaten und Labels zurück.

11

set_params(self, \ * \ * params)

Mit dieser Methode können wir die Parameter des Schätzers einstellen.

Implementierungsbeispiel

Das folgende Python-Skript wird verwendet sklearn.tree.DecisionTreeClassifier Modul zur Erstellung eines Klassifikators zur Vorhersage von Männern oder Frauen aus unserem Datensatz mit 25 Stichproben und zwei Merkmalen, nämlich "Größe" und "Länge der Haare" -

from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)

Ausgabe

['Woman']

Wir können die Wahrscheinlichkeit jeder Klasse auch vorhersagen, indem wir die folgende python Predict_proba () -Methode wie folgt verwenden:

Beispiel

prediction = DTclf.predict_proba([[135,29]])
print(prediction)

Ausgabe

[[0. 1.]]

Regression mit Entscheidungsbäumen

In diesem Fall sind die Entscheidungsvariablen stetig.

Sklearn Module - Die Scikit-Lernbibliothek enthält den Modulnamen DecisionTreeRegressor zum Anwenden von Entscheidungsbäumen auf Regressionsprobleme.

Parameter

Von DecisionTreeRegressor sind fast die gleichen wie die in verwendet wurden DecisionTreeClassifierModul. Der Unterschied liegt im Parameter 'Kriterium'. ZumDecisionTreeRegressor Module ‘criterion: string, optional default = "mse" 'Parameter haben die folgenden Werte -

  • mse- Es steht für den mittleren quadratischen Fehler. Dies entspricht der Varianzreduzierung als Merkmalauswahlkriterium. Es minimiert den L2-Verlust unter Verwendung des Mittelwerts jedes Endknotens.

  • freidman_mse - Es wird auch der mittlere quadratische Fehler verwendet, jedoch mit Friedmans Verbesserungswert.

  • mae- Es steht für den mittleren absoluten Fehler. Es minimiert den L1-Verlust unter Verwendung des Medians jedes Endknotens.

Ein weiterer Unterschied ist, dass es nicht hat ‘class_weight’ Parameter.

Attribute

Attribute von DecisionTreeRegressor sind auch die gleichen wie die von DecisionTreeClassifierModul. Der Unterschied ist, dass es nicht hat‘classes_’ und ‘n_classes_'Attribute.

Methoden

Methoden von DecisionTreeRegressor sind auch die gleichen wie die von DecisionTreeClassifierModul. Der Unterschied ist, dass es nicht hat‘predict_log_proba()’ und ‘predict_proba()’'Attribute.

Implementierungsbeispiel

Die Methode fit () im Regressionsmodell des Entscheidungsbaums verwendet Gleitkommawerte von y. Sehen wir uns ein einfaches Implementierungsbeispiel mit anSklearn.tree.DecisionTreeRegressor - -

from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)

Nach der Anpassung können wir dieses Regressionsmodell verwenden, um Vorhersagen wie folgt zu treffen:

DTreg.predict([[4, 5]])

Ausgabe

array([1.5])