Klassifikations- und Regressionsbäume mit Datenanalyse (Teil 1) (Stefan Bosse) [6.2024] |
Die Übungen werden mit ein R Dialekt R+ durchgeführt. R+ ist in diese Übung integriert und benötigt keine weitere Software. Ebenso sind die benötigten Daten integriert.
▸
[] |
✗
≡
|
https://www.kaggle.com/datasets/purushottamnawale/materials
Materials and their Mechanical Properties - Mechanical Properties of Design Materials: A Comprehensive Material Dataset
The original material dataset includes the following mechanical properties of metals:
Es gibt eine zusäztliche Spalte MaterialClass die die Einträge in folgende Materialkassen unterteilt:
Aluminum, Brass, Copper, Magnesium, Iron, Steel
DATA: Variable dataMat Type: { Std : string [924], ID : string [924], Material : string [924], Heat treatment : string [924], Su : number [924], Sy : number [924], A5 : (number|string)[924], Bhn : (number|string)[924], E : number [924], G : number [924], mu : number [924], Ro : number [924], pH : (string|number)[924], Desc : string [924], HV : (string|number)[924], MaterialClass : string [924] }
Der Datensatz ist bereits im Notebook enthalten und wird als Datenrahmen/Datentabelle (data.frame) data.mat
zur Verfügung gestellt!
Alle nachfolgenden Berechnungen sollen über den Punkt "." an den Namen des Datensatzes angehängt werden.
▸
[] |
✗
≡
|
data.mat
: MaterialClass
Zunächst soll die Datentabelle analysiert werden. Für die statistische Analyse der Daten stehen verschiedene Funktionen zur Verfügung. so z.B.:
fivenum
liefert quantitative erste Informationen über die Werteverteilungenhist(data,xlim,breaks)
liefert qualitative (visuelle) Informationen über die Werteverteilungen (breaks unterteilt die kontinuierliche Datenvariable in Intervalle)
▸
[] |
✗
≡
|
Frage. Was fällt bei der Verteilung der kategorischen Variable MaterialClass
auf? Wähle weitere Eigenschaftsvariablen aus und füge sie in die Analyse ein. Welche Variablen könnten für eine Klassifikation der Materialklasse geeignet erscheinen? Wie sollte idealerweise die fivenum Analyse aussehen? Was fällt bei den Histogrammen auf?
Datentabllen lassen sich zeilen- und spaltenweise zerlegen bzw. filtern. Dazu reicht i.A. der Basisoperator []
bzw. [[]]
.
[c]
wählt aus der Datentabelle eine Spalte aus (ergibt wieder eine einspaltige Datentabelle). Der Selektor kann numerisch (Spaltenindex) oder der Name der Spalte als Zeichenkette sein, d.h., c:numeric|character
. [a:b]
wähle die Spalten a bis b aus (ergibt wieder eine mehrspaltige Datentabelle).[row,col]
wählt eine Zelle aus.[,column]
wählt eine Spalte aus.[,columns]
reduziert die Datentabelle auf die angegebenen Spalten (eine, Bereich, oder Menge), d.h. columns:numeric,character,range,vector
.$col
ist ein Spaltenselektor für Datentabelle und gibt einen Vektor zurück!
Teilweise wird bei einer Selektion ein Vektor oder ein einspaltiger Datenrahmen mit einem Element zurückgegeben. Um direkt den Elementwert zu erhalten muss dann der [[]]
Operator verwendet werden!
Die Datenselektoren können auf der linken und rechten Seite einer Zuweisung verwendet werden (schreiben und lesen). Datentabellen (und Matrizen) können mittels der cbind
und rbind
Funktionen spalten- oder zeilenweise kombiniert werden.
▸
[] |
✗
≡
|
Aufgabe. Erstelle aus der Datentabelle data.mat Teiltabellen jeweils mit X (Auswahl, s.o.= und Y (MaterialClass
).
▸
[] |
✗
≡
|
Das Training von Entscheidungsbäumen ist eine Anpassung und Minimierung einer Fehlerfunktion und erfordert eine repräsentative Menge an Dateninstanzen (Samples). So erwartet ein Regressionsbaumlerner (nächste Übung) mindestens 60 Instanzen, die anderen habe i.A. keine untere Grenze.
Frage. Warum sollte man die Datentabelle in Trainings- und Testdatenpartitionen unterteilen, und was ist bei der Aufteilung zu beachten (Schnittmenge)?
Die Anzahl der unabhängigen Instanzen ist nicht allein entscheidend, die Varianz und Repräsentanz ist zusätzlich entscheidend.
Wenn es (genügend) N Dateninstanzen gibt sollten i.A. nur ein Teil Ntrain für das Training (Anpassung des Modells) verwendet werden, und ein weiterer Teil Ntest zum Testen der Modellqualität verwendet werden.
In R kann auf verschiedene Arten eine Datentabelle (Matrix oder Datenrahmen) geteilt werden. Die Teilung muss randomisiert erfolgen, ansonsten gibt es eine verzerrung beim Training und Test.
S=sample(x=V,size=N,prob=P))
Funktion möglich.1:2
) und P=c(p1,p2)
zu wählen, mit p1+p2=1.replace=TRUE
gesetzt wird (d.h. ein Wert aus der Menge V kann natürlich mehrfach im Ergebnisvektor vorkommen)D[S==1,]
und D[S==2,]
Bei sehr großen Tabellen (Millionen von Elementen) ist diese Methode ineffizient, da insgesamt drei Vektoren der Länge gleich der Anzahl der Zeilen der Datentabelle erstellt werden müssen. Es gibt andere Funktion in anderen Packages, die die Aufteilung effizienter lösen (z.B. sample.split
aus dem caTools
Package).
▸
[] |
✗
≡
|
Aufgabe. Teile den Datensatz auf. Welche Verteilungen sind bei den Datensätzen sinnvoll? Wähle geeignete Werte (wird später noch iterativ verändert). Analysiere die Verteilung der Zielvariable MaterialClass
. Was ist zu beachten?
▸
[] |
✗
≡
|
Man kann auch direkt die split
Funktion nutzen um Datentabellen aufzuteilen. Man erhält eine Liste mit den partitionierten Datentabellen.
▸
[] |
✗
≡
|
Der Inferenzfehler von kategorischen Variablen kann durch einen einfachen binären Vergleich zweier Vektoren y und y0 erfolgen. y stammt aus dem Modell, y0 aus dem Datensatz.
▸
[] |
✗
≡
|
Der Inferenzfehler von numerischen Variablen kann mit linearen (MLE) oder quadratischen Differenzfehlern (MSE) sowie RMSE berechnet werden.
▸
[] |
✗
≡
|
Frage. Was ist der Vorteil von RMSE vs MSE vs. MLE?
In den folgenden Übungen sollen verschiedene Modelle und Algorithmen auf die Datensätze angewendet werden (siehe auch Vorlesung)- Hier werden Modell 1 und 2 behandelt:
Die Modelle 1-5 können nur mit kategorischen Zielvariablen verwendet werden, Modell 5 nur mit einer kontinuierlichen numerischen Variablen.
Alle Bäume werden sofort aus Daten erstellt, es gibt keine getrennten Schritte Modellerstellung und Modellanpassung.
Nur der C5.0 Lerner ist direkt in R als Paket verfügbar.
Die wichtigsten Eigenschaften eine trainierten Modells lassen sich mit summary(model)
sowie die Baumstruktur textuell mit plot.tree(model)
oder print
ausgeben.
Ein Modell kann mit c45(data,formula=y~a+b+c)
erstellt werden. Die Formel als zweites Argument bestimmt die abhängige Zielvariable (hier y) in der Datentabelle und die unabhängigien Variablen (Achtung: "+" bedeutet hinzufügen, "-" weglassen). Es gibt keine weiteren Parameter.
MaterialClass
(immer als letzte Variable)
▸
[] |
✗
≡
|
Aufgabe. Wähle zwei Variablen aus der Materialtabelle aus. Ersetze x und y und traniere (erstelle9 das Modell.
Eine Vorhersage mit neuen Daten kann mit (der überladenen) Funktion predict(model,data)
geschehen.
▸
[] |
✗
≡
|
Der Baum lässt sich textuell darstellen:
▸
[] |
✗
≡
|
Frage. Wieiviele Ebenen hat der Baum? Anmerkung: Die Einrückungstiefe ist ein maß für die Höhe (Anzahl der Ebenen) des Baums.
Aufgabe. Wende den C4.5 Lerner auf den Datensatz an. Benutze die Trainingsdaten für das Training. Ermittle den Fehler für die Trainings- und Testdaten. Verändere die Formel und lasse jeweils eine Variable weg oder füge weitere hinzu. Wie verändert sich der Inferenzfehler? Welche Variablen sind stark? Wie verhalten sich die Fehler auf Trainings- und Testdaten zueinander?
▸
[] |
✗
≡
|
Zum Vergleich des eher einfachen C4.5 Algorithmus soll dieser mit dem State-of-the-Art Entscheidungsbaumlerner C5.0 verglichen werden.
Die Programmierschnittstelle ist die gleiche wie beim C4.5 Lerner. Es gibt aber Lernparameter zu setzen:
▸
[] |
✗
≡
|
Frage. Untersuche die Ergebnisse für verschiedene Kombinationen der Eingabevariablen (1-3) und jeweils mit verschiedenen Lernparametern. Welche Auswirkung auf die Ergebnisse und die Baumgröße (Ebenen und Anzahl der Knoten) sind zu beobachten?
Frage. Welcher Entscheidungsbaumlerner schneidet besser ab, wo gibt es Unterschiede, Vor- und Nachteile bei diesem Datensatz?