====== Klassifikationsbäume ====== ==== Beispiel Code: Klassifikation ==== [[https://github.com/ivo-bloechliger/kaien/blob/main/decisiontree/classification.py|Beispiel auf Github]] ==== Beispiel Code: Feature Importance ==== [[https://github.com/ivo-bloechliger/kaien/blob/main/decisiontree/importance.py|Beispiel auf Github]] ==== 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 (<>-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)'' ((In Python können Bool'sche Werte summiert werden: ''True'' ist $1$ und ''False'' ist $0$)) ==== 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 [[https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle|ASCII-Tabelle]]) oder nur Daten eines Nutzers verwendet werden.