DecisionTree ist ein Classifier Algorithmus

Theoretische Funktionsweise


Ein Entscheidungsbaum bzw. Decision Tree hat einen baumähnlichen Aufbau. Dieser wird verwendet, um Entscheidungsstufen und mögliche Antwortpfade darzustellen. Ein Entscheidungsbaum besteht aus einer Wurzel, Ästen, Knoten und Blättern. Die Wurzel stellt dabei den Ausgangspunkt der Entscheidungen, während die Äste die verschiedenen Entscheidungsmöglichkeiten repräsentieren und die Knoten die Zwischenschritte darstellen. Als Blätter bezeichnet man die unterste Ebene eines Entscheidungsbaums.

Programmierung


Import


from sklearn.tree import DecisionTreeClassifier

Erstellen eines DecisionTree Objekts


DecisionTreeClassifier(
	criterion: Literal['gini', 'entropy', 'log_loss'] = "gini",
	splitter: Literal['best', 'random'] = "best",
	max_depth: Int | None = None,
	min_samples_split: float = 2,
	min_samples_leaf: float = 1,
	min_weight_fraction_leaf: Float = 0,
	max_features: float | Literal['auto', 'sqrt', 'log2'] | None = None,
	random_state: Int | RandomState | None = None,
	max_leaf_nodes: Int | None = None,
	min_impurity_decrease: Float = 0,
	class_weight: Mapping[Unknown, Unknown] | str | Sequence[Mapping[Unknown, Unknown]] 
		| None = None,  
	ccp_alpha: float = 0
)

Beispiel:

clf = DecisionTreeClassifier(
	criterion="gini", max_depth=4, min_samples_leaf=2, max_features="log2"
)

Parameter

ParameterBedeutungMögliche Werte
criterionKriterium anhand dem entschieden wird wie die Qualität der Spaltung ist
gini: die Wahrscheinlichkeit das die Klassifikation falsch ist
entropy: misst die Unordnung bzw. Unsicherheit der Übrigen Daten
"gini" / "entropy" / "log_loss"
max_depthdie maximale Tiefe (wie viele Datenknoten max. gebildet werden sollen)number
min_samples_leafwie viele Datenpunke nach einer Teilung noch vorhanden sein müssennumber
min_samples_splitwie viele Datenpunke vor der Teilung vorhanden sein müssennumber
max_featuresdie Anzahl an Features (Merkmalen) die zum aufteilen berücksicht werden sollensqrt / log2

Trainieren des Classifiers


clf.fit(x_train, y_train)

Bewerten der Genauigkeit


accuracy = clf.score(x_test, y_test)
print(f"accuracy: {accuracy*100.0:.4}%")

Einen neuen Punkt klassifizieren


y_pred = clf.predict(x_test)

Visualisierung


from sklearn.tree import plot_tree 
_ = plot_tree(clf)