Zum Inhalt springen

Mehrdimensionale lineare Regression/Gradientenabstieg und Fehlerfunktion

Aus Wikiversity

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.

Daten[Bearbeiten]

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 darstellende Vektors für die Funktion eine kleineren Fehler.

Nächste Lerneinheit[Bearbeiten]

Siehe auch[Bearbeiten]

  1. 1,0 1,1 1,2 1,3 1,4 Bert Niehaus (2024) GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: multilinreg1.csv