Mehrdimensionale lineare Regression/Gradientenabstieg und Fehlerfunktion

Aus testwiki
Zur Navigation springen Zur Suche springen

Einführung

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 fa:n mit einem gesuchten an verwandeln kann. An dieser geht es um die Anwendung des Gradientenabstiegs auf die Fehlerfunktion von fa.

Lernvoraussetzungen

Gradientenabstiegsverfahren und Fehlerfunktion

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

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

Für ein lineares Funktional fa:n und einem einzelnen Datenpunkt (x,y)=(x1,,xn,y)n+1 kann man mit fa(x)=a,x ergibt sich der quadratische Fehler wie folgt:

eLR1(a,x,y)2=(fa(x)y)2=(a,xy)2

Partielle Ableitungen des quadratischen Fehlers 2

Für den Gradienten Grada(eLR2) bzgl. der unbekannten Koeffizienten aus a=(a1,,an)n benötigt man die partiellen Ableitungen eLR12ak(a,x,y) der Fehlerquadrate. Mit der Kettenregel ergibt sich für diese partielle Ableitung mit k{1,,n} wie folgt:

eLR2ak(a,x,y)=2(fa(x)y)xk

wobei xk die innere Ableitung von a,xy=(i=1naixi)y nach ak ist.

Gradient des quadratischen Fehlers 1

Der Gradient Grada(e2) des quadratischen Fehlers ergibt sich aus den partiellen Ableitungen bzgl. der Argumente a=(a1,,an). Die weiteren Argumente x und y des quadratischen Fehlers e2 werden durch die Trainingsdaten belegt. Da die Definition des Gradienten i.d.R. auf alle Argumente der Funktion bezieht, wird hier in der Definition Grada(e2) statt Grad(e2) verwendet.

Gradient des quadratischen Fehlers 2

Der Gradient Grada(e2) des quadratischen Fehlers für einen einzelnen Datenpunkt (x,y)=(x1,,xn,y)n+1 ergibt sich damit wie folgt.

Grada(e2)(a,x,y)=(e2a1(a,x,y),,e2an(a,x,y))=(2(fa(x)y)x1,,2(fa(x)y)xk)=2(fa(x)y)(x1,,xk)=2(fa(x)y)x

CAS4Wiki - Partielle Ableitungen

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

Beispiel

Für folgenden Vektor a3 definiert man eine Abbildung fa:3:

a=(137),x=(x1x2x3)

Es ergibt sich daher die folgende lineare Funktion:

fa(x)=a,x=1x1+3x2+7x3

Bemerkung - Komponentenfunktionen

Die hier betrachteten linearen Funktionen fa:3 entstehen aus einer linearen Abbildung f(x):=Ax durch Zerlegung in Komponentenfunktionen.

Daten

Demo Daten
x1 x2 x3 y
1 2 3 16.1
2 3 1 22.3
7 0 4 25.9
7 6 5 56.6

Vektoren in R

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

Aus den obigen Daten erzeugt man x𝔻 und y𝔻 als Dataframes und ein Dataframe daten 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

Für x:=(1,2,3) und y=16.1 ist der Gradient des quadratischen Fehlers mit a:=(3,5,1)

Grada(e2)(a,x,y)=2(fa(x)y)x=2(a,xy)x=2((351),(123)16.1)(123)=2(1616.1)x=(0.20.40.6)

Berechnung des Gradienten in R

## 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

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 (x(i),y(i))n×m:

𝔻:={(x(i),y(i))n×m : i{1,,d}}

Wertebereich - eindimensional

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

𝔻:={(x(i),y(i))n× : i{1,,d}}

Berechnung des Gesamtfehlers

Für die Berechnung des Gesamtfehlers ELR(a,𝔻) werden die quadratischen Fehler für einzelne Datenpunkte (x(i),y(i))𝔻 aufsummiert mit x𝔻:=(x(1),,x(d)) und y𝔻:=(y(1),,y(d)).

ELR(a,x𝔻,y𝔻):=i=1de(a,x(i),y(i))2=i=1d(a,x(i)y(i))2

Datenbeispiel

Mehrdimensionale lineare Regression soll als Optimierungsproblem für folgende lineare Abbildung fa mit a=(a1,a2,a3)3 und x=(x1,x2,x3)3 durchgeführt werden.

fa(x)=a,x=k=13akxk

Daten in R in einer CSV-Tabelle

Mit der obigen Dimension von Definitionsbereich und Wertebereich der lineare Abbildung fa:3 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

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

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

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

Für die Implementation des Gesamtfehlers E(a,x𝔻,y𝔻) in R verwendet man die geladenen Daten in data. Die Datenpunkte (x(i),y(i))𝔻 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

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

ELR(a,x𝔻,y𝔻):=i=1d(a,x(i)𝚜𝚞𝚖(𝚊𝚡𝙳[𝚒])y(i))2=𝚎𝙳[𝚒]

Auswertung der quadratischen Gesamtfehlers

Bezogen auf die Beispieldaten[1] in 𝔻 kann nun den Fehler für unterschiedliche darstellende Vektoren a3 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 a für die Funktion fa(x)=a,x hat damit einen kleineren Fehler.

Nächste Lerneinheit

Quellennachweise

  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

Siehe auch