Zum Inhalt springen

Mehrdimensionale lineare Regression/Umsetzung in R

Aus Wikiversity

Einleitung

[Bearbeiten]

Diese Seite zum Thema Kurs:Mehrdimensionale lineare Regression/Umsetzung in R kann als Wiki2Reveal Folien angezeigt werden. Einzelne Abschnitte werden als Folien betrachtet und Änderungen an den Folien wirken sich sofort auf den Inhalt der Folien aus. Dabei werden die folgenden Teilaspekte im Detail behandelt:

  • (1) Laden der Daten
  • (2) Iterationen zur Fehlerminimierung
  • (3) Ausgabe der Matrix und des mittleren Fehlers pro Datum

Zielsetzung

[Bearbeiten]

Diese Lernressource hat das Ziel, die mehrdimensionale lineare Regression in R umzusetzen und die wesentlichen Schritte in Analogie zur mathematischen Herleitung zu implementieren.


Lernvoraussetzungen

[Bearbeiten]

Die Lernressource zum Thema Kurs:Mehrdimensionale lineare Regression/Umsetzung in R hat die folgenden Lernvoraussetzungen, die zum Verständnis der nachfolgenden Ausführungen hilfreich bzw. notwendig sind.

  • (Mathematische Grundlagen) Die mathematischen Grundlagen sind wesentlich, um die Einsatzmöglichkeiten der Verfahren abschätzen zu kennen.
  • (Grundlagen in GNU R) Die Grundlagen der Implementierung und GNU R sind hilfreich, um die Implementationsschritte zu verstehen und den Code auf anderen Datenquellen ggf. anpassen zu können.

Aufgaben Studierende

[Bearbeiten]

Bitten erzeugen Sie ein KnitR-Markdown-Dokument, indem Sie die Teilschritte als Codefragement / Codechunks einbauen und testen. Gegen Sie schrittweise vor bis Sie mit den angegeben Codezeilen ein vollständiges Verfahren zur Mehrdimensionale lineare Regressionin R umgesetzt haben.

Laden der Daten

[Bearbeiten]

Als einführenden Schritt eines überwachten Lernverfahrens muss man aus den gegebenen Daten festlegen, welche Datenspalten die Eingabespalten und welche Datenspalten die Ausgabespalten der Traininfsdaten darstellen. Kurs:Mehrdimensionale lineare Regression/Umsetzung in R dient dabei Speichen Sie zunächst die obige Beispieldatei multlinreg.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("multlinreg.csv", header=TRUE, stringsAsFactors=FALSE)

CSV-Datei

[Bearbeiten]
"x1","x2","x3","y1","y2"
1,2,3,16.05071,1.92142 
2,3,1,22.06779,0.08923 
7,0,4,24.96846,10.98239
7,6,5,56.06086,6.02315

Tabelle für die Daten

[Bearbeiten]

In der folgenden Tabelle sind x1,x2,x3 die Komponenten der Eingabevektoren und y1,y2 die Komponenten der Ausgabevektoren.

Tabellarische Darstellung
x1 x2 x3 y1 y2
1 2 3 16.05071 1.92142
2 3 1 22.06779 0.08923
7 0 4 24.96846 10.98239
7 6 5 56.06086 6.02315

Bemerkung - Matrixdimension

[Bearbeiten]

Die gesuchte lineare Abbildung für die mehrdimensionale lineare Regression ist also eine -Matrix.

Dataframes für die Ein-/Ausgabe

[Bearbeiten]

Oft enthalten die Rohdaten auch weitere Spalten, die für die mehrdimensionale lineare Regression keine Rolle spielen. Daher muss man die Ein- und Ausgabevektor aus den Rohdaten auswählen und in ein Eingabe-Dataframe und ein Ausgabe-Dataframe zusammenfassen.

Selektieren der Daten für x- und y-Werte

[Bearbeiten]

Die obige verwendete Tabelle multlinreg.csv[1]. enthält in diesem Fall nur Spalten, die für die mehrdimensionale lineare Regression notwendig sind. Die Zuordnung der relevanten Datenspalten für die x- und y-Werte der linearen Regression wird nun gezeigt.

  data <- read.csv("data/multlinreg.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] 
  y2 <- data[,5] 
  ## Dataframes für die Fehlerfunktion
  x_D <- data.frame(x1,x2,x3)
  y_D <- data.frame(y1,y2)

Bemerkung - Pfad zu Daten

[Bearbeiten]

In dem Verzeichnis, in dem die R-Markdown-Dateien (Endung .Rmd) liegen, ist empfehlenswert, Unterverzeichnisse zu erzeugen:

  • data/ - Verzeichnis in dem alle CSV-Dateien bzw. Tabellenkalkulationsdateien liegen oder in das erzeugt Tabellen abgespeichert werden.
  • lib/ - Verzeichnis im dem R-Skripte und R-Bibliotheken liegen, die Sie für mehr als eine R-Markdown-Datei benötigen (z.B. knitr4education.R)

Fehlerfunktion

[Bearbeiten]

Die Fehlerfunktion zerlegt die Matrix in Zeilenvektoren und ruft die Fehlerfunktion für die -te Spalte des Ausgabevektors auf und aggregiert die Fehler (siehe Zerlegung und Berechnung des Gesamtfehlers).

E_MLR <- function (pA,px_D,py_D) {
    ## pA : Matrix A, für die der Fehler berechnet wurde
    ## px_D : Dataframe - Liste von x-Vektoren   
    ## py_D : Dataframe - Liste von y-Werten
    
    ## Fehler pro Datenpunkt 
    cols4y <- ncols(py_D) ## Anzahl der Spalten von y_D
    fehler <- 0 
    ## Fehler für alle y-Spalten 
    for (i in 1:cols4y) {
      ## Fehler für Komponentenfunktion f_a berechnen
      a <- pA[i, ] 
      y1_D <- py_D[ ,i]
      fehler <- fehler + E_LR(a,px_D,y1_D) 
     } 
    return <-  fehler ## datenanzahl
    ## Rückgabewert: fehler  quadratisch
    return
 }


Start - mehrdimensionale lineare Regression

[Bearbeiten]
mdimLR <- function (pA, px_D, py_D, alpha=1, max_iteration=10, evalcount=100)  {
  ## max_iteration  maximale Anzahl der  Iterationszyklen
  ## max_iteration <- 25
  alterfehler <- E_MLR(pA,px_D,py_D)
  minwert <- c(0,alterfehler)
  print(paste("Error 0: ",alterfehler,sep=""))
  for (i in 1:max_iteration) {
     
    minwert <- find_min4error(E_LR, normGradE_LR, pa, px_D, py_D, alpha, evalcount)
    print(paste("Iteration ",i," (",paste(minwert[1]*alpha,minwert[2],sep=","),")",sep=""))
    #print(minwert) 
    pa + minwert[1]*normGradE_LR(pa, px_D, py_D)
    
    if (alterfehler > minwert[2]) {
      pa <- pa + minwert[1]*normGradE_LR(pa, px_D, py_D)
      print(paste("a=(",paste(pa[1],pa[2],pa[3],sep=","),")",sep=""))
      print(paste("Gradient",i," alpha=",alpha,sep=""))
      print(paste("Error ",i,": ",minwert[2],sep=""))
      alterfehler > minwert[2]
    } else {
      print("Fehler wird größer")
    }
  }
  return <- a
  ### Rückgabewert
  return
}
   
    
A <- matrix(c(1,2,3,4,5.6), ncol=3)
mdimLReg(A,x_D,y_D)

Literatur/Quellennachweise

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


Siehe auch

[Bearbeiten]

Seiteninformation

[Bearbeiten]

Diese Lernresource können Sie als Wiki2Reveal-Foliensatz darstellen.

Wiki2Reveal

[Bearbeiten]

Dieser Wiki2Reveal Foliensatz wurde für den Lerneinheit Kurs:Mehrdimensionale lineare Regression' erstellt der Link für die Wiki2Reveal-Folien wurde mit dem Wiki2Reveal-Linkgenerator erstellt.