Mehrdimensionale lineare Regression/Umsetzung in R

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.