{"id":4176,"date":"2021-08-25T04:00:02","date_gmt":"2021-08-25T04:00:02","guid":{"rendered":"https:\/\/lamarr-institute.org\/blog\/was-ist-eine-lineare-regression\/"},"modified":"2025-11-12T14:52:03","modified_gmt":"2025-11-12T14:52:03","slug":"was-ist-eine-lineare-regression","status":"publish","type":"blog","link":"https:\/\/lamarr-institute.org\/de\/blog\/was-ist-eine-lineare-regression\/","title":{"rendered":"Was ist eine lineare Regression?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In anderen Blogbeitr\u00e4gen aus der Reihe <a href=\"https:\/\/lamarr-institute.org\/de\/blog-kategorie\/ml-basics-de\/\" target=\"_blank\" type=\"link\" id=\"https:\/\/lamarr-institute.org\/de\/category\/ml-basics\/\" rel=\"noreferrer noopener\">Grundlagen des Maschinellen Lernens<\/a> haben wir bereits gesehen, welche <a href=\"https:\/\/lamarr-institute.org\/de\/welche-arten-von-maschinellem-lernen-gibt-es\/\" target=\"_blank\" rel=\"noreferrer noopener\">Arten des Maschinellen Lernens<\/a> es gibt und dass <a href=\"https:\/\/lamarr-institute.org\/de\/optimierung-im-maschinellen-lernen\/\" target=\"_blank\" rel=\"noreferrer noopener\">Optimierung im Maschinellen Lernen<\/a> eine Schl\u00fcsselposition einnimmt. In diesem Beitrag wollen wir uns konkret mit <em>linearen Modellen<\/em> besch\u00e4ftigen, einer grundlegenden Modellklasse, die im \u00fcberwachten Lernen angewandt werden kann. Lineare Modelle nehmen einen linearen Zusammenhang zwischen den beobachtbaren Daten und einem abh\u00e4ngigen Zielwert an. <em>Lineare Regression<\/em> ist das vermutlich am h\u00e4ufigsten eingesetzte Verfahren, um ein lineares Modell an Daten anzupassen und funktioniert schnell und recht zuverl\u00e4ssig auf gro\u00dfen sowie kleinen Datenmengen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im \u00fcberwachten Lernen gehen wir davon aus, dass wir eine Menge von Trainingsdaten haben, f\u00fcr die wir den Wert einer Zielfunktion $F$ kennen.<br>Zum Beispiel k\u00f6nnten unsere Datenpunkte $x$ die Einstellungen am Temperaturregler unseres K\u00fchlschranks sein und die Zielfunktionswerte $F(x)$ Messungen der Temperatur im K\u00fchlschrank entsprechen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/data_no_outlier1-1024x1008.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24875\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R <br>Unsere Trainingsdaten: Temperaturmessungen $F(x)$ in Grad Celsius f\u00fcr verschiedene Reglereinstellungen $x$ eines K\u00fchlschranks.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In unserem Beispiel sind die Trainingsdaten reelle Zahlen, die wir auf der $x$-Achse aufgetragen haben. Die Zielfunktionswerte, die wir f\u00fcr die Trainingsdaten kennen, haben wir auf der $y$-Achse aufgetragen. Wir wollen nun $F$ &#8222;lernen&#8220;, um f\u00fcr neue Datenpunkte, die nicht aus unserer Trainingsmenge stammen, den Wert der Zielfunktion vorhersagen zu k\u00f6nnen. In unserem Beispiel wollen wir vielleicht absch\u00e4tzen, wie kalt der K\u00fchlschrank wird, wenn wir den Regler zum Beispiel auf zehn stellen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ein linearer Zusammenhang zwischen den Daten und den Zielfunktionswerten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir die Daten in dem obigen Beispiel betrachten, k\u00f6nnen wir beobachten, dass vermutlich ein <em>linearer<\/em> Trend vorliegt: Je h\u00f6her wir den Regler unseres K\u00fchlschranks stellen, desto tiefer sinkt die Temperatur im K\u00fchlschrank. Au\u00dferdem scheint es so, als k\u00f6nne man gut eine Gerade finden, die diesen Zusammenhang ungef\u00e4hr beschreibt, zum Beispiel die folgende:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/data_no_outlier_regression_lsq2-1-1024x918.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24877\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R <br>Eine intuitiv sinnvolle Funktion $f(x)$, die den Zusammenhang zwischen den Reglereinstellungen $x$ und der gemessenen Temperatur $F(x)$ beschreibt.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wir wollen im Folgenden versuchen, eine solche Gerade zu finden, die unsere Trainingsbeispiele gut beschreibt. Eine Gerade wie in unserem Beispiel kann durch eine Geradengleichung <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ f(x) = a \\cdot x + b $$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> f\u00fcr reelle Zahlen $a$ und $b$ beschrieben werden. Hierbei beschreibt $a$ die Steigung der Geraden, und $b$ den Schnittpunkt mit der $y$-Achse. Um nun f\u00fcr einen unbekannten Datenpunkt $x&#8217;$ einen Zielfunktionswert vorherzusagen, k\u00f6nnen wir $x&#8217;$ also einfach in unsere Geradengleichung einsetzen und $f(x&#8216;)$ berechnen, wenn wir $a$ und $b$ kennen. Damit erhalten wir eine Vorhersage $f(x&#8216;)$, die den uns unbekannten Zielfunktionswert $F(x&#8216;)$ hoffentlich gut ann\u00e4hert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lineare Regression<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir haben also unser Problem, den Zielfunktionswert f\u00fcr einen unbekannten Datenpunkt $x&#8217;$ vorherzusagen, darauf zur\u00fcckgef\u00fchrt, die Werte von $a$ und $b$ zu bestimmen. <a href=\"https:\/\/de.wikipedia.org\/wiki\/Lineare_Regression\" target=\"_blank\" rel=\"noreferrer noopener\">Lineare Regression<\/a> ist eine Methode, die genau dies macht. Hierzu wendet sie das Verfahren der kleinsten Quadrate an. Ziel ist es unter den unendlich vielen Geraden, die man durch die Geradengleichung definieren kann, diejenige zu finden, die unsere Daten intuitiv richtig beschreibt. Das Verfahren der kleinsten Quadrate (engl. &#8218;Least Squares&#8216;, LSQ) minimiert eine Fehlerfunktion $E_{LSQ}$, die den quadratischen Abstand all unserer Trainingspunkte von der Geraden beschreibt:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ E_{LSQ}(a, b) = \\sum_{\\substack{x \\text{ in Trainingsmenge}}} \\left( a \\cdot x + b\\; &#8211; F(x) \\right)^2 $$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir haben hier unsere Gerade durch ihre beiden Parameter $a$ und $b$ dargestellt und suchen nun die Gerade (beziehungsweise das $a$ und das $b$), die $E_{LSQ}$ minimiert. Wir werden nun sehen, wie wir dies in der Programmiersprache Python mit dem Paket <a href=\"https:\/\/numpy.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Numpy<\/a> erreichen k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Praktische Umsetzung der Linearen Regression<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir gehen im Folgenden davon aus, dass wir eine irgendwie geartete Python-Umgebung zur Verf\u00fcgung haben, in der das Paket Numpy installiert ist. Zum Beispiel ein lokal oder auf <a href=\"https:\/\/colab.research.google.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">google colab<\/a> laufendes Jupyter Notebook. Daher beginnen wir mit dem Import von Numpy und dem Laden unserer Daten, die als Textdatei vorliegen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy as np\n\ndata = np.loadtxt('data.csv', delimiter=', ')\n\nvecX = data&#91;0]\nvecY = data&#91;1]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Der Code erwartet, dass die Datei <em>data.csv<\/em> die reellen Trainingsdaten in der ersten Zeile enth\u00e4lt und die dazugeh\u00f6rigen Zielfunktionswerte in der zweiten Zeile. Demnach enth\u00e4lt nun <em>vecX<\/em> die Trainingsdaten und <em>vecY<\/em> die Zielfunktionswerte. Unsere Fehlerfunktion $E_{LSQ}$ k\u00f6nnen wir nun in Matrix-Vektor-Schreibweise wie folgt darstellen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ E_{LSQ}(a, b) = \\sum_{\\substack{x \\text{ in Trainingsmenge}}} \\left( \\left( a, b \\right) \\cdot \\begin{pmatrix} x \\\\ 1 \\end{pmatrix} &#8211; F(x) \\right)^2 $$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das erlaubt uns, die nachfolgende Matrix zu definieren. Sie besteht aus einer Zeile, die unsere Datenpunkte enth\u00e4lt, gefolgt von einer Zeile, die nur Einsen enth\u00e4lt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>matF = np.vstack(vecX, (np.ones_like(vecX)))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Methode der kleinsten Quadrate, die uns einen Vektor <em>vecW = (a,b)<\/em> berechnet und unsere Fehlerfunktion $E_{LSQ}$ auf unseren Trainingsdaten minimiert, ist bereits im Numpy-Unterpaket &#8222;linalg&#8220; implementiert und kann wie folgt aufgerufen werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vecW = np.linalg.lstsq(matF.T, vecY, rcond=None)&#91;0]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wir k\u00f6nnen nun also die Lineare Regression mithilfe der Methode der kleinsten Quadrate durchf\u00fchren. Wie die Funktion $f$ und die Daten graphisch dargestellt werden k\u00f6nnen, kann der begleitenden Code Datei entnommen werden. Wir geben daher jetzt nur die beiden berechneten Geradenparameter aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print ('a =',vecW&#91;0])\nprint ('b =',vecW&#91;1])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies liefert uns<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ a = -0.399 \\quad b = 10.099 $$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Somit haben wir ein lineares Modell von unseren Trainingsdaten &#8222;gelernt&#8220; und k\u00f6nnen diesen gelernten Zusammenhang auf verschiedene Weisen nutzen. Zum Beispiel k\u00f6nnen wir unsere gefundene Gerade anzeigen oder das Modell verwenden, um eine Vorhersage f\u00fcr die Temperatur in unserem K\u00fchlschrank f\u00fcr eine bestimmte Reglereinstellung zu machen. Um eine Vorhersage f\u00fcr einen beliebigen Datenpunkt zu machen, k\u00f6nnen wir mit den Koeffizienten wie folgt verfahren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def predict(x, vecW):\nreturn np.array(&#91;x,1]) @ vecW\n\nprint(predict(10, vecW))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Als Ergebnis erhalten wir f\u00fcr unseren Fall <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ f(10) = 6.105 $$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@ ist hier der Operator, der das Skalarprodukt zwischen zwei Vektoren ausrechnet, das in diesem Fall genau unserer Definition der Geradengleichung entspricht. Unsere Vorhersage k\u00f6nnen wir nun beliebig verwenden, oder einfach den Datenpunkt gemeinsam mit seinem Zielfunktionswert (in Gelb) anzeigen lassen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/data_no_outlier_regression_result_lsq-1024x1008.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24889\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R <br>Die von $f$ vorhergesagte Temperatur des K\u00fchlschranks f\u00fcr die Reglereinstellung $x = 10$.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Ausblick<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir haben ein einfaches maschinelles Lernverfahren kennen gelernt: Lineare Regression mithilfe des Verfahrens der kleinsten Quadrate. Wir haben gesehen, wie man dieses Verfahren in Python auf eindimensionale Daten anwendet, um eine Gerade zu lernen, die unsere Daten gut beschreibt. Wir haben diese Gerade auch genutzt, um einen Zielfunktionswert f\u00fcr einen unbekannten Datenpunkt vorherzusagen. Wer gerne eine allgemeinere Formulierung dieses Verfahrens sehen m\u00f6chte, dem sei unsere Reihe der <a href=\"https:\/\/www.mlai.cs.uni-bonn.de\/en\/teaching-1\/coding-nuggets\/ml2r-coding-nuggets\" target=\"_blank\" rel=\"noreferrer noopener\">ML2R Coding Nuggets<\/a> ans Herz gelegt. In einem weiteren Blogbeitrag werden wir sehen, wie man ein robusteres Trainingsverfahren umsetzen kann, das auch dann gut funktioniert, wenn unsere Trainingsdaten einige Ausrei\u00dfer enthalten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lineare Regression, eine grundlegende Technik im Maschinellen Lernen, liefert in Anwendungsf\u00e4llen schnell gute Ergebnisse. Wir zeigen praxisnah und mit Python Code-Schnipseln, wie man Lineare Regressionsmodelle mittels Methode der kleinsten Quadrate trainiert.<\/p>\n","protected":false},"author":16,"featured_media":4183,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog-category":[1416,390],"blog-tag":[1444,1615],"class_list":["post-4176","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-alle-blogbeitraege","blog-category-grundlagen","blog-tag-algorithmen","blog-tag-ueberwachtes-lernen"],"acf":[],"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog\/4176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/users\/16"}],"version-history":[{"count":0,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog\/4176\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/media\/4183"}],"wp:attachment":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/media?parent=4176"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog-category?post=4176"},{"taxonomy":"blog-tag","embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog-tag?post=4176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}