{"id":4668,"date":"2021-09-08T03:30:10","date_gmt":"2021-09-08T03:30:10","guid":{"rendered":"https:\/\/lamarr-institute.org\/blog\/robuste-lineare-regression\/"},"modified":"2025-11-12T14:54:48","modified_gmt":"2025-11-12T14:54:48","slug":"robuste-lineare-regression","status":"publish","type":"blog","link":"https:\/\/lamarr-institute.org\/de\/blog\/robuste-lineare-regression\/","title":{"rendered":"Robuste Lineare Regression f\u00fcr Maschinelles Lernen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In einem weiteren Blogbeitrag dieser Serie haben wir die <a href=\"https:\/\/lamarr-institute.org\/de\/blog\/was-ist-eine-lineare-regression\/\" target=\"_blank\" rel=\"noreferrer noopener\">Lineare Regression<\/a> kennengelernt. Wir haben gesehen, dass wir mit der Methode der kleinsten Quadrate (engl. Least Squares) eine Regressionsgerade an Trainingsdaten anpassen k\u00f6nnen, um f\u00fcr neue, unbekannte Datenpunkte einen Zielfunktionswert vorherzusagen. Wir konnten so f\u00fcr unser Anwendungsbeispiel eine Gerade finden, die uns intuitiv sinnvoll erschien:<\/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-1024x918.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24556\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R<br>Auf der\u00a0$x$-Achse haben wir die Einstellungen des Temperaturreglers eines K\u00fchlschranks aufgetragen und auf der\u00a0$y$-Achse die gemessenen Temperaturen.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nehmen wir an, dass unsere Daten einem Versuch entstammen, in dem wir f\u00fcr verschiedene Einstellungen am Temperaturregler unseres K\u00fchlschranks die Temperatur in diesem gemessen haben. Hier erscheint es sinnvoll, dass ein linearer Zusammenhang besteht (je h\u00f6her die Reglerstufe, desto k\u00e4lter der K\u00fchlschrank). Es ist nachvollziehbar, dass mehrere unabh\u00e4ngige Temperaturmessungen bei derselben Einstellung nicht exakt dasselbe Ergebnis liefern. Dieses leichten Schwankungen sind ganz normal und man bezeichnet sie als <em>Rauschen<\/em>. Unser obiges Beispiel zeigt dieses Rauschen sehr sch\u00f6n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ausrei\u00dfer und Probleme beim Training<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Manchmal kann es jedoch sein, dass einige Messungen misslingen. Im folgenden Bild haben wir drei weitere Messungen vorgenommen. Wir sehen die drei Punkte, die nicht dem Trend der \u00fcbrigen Messungen folgen, am rechten oberen Rand der Darstellung. Solche Datenpunkte nennen wir <em>Ausrei\u00dfer<\/em>. Ausrei\u00dfer k\u00f6nnen in unserem K\u00fchlschrank entstehen, wenn etwa das Thermometer nicht richtig funktioniert oder eine Messung nicht richtig durchgef\u00fchrt wird (zum Beispiel, wenn die T\u00fcr zu lang offen steht).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/data-1024x1008.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24559\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R<br>Hier ist offensichtlich etwas schief gelaufen.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wir w\u00fcrden uns von unserem Lernverfahren w\u00fcnschen, dass es trotz der Pr\u00e4senz solcher Ausrei\u00dfer den globalen Trend der Daten identifiziert. Wenn wir jedoch das Verfahren der kleinsten Quadrate zum Training auf diesen Daten verwenden, um eine Gerade Gerade $f_{LSQ}(x)$ zu bestimmen, erhalten wir das folgende Ergebnis:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/regression_lsq-1024x863.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24561\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R<br>Die Methode der kleinsten Quadrate reagiert empfindlich auf unsere drei Ausrei\u00dfer.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Unsere Regressionsgerade $f_{LSQ}(x)$ wird hier scheinbar von den drei Ausrei\u00dfern &#8222;angezogen&#8220;. Wir k\u00f6nnen vermuten, dass unsere Vorhersagen \u00fcber die Temperatur in unserem K\u00fchlschrank f\u00fcr hohe Einstellungswerte unseres Reglers nicht mehr gut sein werden. Wir wollen uns nun damit besch\u00e4ftigen, woran dieses Verhalten liegt und wie man es (teilweise) beheben kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Robuste Lineare Regression mit kleinster Absoluter Abweichung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Im vorherigen <a href=\"https:\/\/lamarr-institute.org\/de\/blog\/was-ist-eine-lineare-regression\/\" target=\"_blank\" rel=\"noreferrer noopener\">Blogbeitrag<\/a> haben wir gesehen, dass das Verfahren der kleinsten Quadrate die folgende Fehlerfunktion minimiert:<\/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\">Der Abstand $ a \\cdot x + b \\; &#8211; \\; F(x) $ unserer Trainingspunkte $x$ von der Regressionsgerade, die durch die Parameter $a$ und $b$ beschrieben wird, geht hier <em>quadratisch<\/em> in die Fehlerfunktion ein. Das bedeutet, dass die &#8222;Kosten&#8220;, die wir f\u00fcr Trainingspunkte &#8222;bezahlen&#8220;, die weit von unserer Regressionsgeraden entfernt liegen, sehr hoch sind. Sie wachsen nicht nur linear, sondern quadratisch. Daher kommt es in unserem Beispiel dazu, dass es g\u00fcnstiger ist, die <em>kleinen<\/em> Abst\u00e4nde <em>vieler<\/em> Punkte zu unserer Geraden etwas zu vergr\u00f6\u00dfern, um den <em>gro\u00dfen<\/em> Abstand <em>weniger<\/em> Punkte etwas zu verringern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt viele verschiedene M\u00f6glichkeiten, unsere Gerade <em>robuster<\/em> an die Daten anzupassen. Eines dieser Verfahren verwendet die Methode der <a href=\"https:\/\/en.wikipedia.org\/wiki\/Least_absolute_deviations\" target=\"_blank\" rel=\"noreferrer noopener\">kleinsten absoluten Abweichung<\/a> (engl. least absolute deviations), die die Fehlerfunktion<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ E_{LAD}(a, b) = \\sum_{\\substack{x \\text{ in Trainingsmenge}}} \\left| a \\cdot x + b \\; &#8211; \\; F(x) \\right| $$ <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">minimiert. Diese Fehlerfunktion betrachtet, anstatt des quadrierten Abstands zur Geraden, den &#8222;normalen&#8220; (Euklidischen) Abstand. Wenn wir nun ein Verfahren verwenden, das diese Fehlerfunktion minimiert, erhalten wir auf unseren Trainingsdaten folgende Regressionsgerade $ f_{LAD}(x) $:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/lamarr-institute.org\/wp-content\/uploads\/regression_lad-1024x860.png\" alt=\"- Lamarr Institute for Machine Learning (ML) and Artificial Intelligence (AI)\" class=\"wp-image-24565\" title=\"\"><figcaption class=\"wp-element-caption\">\u00a9 ML2R<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Durch eine Ver\u00e4nderung unserer Fehlerfunktion haben wir also erreicht, dass die Gerade $ f_{LAD}(x) $, die diese Fehlerfunktion minimiert, unserer Erwartung wieder entspricht. Interessanterweise ist die Idee, Lineare Modelle mit der Methode der kleinsten absoluten Abweichung an Daten anzupassen, bereits sehr alt: Sie geht mindestens auf Boscovich (1757) und Laplace (1793) zur\u00fcck. Dies bedeutet, dass sie schon l\u00e4nger bekannt ist, als die besser bekannte Methode der kleinsten Quadrate, die von Gauss (1801) und Legendre (1805) beschrieben wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warum nutzen wir also \u00fcblicherweise die Methode der kleinsten Quadrate, wenn sie doch beim Vorliegen von Ausrei\u00dfern versagt? Die Antwort hierauf ist, dass die Optimierung von $E_{LAD}$ aufw\u00e4ndiger ist, als die Optimierung von $E_{LSQ}$. Dies liegt daran, dass f\u00fcr die Minimierung von $E_{LAD}$ nur iterative Verfahren bekannt sind, die in der Regel viele Rechenschritte ben\u00f6tigen, um eine optimale L\u00f6sung zu finden. F\u00fcr die optimale L\u00f6sung von $E_{LSQ}$ existiert hingegen eine einfache Formel. Wir wollen nun aber dennoch zeigen, wie wir ein gegen Ausrei\u00dfer robustes Regressionsverfahren praktisch mit Hilfe von Python und den Paketen <em>numpy<\/em> und <em>scipy<\/em> umsetzen k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Praktische Umsetzung einer Robusten Linearen Regression<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir gehen im Folgenden wieder davon aus, dass wir eine beliebige Python Umgebung zur Verf\u00fcgung haben, in der die Pakete Numpy und Scipy installiert sind. Zum Beispiel ein lokal oder auf <a href=\"https:\/\/colab.research.google.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">google colab<\/a> laufendes Jupyter Notebook. Beginnen wir mit dem Import von <em>numpy<\/em>, <em>scipy<\/em> und dem Laden unserer Daten, die als Textdatei vorliegen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy as np\nimport scipy as sp\n\ndata = np.loadtxt('data-outlier.csv', delimiter=', ')\n\nvecX = data&#91;0]\nvecY = data&#91;1]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Optimierung von $E_{LAD}$ kann mithilfe von <a href=\"https:\/\/de.wikipedia.org\/wiki\/Lineare_Optimierung\" target=\"_blank\" rel=\"noreferrer noopener\">Linearer Optimierung<\/a> umgesetzt werden. Im Kern geht es darum, ein System von (linearen) Ungleichungen aufzustellen, die definieren, welche Bedingungen unsere beiden Geradenparameter $a$ und $b$ erf\u00fcllen m\u00fcssen und die Geradenparameter zu finden, die eine (lineare) Zielfunktion minimieren. Gl\u00fccklicherweise kann unsere Fehlerfunktion $E_{LAD}$ genau in der notwendigen Weise dargestellt werden. Die Hintergr\u00fcnde zu den notwendigen Umformungen haben wir in zwei Beitr\u00e4gen unserer <a href=\"https:\/\/www.mlai.cs.uni-bonn.de\/en\/teaching-1\/coding-nuggets\/ml2r-coding-nuggets-1\/linear-programming-for-robust-regression.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Coding Nuggets Reihe<\/a> dargestellt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>matF = np.vstack((np.ones_like(vecX), vecX))\n\nmatA = np.zeros((2*n, m+n))\nmatA&#91;:n,:m] = +matF.T\nmatA&#91;n:,:m] = -matF.T\nmatA&#91;:n,m:] = -np.eye(n)\nmatA&#91;n:,m:] = -np.eye(n)\n\nvecB = np.zeros(2*n)\nvecB&#91;:n] = +vecY\nvecB&#91;n:] = -vecY\nvecC = np.hstack((np.zeros(m), np.ones(n)))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Variablen <em>m<\/em> und <em>n<\/em> stehen jeweils f\u00fcr die Dimensionalit\u00e4t und Anzahl der Messpunkte in unserem Datenset. Wir suchen nun nach dem Vektor <em>vecW<\/em>, der den Ausdruck <em>vecW.T @ vecC<\/em> minimiert, unter der Bedingung, dass der Vektor <em>matA @ vecW<\/em> zeilenweise nie gr\u00f6\u00dfer als der Vektor <em>vecB<\/em> ist. Hierbei schreiben wir <em>@<\/em> f\u00fcr die \u00fcbliche Matrix-Vektor-Multiplikation. Eine Methode, die einen solchen Vektor vecW identifiziert, ist bereits im Paket <em>scipy.optimize<\/em> implementiert und kann wie folgt aufgerufen werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>result = sp.optimize.linprog(vecC, A_ub=matA, b_ub=vecB, bounds=(None,None))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Objekt <em>result<\/em> enth\u00e4lt neben unserem gesuchten Ergebnis noch weitere Informationen, auf die wir hier nicht genauer eingehen wollen. Unsere gesuchten Geradenparameter k\u00f6nnen wir nun aber wie folgt auslesen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vecW = result.x&#91;:m]\nprint ('a =',vecW&#91;0])\nprint ('b =',vecW&#91;1])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies liefert uns die Parameter<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$$ a = -0.371 \\quad b = 9.976 $$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">die zugeh\u00f6rige Gerade $ f_{LAD}(x) $ ist in Gr\u00fcn dargestellt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ausblick und weitere Details<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Beitrag haben wir gesehen, wie wir eine Regressionsgerade mithilfe der Methode der kleinsten absoluten Abweichung bestimmen k\u00f6nnen. Diese Methode erlaubt eine gr\u00f6\u00dfere Robustheit gegen\u00fcber Ausrei\u00dfern in den Daten.<br>Wir haben gesehen, dass unsere angepasste Fehlerfunktion $E_{LAD}$ mithilfe von Linearer Optimierung gel\u00f6st werden kann und gezeigt, wie dies in Python praktisch umgesetzt werden kann. In unserer <a href=\"https:\/\/www.mlai.cs.uni-bonn.de\/en\/teaching-1\/coding-nuggets\/ml2r-coding-nuggets\" target=\"_blank\" rel=\"noreferrer noopener\">Coding Nuggets Reihe<\/a> gehen wir in einem Artikel zur <a href=\"https:\/\/www.mlai.cs.uni-bonn.de\/en\/teaching-1\/coding-nuggets\/ml2r-coding-nuggets-1\/linear-programming-for-robust-regression.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Robusten Linearen Regression<\/a> genauer auf technische Details ein. Ein weiterer Artikel beleuchtet <a href=\"https:\/\/www.mlai.cs.uni-bonn.de\/en\/teaching-1\/coding-nuggets\/ml2r-coding-nuggets-1\/linear-programming-for-robust-regression.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Grundlagen zu Linearer Optimierung<\/a> in Python. Robuste Regression ist in der Praxis des Maschinellen Lernens hochrelevant und wird h\u00e4ufig im Kontext von Signalverarbeitung, Computer Vision und Wissensentdeckung verwendet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit der Methode der kleinsten absoluten Abweichung kann eine Regressionsgerade bestimmt und ein Lineares Regressionsmodell so trainiert werden, dass es robust gegen\u00fcber Unregelm\u00e4\u00dfigkeiten \u2013 sogenannten \u201eAusrei\u00dfern\u201c \u2013 in Daten ist.<\/p>\n","protected":false},"author":16,"featured_media":4677,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog-category":[1416,396],"blog-tag":[1444,1590,1615],"class_list":["post-4668","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-alle-blogbeitraege","blog-category-forschung","blog-tag-algorithmen","blog-tag-robustheit","blog-tag-ueberwachtes-lernen"],"acf":[],"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog\/4668","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\/4668\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/media\/4677"}],"wp:attachment":[{"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/media?parent=4668"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog-category?post=4668"},{"taxonomy":"blog-tag","embeddable":true,"href":"https:\/\/lamarr-institute.org\/de\/wp-json\/wp\/v2\/blog-tag?post=4668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}