Klassifikationsbäume
Beispiel Code: Klassifikation
Beispiel Code: Feature Importance
Baumtiefe
Trainiert (berechnet) man den Baum auf den Trainingsdaten, kann er beliebig genau werden und alle Buchstaben richtig klassifizieren. Bedinung: Der Baum muss tief genug sein, dass in jeder Endzelle (Blatt) des Baumes genau eine Beobachtung ist.
Problem: Dieser perfekte Baum funktioniert sehr schlecht für neue Daten (Testdaten). Um das zu lösen werden die Daten in Evaluations-Daten («Pseudo-Test»-Daten) und Trainingsdaten unterteilt und da die optimale Baumtiefen max_depth
bestimmt.
Idee
Erstelle eine Schlaufe, in der du über die Baumtiefe iterierst. In jeder Iteration, das heisst, für jede Baumtiefe, trainierst du einen Baum (fit(X[training,:],y[training]
) und evaluierst diesen Baum auf den Evaluationsdaten (predict(X[evaluation,:])
).
Diese Vorhersagen $\hat y$ (yhat
) vergleichst du dann mit den bekannten $y$-Werten (y[evaluation]
). Daraus kann der Prozentsatz korrekt Klassifzierter berechnet werden:
sum(yhat==y[evaluation])/len(yhat)
1)
Filtern
numpy-Array können mit Boolschen-Arrays indiziert werden:
import numpy as np src_path = "../data/kennzahlen.csv" keydata = np.loadtxt(fname = src_path, delimiter = ',', skiprows=1) #So werden nur die Zeilen verwendet, welche in der 1. Spalte den Wert 49 haben filteredkeydata = keydata[keydata[:,0]==49,:] print(filteredkeydata)
Diese Idee kann mit and
und or
oder >
und <
kombiniert werden: Damit können z.B. nur Kleinbuchstaben (siehe ASCII-Tabelle) oder nur Daten eines Nutzers verwendet werden.
True
ist $1$ und False
ist $0$