{ "cells": [ { "cell_type": "markdown", "id": "24877bfa-41a2-43ab-a77e-207b89db9f67", "metadata": {}, "source": [ "# Lineare Regression" ] }, { "cell_type": "markdown", "id": "c8ab019e-7274-43d6-95c8-54b21f42b730", "metadata": {}, "source": [ "Trainsingsdaten:\n", "$$\n", "\\{(x^{(i)}, y^{(i)}); i = 1, \\dots, d \\}\n", "$$\n", "\n", "$x^{(d)}$ ist dabei ein Zeilenvektor dessen Länge die Anzahl an **Features** ist. $n$ ist die Menge an **Trainsingsdaten**.\n", "Wir haben also mehrere Beispiele von Eingaben $x^{(n)}$ und Ausgaben $y^{(n)}$.\n", "Außerdem gilt: $x^{(0)} = (0, \\dots, 0)$ und $x_0=1$\n", "\n", "| Feature 1 | Fature 2 | Feature d | Result |\n", "|-----------|----------|-----------|--------|\n", "| $x^0_0$ | $x^1_0$ | $x^d_0$ | $y_0$ |\n", "| $x^0_1$ | $x^1_1$ | $x^d_1$ | $y_1$ |\n", "| $x^0_2$ | $x^1_2$ | $x^d_2$ | $y_2$ |\n", "| .... | .... | ... | ... |\n", "| $x^0_n$ | $x^1_n$ | $x^d_n$ | $y_n$ |\n", "\n", "Gesucht ist eine Funktion:\n", "$$\n", " h: X \\rightarrow Y\n", "$$\n", "Es kann die folgende Form für $h$ angenommen werden, wobei $\\vec{\\theta}$ Gewichte sind welche so berechnet werden, dass der quadratische Fehler zu allen Punkten im Datensatz möglichst gering ist. Allgemein gilt für $h$:\n", "$$\n", "h_\\theta(\\vec{x})=\\sum_{i=0}^{n}\\vec{\\theta}_i\\vec{x_i} = \\langle\\vec{\\theta},\\vec{x}\\rangle\n", "$$" ] }, { "cell_type": "markdown", "id": "7b6a7dd0-9389-4e27-9aeb-fc26d3e86121", "metadata": {}, "source": [ "## Kostenfunktion\n", "\n", "Die Kostenfunktion gibt an wie weit $h_\\theta(x)$ von $y$ entfernt ist (least-squares cost function):\n", "$$\n", "J(\\vec{\\theta})=\\frac{1}{2n}\\sum_{i=1}^d\\left(h_\\theta(x^{(i)}) - y^{(i)}\\right)^2\n", "$$\n", "Ziel ist es die **Kostenfunktion** zu *minimieren*!\n" ] }, { "cell_type": "markdown", "id": "625a9381-ca46-49f3-9913-0d9cddee5132", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "\n", "### Analytische Lösung\n", "\n", "Um das zu erreichen setzen wir den Gradienten der Kostenfunktion auf Null und lösen auf:\n", "$$\n", "\\Delta(J\\theta)= \\begin{pmatrix} \\frac{\\delta J}{\\delta \\theta_0} \\\\ \\vdots \\\\ \\frac{\\delta J}{\\delta \\theta_d} \\end{pmatrix} = 0\n", "$$\n", "\n", "Dafür definieren wir $J(\\theta)$ in Matrixschreibweise:\n", "$$\n", "J(\\vec{\\theta})=\\frac{1}{2n}\\sum_{i=1}^d\\left(h_\\theta(\\vec{x}^{(i)}) - \\vec{y}^{(i)}\\right)^2 \\\\\n", "= \\frac{1}{2n}(X\\vec{\\theta} - \\vec{y})^T(X\\vec{\\theta} - \\vec{y})\n", "$$\n", "wobei (beachte $x_0=1$) \n", "$$\n", "X=\\begin{bmatrix} 1 & (\\vec{x}^{(1)})^T \\\\ \\vdots & \\vdots \\\\ 1 & (\\vec{x}^{(n)})^T \\end{bmatrix} \\quad\n", "X\\vec{\\theta} = \\begin{bmatrix} (x^{(1)})^T\\vec{\\theta} \\\\ \\vdots \\\\ (x^{(n)})^T\\vec{\\theta} \\end{bmatrix}\n", "= \\begin{bmatrix} h_\\theta(x^{(1)}) \\\\ \\vdots \\\\ h_\\theta(x^{(n)}) \\end{bmatrix}\n", "= \\begin{bmatrix} \\vec{\\theta}_0 + \\vec{\\theta}_1 x^{(1)} \\\\ \\vdots \\\\ \\vec{\\theta}_0 + \\vec{\\theta}_1 x^{(n)} \\end{bmatrix}\n", "$$\n", "\n", "Aus dem Gradienten gleich Null:\n", "$$\n", "\\nabla J(\\theta) = \\frac{1}{n}(X^TX\\theta-X^T\\vec{y}) = 0\n", "$$\n", "folgt für die Gewichte:\n", "$$\n", "\\theta = (X^TX)^{-1}X^Ty\n", "$$" ] }, { "cell_type": "markdown", "id": "80c59be5-8373-4050-9c64-d5c3c8aeda15", "metadata": {}, "source": [ "Haben wir mehr Features als Datensätze $d > n$ sind einige Features redundant und linear von einander abhängig.\n", "$(X^TX)^{-1}$ ist dann nicht mehr invertierbar!\n", "\n", "Als Lösung können unnötige Features entfernt werden oder mehr Trainingsdaten gesammelt werden." ] }, { "cell_type": "markdown", "id": "308e24fd-29a9-470a-a3b9-ca4b4c38c746", "metadata": {}, "source": [ "### Programmieraufgabe (Least-Square-Error)" ] }, { "cell_type": "code", "execution_count": 1, "id": "77a09940-b050-4804-9454-8c43bdba5a44", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 56, "id": "2b468a67-b915-429c-be13-8db869b3320d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Price | \n", "BuildingArea | \n", "
---|---|---|
1 | \n", "1035000.0 | \n", "79.0 | \n", "
2 | \n", "1465000.0 | \n", "150.0 | \n", "
4 | \n", "1600000.0 | \n", "142.0 | \n", "
6 | \n", "1876000.0 | \n", "210.0 | \n", "
7 | \n", "1636000.0 | \n", "107.0 | \n", "
... | \n", "... | \n", "... | \n", "
13572 | \n", "650000.0 | \n", "79.0 | \n", "
13573 | \n", "635000.0 | \n", "172.0 | \n", "
13576 | \n", "1031000.0 | \n", "133.0 | \n", "
13578 | \n", "2500000.0 | \n", "157.0 | \n", "
13579 | \n", "1285000.0 | \n", "112.0 | \n", "
7130 rows × 2 columns
\n", "