Wir verwenden hier Pakete math, plot, pca. Ggfs. in einem Snippet mittels use einbinden. Rechts unten gibt es den ChatBot für eine R+ Hilfe.
math
plot
pca
use
Daten werden häufig in Datentabellen organisiert und gespeichert. Eine Datentabelle besteht aus Zeilen und Spalten.
Spalten einer Datentabelle repräsentieren Variablen, Zeilen repräsentieren Instanzen (Experimente, Beispiele).
Dabei unterteilen sich bei ML Problemen häufig die Spalten in Eingabeattribute (X) und Ausgabeattribute (Y).
In R werden Datentabellen i.A. durch einen data.frame Datentyp (Datenrahmen) abgebildet.
data.frame
[]
Datentabellen sind wie 2-dim Matrizen, und Zeilen und Spalten können über eine numerische Indizierung ausgewählt werden. Die Auswahl einer Spalte oder Zeile liefert einen Vektor, die Auswahl mehrerer Spalten und/oder Zeilen liefert wieder eine Datentabelle.
Auswahl von Feldern einer Datentabelle über den Bracketoperator D[rows,columns]. Auswahl aller Spalten oder Zeilen durch Auslassung eines Wertes, z.B. alle Zeilen der zweiten Spalte wäre D[,2], einige Spalten der dritten Zeile wäre D[3,1:2], selektiert über den Bereichsausdruck start:end. Einzelne Spalten können über den namentlichen Selektor $ ausgewählt werden, z.B. D$x.
D[rows,columns]
D[,2]
D[3,1:2]
start:end
$
D$x
Aufgabe. Wähle aus obigen Datenrahmen jeweils x und y aus, benutze sowohl den numerischen als auch den namentlichen Selektor. Welchen Datentyp erhält man (nutze die typeof(x) Funktion) jeweils. Wähle dann die Zeilen 2-5 aus. Wende die Summationsfunktion auf die Spalten an.
typeof(x)
Zusammenfassend gibt es fünf wichtige Datentypen und Datenformaten, die wie folgt erzeugt werden können (ε: Wert oder Ausdruck)
data.frame(x=ε,y=ε,..)
matrix(x,nrows,ncols,mode?)
float32
vector(x,n,mode?)
c(ε,ε,ε,..)
[ε,ε,ε..]
array(x,[dim1,dim2,..],mode?)
list(x=ε,y=ε,..)
{x=ε,y=ε,..}
Häufig ist im Datenmanagement und der Datenanalyse sowie Modellierung eine Umwandlung zwischen diesen Formaten. Dazu gibt es zumeist universelle Umwandlungsfunktionen:
as.vector(x,mode?)
as.matrix(x,nrow?=N,ncol?=N,mode?)
as.data.frame(x)
as.list(x)
Feldsnamen können Vektoren und Listen nachträglich mittels der names Funktion hinzugefügt werden, mei Matrizen und Datenrahmen gibt es die colnames und rownames Funktionen:
names
colnames
rownames
names(x)={'x','y',..} colnames(m)={'x','y',..}
Aufgabe. Wandle nachfolgenden Vektor (randomisiert erzeugt) in eine Matrix mit 4 Zeilen und 3 Spalten um, schließlich in einen Datenrahmen mit den Spalten a, b und c. Wie sieht die Elemente des linearen Vektors nun in der Matrix und im Datenrahmen angeordnet?
DATA: Variable dataIRIS Type: { length : number, width : number, petal.length : number, petal.width : number, species : string } [151]
Im folgenden wird ein Datensatz aus der Botanik verwendet:
Der Datensatz ist bereits im Notebook enthalten und wird als Datenrahmen (data.frame) data.iris zur Verfügung gestellt!
data.iris
Man kann direkt einzelne Spalten evaluieren, z.B. bei numerischen Variablen mittels der Funktionen mean, sum, sd, und table bei kategorischen Variablen. Man kann auch eine Datentabelle als ganzes analysieren. So kann man die sapply Funktion verwenden um eine Funktion auf alle Spalten anzuwenden, und man erhält einen Vektor der Aggregatwert (z.B. mean).
mean
sum
sd
table
sapply
Die Zielvariable y liegt als kategorische Variable vor. Eine Kodierung in eine numerische kann wie folgt durchgeführt werden:
Frage. Was enthält y.code? Was bewirkt factor (verwende logg/print) und was enthält y.levels?
y.code
factor
y.levels
Die universellste Analysefunktion ist summary, gefolgt von fivenum für numerische und table für kategorische Variablen.
summary
fivenum
Aufgabe. Analysiere den Datensatz mit 1. summary, 2. Einzelne Spalten mit fivenum und table. Welche Eigenschaften haben die einzelnen Variablen (Attribute)?
R summary liefert bei kategorischen Variablen keine Verteilungsanalyse. Mit dem Argument extended=TRUE kann diese hier aktiviert werden.
extended=TRUE
Die plot(x,y) Funktion ist universell und kann verschiedene Datenformate darstellen. Am häuigsten wird man sie für Punkt- und Linienverläufe verwenden. Die Breite (oder Höhe) des Plotfensters kann mit dev.new(width=300) gesetzt werden. Das darstellungsformat kann mittels des type='l' Argumentes eingestellt werden(p:Punkt, l: Linie, b: Beides).
plot(x,y)
dev.new(width=300)
type='l'
p
l
b
Aufgabe. Benutzte die plot(x,y) Funktion um Zusammenhänge zwischen den einzelnen Variablen x1 bis x4 und mit der Zielvariablen y.code herzustellen. Findet man Strukturen, können schon geeignete Kandidaten für die Klassifikation gefunden werden?
Hinweis: Man kann die x Attribute miteinander vergleichen um Abhängigkeiten zu finden, oder eine x Variable mit y. Für y dann as.numeric(factor(y)) für die numerische Kodierung verwenden.
as.numeric(factor(y))
Grafisch konnten bereits Eingabevariablen mit der (numerisch kodierten) Ausgabevariable in einen Zusammenhang gesetzt werden. Analytisch kann man neben dem Informationsgewinn eine einfache Partitionierung der numerischen Eingabevariablen nach der Zielvariable vornehmen. Das ist im nächsten Beispiel gezeigt.
Aufgabe. Analysiere die Partitionen. Lassen sich geeignete Teilungspunkte für wenigstens einer Zweiklassenseparation mit einer der Attribute erreichen?
Wir haben eine Datentabelle mit vier Eingabe- und einem Ausgabeattribut. Eine wichtige Frage in der Vorverarbeitung ist das Vorhandensein von linearen Abhängigkeiten zwischen Variablen (X). Im Grund auch nicht-lineare Zusammenhänge, diese sind aber ohne Kenntnis des polynomiellen Zusammenhangs nicht einfach nachweisebar.
Die Hauptkomponentenanlayse berechnet mittels linearer Matrixalgebra und Lösung eines Gleichungssystems die Hauptkomponentenvektorn PC (Principle Components) einer Datentabelle.
Jede Spalte der Datentabelle erzeugt einen PC Vektor (auch Eigenvektor genannt, da PCA ein Eigenwertproblem ist), mit der Dimension der Anzahl de Spalten. Weiterhin gibt es eine Länge (Eigenwert) des Vektors, d.h. der vektorielle Betrag |PC|.
Es steht uns das Paket pca für die Berechnung der PCA zur Verfügung. Die Funktion prcomp berechnet aus einem Datenrahmen bzw. einer Matrix die PC Vektoren.
prcomp
Die Funktion prcomp gibt ein abstraktes Objekt zurück. Dieses kann mit der summary Funktion interpretierbar und mittels predict zur Transformation der Datentabelle verwendet werden. Die prcomp Funktion verwendet entweder alle Spalten der Datentabelle (und einer Matrix), oder nur eine Auswahl die mittels einer Formel ~x+y+z ausgewählt werden. predict benötigt dann eine Matrix oder Datenrahmen mit der gleichen Anzahl von Spalten wie Hauptkomponenten.
predict
~x+y+z
Aufgabe. Untersuche die transformierte Datentabelle unter Verwendung der Scatterplot Funktion. Würde schon eine Hauptkomponente reichen um alle drei Klassen gut zu separieren? Welche Komponente ist es, und warum diese?
Die trabsformierte Tabelle kann unter Verwendung der ersten degeree PC Vektoren wieder mittels der reverse Funktion in die ursprüngliche Datentabelle zurück transformiert werden. Die Transformation bezeichnet man auch als Kompression (wenn weniger PC Vektoren verwendet werden als ursprüngliche Spalten), die Rücktransformation als Dekompression.
reverse
Aufgabe. Untersuche die transformierte Datentabelle unter Verwendung der Rücktransformation. Wie hoch ist der RMSE unter Verwendung der ersten degree PC Vektoren?