Mehrdimensionale lineare Regression/Gradientenabstieg und Fehlerfunktion
Einführung
BearbeitenIn dieser Lerneinheit wird das gezeigt, wie man das Gradientenabstiegsverfahren auf die Fehlerfunktion von Daten anwenden kann. Daher benötigt man als Lernvoraussetzung allgemein eine affines Problem in ein lineares tranformieren kann und bei der Zerlegung in Komponentenfunktionen im Kern ein Optimierungsverfahren für Abbildungen mit einem gesuchten verwandeln kann. An dieser geht es um die Anwendung des Gradientenabstiegs auf die Fehlerfunktion von .
Lernvoraussetzungen
Bearbeiten- Daten und Abbildungen - (Foliensatz)
- Transformation - affin zu linear
- Zerlegung einer linearen Abbildung in Komponentenfunktionen
- Regression für Komponentenfunktion - exakte Lösung und Approximation
- Gradient - lineares Funktional - (Foliensatz)
Gradientenabstiegsverfahren und Fehlerfunktion
BearbeitenZiel des Optimierungsproblems ist es, den Fehler bei mehrdimensionalen linearen Regression zu minimieren. In dem folgende Abschnitt wird das über das Gradientenabstiegsverfahren umgesetzt.
Bemerkung - Aggregation der absoluten Fehler über alle Daten
BearbeitenBei der Berechnung des Gesamtfehlers über alle Daten macht es Sinn, dass man nicht die absoluten Fehler aufsummiert (da diese mit einem Vorzeichen) versehen sind, sondern Werte als Abweichung von den Daten aufsummiert, die nicht negativ sind. Der Betrag des absoluten Fehlers ist allerdings das Gradientenabstiegsverfahren ungeeignet, da die Betragsfunktion nicht differzierbar ist. Daher verwendet man für die Minimierung Fehlerquadrate.
Partielle Ableitungen des quadratischen Fehlers 1
BearbeitenFür ein lineares Funktional und einem einzelnen Datenpunkt kann man mit ergibt sich der quadratische Fehler wie folgt:
Partielle Ableitungen des quadratischen Fehlers 2
BearbeitenFür den Gradienten bzgl. der unbekannten Koeffizienten aus benötigt man die partiellen Ableitungen der Fehlerquadrate. Mit der Kettenregel ergibt sich für diese partielle Ableitung mit wie folgt:
wobei die innere Ableitung von nach ist.
Gradient des quadratischen Fehlers 1
BearbeitenDer Gradient des quadratischen Fehlers ergibt sich aus den partiellen Ableitungen bzgl. der Argumente . Die weiteren Argumente und des quadratischen Fehlers werden durch die Trainingsdaten belegt. Da die Definition des Gradienten i.d.R. auf alle Argumente der Funktion bezieht, wird hier in der Definition statt verwendet.
Gradient des quadratischen Fehlers 2
BearbeitenDer Gradient des quadratischen Fehlers für einen einzelnen Datenpunkt ergibt sich damit wie folgt.
CAS4Wiki - Partielle Ableitungen
BearbeitenMit CAS4Wiki können Sie die obigen Ableitung berechnen, siehe z.B. partielle Ableitungen
Beispiel
BearbeitenFür folgenden Vektor definiert man eine Abbildung :
Es ergibt sich daher die folgende lineare Funktion:
Bemerkung - Komponentenfunktionen
BearbeitenDie hier betrachteten linearen Funktionen entstehen aus einer linearen Abbildung durch Zerlegung in Komponentenfunktionen.
Daten
Bearbeiten1 | 2 | 3 | 16.1 |
2 | 3 | 1 | 22.3 |
7 | 0 | 4 | 25.9 |
7 | 6 | 5 | 56.6 |
Vektoren in R
BearbeitenDie Vektoren werden in GNU R wie folgt definiert:
x1 <- c(1,2,7,7)
x2 <- c(2,3,0,6)
x3 <- c(3,1,4,5)
y <- c(16.1,22.2,25.9,56.6)
Daten in Dataframe speichern
BearbeitenAus den obigen Daten erzeugt man und als Dataframes und ein Dataframe zum Speichern.
## x Vektoren aus dem IR^3
x_D <- data.frame(x1,x2,x3)
## y Vektoren aus dem IR^1
y_D <- data.frame(y)
## Dataframe (x1,x2,x3,y)
daten <- data.frame(x1,x2,x3,y)
## Daten in Datei schreiben
write.csv(daten, "daten3x1.csv", row.names = FALSE)
Gradient des Fehlers
BearbeitenFür und ist der Gradient des quadratischen Fehlers mit
Berechnung des Gradienten in R
Bearbeiten## x ist erste Zeile aus x_D im IR^3
a <- c(3,5,1)
x <- x_D[1, ] ## erste Zeile der x-Daten x=(1,2,3)
y <- y_D[1, ] ## erste Zeile der y-Daten y=16.1
### Gradient des Einzelfehlers berechnen
grad4fehler <- 2*(sum(a*x)-y) * x
Gesamtfehler des mehrdimensionalen Regression
BearbeitenFür die Berechnung des Gesamtfehlers der muss man die quadratischen Fehler über alle Datenpunkte aggregrien. Die Daten für die mehrdimensionale lineare Regression bestehen aus Datenpunkten der Form :
Wertebereich - eindimensional
BearbeitenIm Folgenden verwendet man Daten mit einen eindimensionalen Wertebereich und einer linearen Funktion . Daher liegen die Daten in folgender Form vor.
Berechnung des Gesamtfehlers
BearbeitenFür die Berechnung des Gesamtfehlers werden die quadratischen Fehler für einzelne Datenpunkte aufsummiert mit und .
Datenbeispiel
BearbeitenMehrdimensionale lineare Regression soll als Optimierungsproblem für folgende lineare Abbildung mit und durchgeführt werden.
Daten in R in einer CSV-Tabelle
BearbeitenMit der obigen Dimension von Definitionsbereich und Wertebereich der lineare Abbildung haben die tabellarischen Trainingdaten die folgenden Gestalt in einer Datei multilinreg1.csv
[1]
"x1" , "x2" , "x3" , "y" 1 , 2 , 3 , 16.05071 2 , 3 , 1 , 22.06779 7 , 0 , 4 , 24.96846 7 , 6 , 5 , 56.06086
Bemerkung - Fehler beim Laden der CSV
BearbeitenAchten Sie bei den Dateien darauf, dass die hinter der letzten Zeile der Daten noch ein "Return/Neue Zeile" steht, da sonst der letzte Datensatz in der CSV-Datei als unvollständig angesehen wird.
Laden der Daten in R aus einer CSV-Tabelle
BearbeitenSpeichen Sie zunächst die obige Beispieldatei multlinreg1.csv
[1] in Ihr Verzeichnis mit dem KnitR-Dokument. Das Laden von Dateien in R und KnitR kann bzgl. der obigen Beispieldatei[1] wie folgt geschehen:
data <- read.csv("multlinreg1.csv", header=TRUE, stringsAsFactors=FALSE)
Selektieren der Daten für x- und y-Werte
BearbeitenEine Tabelle enthält ggf. mehr Spalten als die elementare oben genannte Demodatei multlinreg1.csv
[1]. Daher muss man zunächst in R die relevanten Datenspalten für die x- und y-Werte der linearen Regression selektieren.
data <- read.csv("multlinreg1.csv", header=TRUE, stringsAsFactors=FALSE)
## Spalten extrahieren für x_D
x1 <- data[,1]
x2 <- data[,2]
x3 <- data[,3]
## Spalten extrahieren für y_D
y1 <- data[,4]
## Dataframes für die Fehlerfunktion
x_D <- data.frame(x1,x2,x3)
y_D <- data.frame(y1)
Implementation die quadratische Fehlerfunktion
BearbeitenFür die Implementation des Gesamtfehlers in R verwendet man die geladenen Daten in data
. Die Datenpunkte liegen als Zeilen in der CSV-Datei vor.
E_LR <- function (pa,px_D,py_D) {
## px_D : Dataframe - Liste von x-Vektoren
## py_D : Dataframe - Liste von y-Werten
## pa : darstellender Vektor von f_a
## Fehler pro Datenpunkt
datenanzahl <- nrow(px_D)
e_D <- rep(0,datenanzahl)
## Fehler für alle Datenpunkte berechnen
for (i in 1:datenanzahl) {
## quadratische Einfehler mit Funktion e
e_D[i] <- (sum(pa*px_D[i, ]) - py_D[i, ])^2
}
## Rückgabewert als aufsummierte Einzelfehler setzen
return <- sum(e_D) ## datenanzahl
## Rückgabewert: return Gesamtfehler quadratisch
return
}
Bemerkung - Implementation Fehlerfunktion
BearbeitenDie obige Funktion in R berechnet die nachstehende Summe mit einer for
-Schleife über die quadratischen Einzelfehler.
Auswertung der quadratischen Gesamtfehlers
BearbeitenBezogen auf die Beispieldaten[1] in kann nun den Fehler für unterschiedliche darstellende Vektoren berechnen.
a <- c(2,3,2)
E_LR(a,x_D,y_D) ## Ergebnis 260.6786
a <- c(3,5,2)
E_LR(a,x_D,y_D) ## Ergebnis 50.21575
Die zweite Setzung des darstellenden Vektors für die Funktion hat damit einen kleineren Fehler.
Nächste Lerneinheit
BearbeitenQuellennachweise
Bearbeiten- ↑ a b c d e Bert Niehaus (2024) GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: multilinreg1.csv