kurse:ef05a-2021:classificationtrees

Klassifikationsbäume

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)

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.


1)
In Python können Bool'sche Werte summiert werden: True ist $1$ und False ist $0$
  • kurse/ef05a-2021/classificationtrees.txt
  • Last modified: 2022/03/16 09:05
  • by Simon Knaus