Mehrdimensionale lineare Regression/Gradientenabstieg und Fehlerfunktion

Einführung

Bearbeiten

In 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

Gradientenabstiegsverfahren und Fehlerfunktion

Bearbeiten

Ziel 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

Bearbeiten

Bei 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

Bearbeiten

Für ein lineares Funktional   und einem einzelnen Datenpunkt   kann man mit   ergibt sich der quadratische Fehler wie folgt:

 

Partielle Ableitungen des quadratischen Fehlers 2

Bearbeiten

Fü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

Bearbeiten

Der 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

Bearbeiten

Der Gradient   des quadratischen Fehlers für einen einzelnen Datenpunkt   ergibt sich damit wie folgt.

 

CAS4Wiki - Partielle Ableitungen

Bearbeiten

Mit CAS4Wiki können Sie die obigen Ableitung berechnen, siehe z.B. partielle Ableitungen

Beispiel

Bearbeiten

Für folgenden Vektor   definiert man eine Abbildung  :

 

Es ergibt sich daher die folgende lineare Funktion:

 

Bemerkung - Komponentenfunktionen

Bearbeiten

Die hier betrachteten linearen Funktionen   entstehen aus einer linearen Abbildung   durch Zerlegung in Komponentenfunktionen.

Demo Daten
       
1 2 3 16.1
2 3 1 22.3
7 0 4 25.9
7 6 5 56.6

Vektoren in R

Bearbeiten

Die 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

Bearbeiten

Aus 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

Bearbeiten

Fü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

Bearbeiten

Fü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

Bearbeiten

Im Folgenden verwendet man Daten mit einen eindimensionalen Wertebereich und einer linearen Funktion  . Daher liegen die Daten in folgender Form vor.

 

Berechnung des Gesamtfehlers

Bearbeiten

Für die Berechnung des Gesamtfehlers   werden die quadratischen Fehler für einzelne Datenpunkte   aufsummiert mit   und  .

 

Datenbeispiel

Bearbeiten

Mehrdimensionale lineare Regression soll als Optimierungsproblem für folgende lineare Abbildung   mit   und   durchgeführt werden.

 

Daten in R in einer CSV-Tabelle

Bearbeiten

Mit 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

Bearbeiten

Achten 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

Bearbeiten

Speichen 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

Bearbeiten

Eine 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

Bearbeiten

Fü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

Bearbeiten

Die obige Funktion   in R berechnet die nachstehende Summe mit einer for-Schleife über die quadratischen Einzelfehler.

 

Auswertung der quadratischen Gesamtfehlers

Bearbeiten

Bezogen 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

Bearbeiten

Quellennachweise

Bearbeiten
  1. 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

Siehe auch

Bearbeiten