Skip to content

Instantly share code, notes, and snippets.

@fkohlgrueber
Last active June 10, 2017 19:15
Show Gist options
  • Save fkohlgrueber/f22f47df90ebd34c3ca332ffc45a943e to your computer and use it in GitHub Desktop.
Save fkohlgrueber/f22f47df90ebd34c3ca332ffc45a943e to your computer and use it in GitHub Desktop.
KogSys Aufgabenblatt 2
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# KogSys Aufgabenblatt 2\n",
"\n",
"## Aufgabe 1\n",
"\n",
"### a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ergebnisse der 15 Zeitschätzungen:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"hide_input": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x = [5.665, 5.113, 5.911, 6.247, 5.986, 5.635, 5.537, 5.499, 5.33, 5.352, 5.332, 5.461, 5.423, 5.702, 5.42]\n"
]
}
],
"source": [
"result = [5.665024518966675, 5.112703084945679, 5.910599708557129, 6.246866703033447, \n",
" 5.986047983169556, 5.634849309921265, 5.537091493606567, 5.498831748962402, \n",
" 5.330343961715698, 5.351691246032715, 5.331977367401123, 5.461490631103516, \n",
" 5.423303127288818, 5.701548337936401, 5.4195637702941895]\n",
"test_result = [round(i, 3) for i in result] \n",
"print(\"x = \" + str(test_result))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### b)\n",
"\n",
"Berechne Erwartungswert $\\mu_1$, Varianz $\\sigma_1^2$ und Standardabweichung $\\sigma_1$:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true,
"hide_input": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"μ = 5.574 σ² = 0.081 σ = 0.284\n"
]
}
],
"source": [
"from math import sqrt, exp, pi, log\n",
"E = sum(test_result) / len(test_result) # mean\n",
"V = sum((x - E)**2 for x in test_result) / len(test_result) # variance\n",
"D = sqrt(V) # standard deviation\n",
"print(f'μ = {E:.3f}', f'σ² = {V:.3f}', f'σ = {D:.3f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\\begin{eqnarray}\n",
"\\mu_1 &=& \\frac{1}{n}\\sum_{i=1}^nx_i \\approx 5.574\\\\\n",
"\\sigma_1^2 &=& \\frac{1}{n}\\sum_{i=1}^n(x_i-\\mu_1) \\approx 0.081\\\\\n",
"\\sigma_1 &=& \\sqrt{\\sigma_1^2} \\approx 0.284\n",
"\\end{eqnarray}$$\n",
"\n",
"### c)\n",
"\n",
"> Neue Klasse $\\omega_2$ mit Erwartungswert $\\mu_2 = 5.5$ und Varianz $\\sigma^2_2 = 1$.\n",
"\n",
"> Ergebnis des neuen Versuchs: $$x' = 5.942$$\n",
"\n",
"> Wahrscheinlichkeiten der Klassen: $$P(\\omega_1) = 0.3 \\\\ P(\\omega_2) = 0.7$$\n",
"\n",
"> Bayes Rule: $$P(\\omega_j\\mid x) = \\frac{p(x\\mid\\omega_j)P(\\omega_j)}{P(\\omega_j)} $$\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true,
"hide_input": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.18223426923490194\n",
"0.25327093418347646\n"
]
}
],
"source": [
"x_new = 5.942\n",
"classes = ((E, D, 0.3), (5.5, 1, 0.7))\n",
"\n",
"for μ, σ, p in classes:\n",
" solution = 1/(sqrt(2*pi)*σ) * exp(-1/2*((x_new-μ)/σ)**2) * p\n",
" print(solution)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wähle $j\\in\\{1, 2\\}$ sodass $P(\\omega_j\\mid x)$ maximal ist:\n",
"$$\\arg \\max_j P(\\omega_j\\mid x) = \\arg \\max_j \\frac{p(x\\mid\\omega_j)P(\\omega_j)}{P(\\omega_j)} = \\arg \\max_j p(x\\mid\\omega_j)P(\\omega_j) $$\n",
"\n",
"\n",
"Für $j=1$:\n",
"$$\\begin{eqnarray}\n",
"p(x\\mid\\omega_1)P(\\omega_1) &=& \\frac{1}{\\sqrt{2\\pi}\\cdot \\sigma_1}\\cdot e^{-\\frac12\\cdot (\\frac{x'-\\mu_1}{\\sigma_1})^2} \\cdot P(\\omega_1) \\\\\n",
" &\\approx& \\frac{1}{\\sqrt{2\\pi}\\cdot 0.2841}\\cdot e^{-\\frac12\\cdot (\\frac{5.942-5.5742}{0.2841})^2} \\cdot 0.3 \\\\\n",
" &\\approx& 0.182\n",
"\\end{eqnarray}$$\n",
"\n",
"Für $j=2$:\n",
"$$\\begin{eqnarray}\n",
"p(x\\mid\\omega_2)P(\\omega_2) &=& \\frac{1}{\\sqrt{2\\pi}\\cdot \\sigma_2}\\cdot e^{-\\frac12\\cdot (\\frac{x'-\\mu_2}{\\sigma_2})^2} \\cdot P(\\omega_2) \\\\\n",
" &\\approx& \\frac{1}{\\sqrt{2\\pi}\\cdot 1}\\cdot e^{-\\frac12\\cdot (\\frac{5.942-5.5}{1})^2} \\cdot 0.7 \\\\\n",
" &\\approx& 0.253\n",
"\\end{eqnarray}$$\n",
"\n",
"Daraus folgt:\n",
"$$\\arg \\max_j P(\\omega_j\\mid x) = \\arg \\max_j p(x\\mid\\omega_j)P(\\omega_j) = 2$$\n",
"\n",
"Damit wird $x' = 5.942$ der Klasse $\\omega_2$ zugeordnet."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Aufgabe 2\n",
"\n",
"### a)\n",
"\n",
"$$\\begin{eqnarray}\n",
"P_{Fehler}(\\theta) &=& \\int_\\theta^\\inf p(x\\mid\\omega_1)P(\\omega_1) dx + \\int_{-\\inf}^\\theta p(x\\mid\\omega_2)P(\\omega_2) dx \\\\\n",
" &=& \\frac{3}{5}\\int_\\theta^\\inf \\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x+1)^2}{2}} dx + \n",
" \\frac{2}{5}\\int_{-\\inf}^\\theta \\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x-3)^2}{2}} dx\n",
"\\end{eqnarray}$$\n",
"\n",
"### b)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true,
"hide_input": true
},
"outputs": [
{
"data": {
"text/plain": [
"1.1013662770270412"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"log(3/2)/4+1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Schnittpunkt berechnen:\n",
"$$\\begin{eqnarray}\n",
"p(x\\mid\\omega_1)P(\\omega_1) &=^!& p(x\\mid\\omega_2)P(\\omega_2) \\\\\n",
"\\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x+1)^2}{2}} \\cdot \\frac35 &=& \\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x-3)^2}{2}} \\cdot \\frac25 \\\\\n",
"3 \\cdot e^{-\\frac{(x+1)^2}{2}} &=& 2 \\cdot e^{-\\frac{(x-3)^2}{2}} \\\\\n",
"\\frac32 &=& e^{\\frac{(x+1)^2-(x-3)^2}{2}} \\\\\n",
"\\frac32 &=& e^{4x-4} \\\\\n",
"\\ln{\\frac32} &=& 4(x-1) \\\\\n",
"x &=& \\frac14 \\cdot \\ln{\\frac32} + 1 \\approx 1.101 = \\theta_{opt}\n",
"\\end{eqnarray}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### c)\n",
"\n",
"> Standardnormalverteilung: $$\\Phi_{0;1}(z) = \\frac{1}{\\sqrt{2\\pi}} \\int_{-\\inf}^z e^{-\\frac12 t^2}$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true,
"hide_input": true
},
"outputs": [
{
"data": {
"text/plain": [
"0.02220399999999998"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3/5*(1-0.98214)+2/5*(1-0.97128)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\\begin{eqnarray}\n",
"P_{Fehler}(\\theta) &=& \\frac{3}{5} \\int_\\theta^\\inf \\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x+1)^2}{2}} dx + \n",
" \\frac{2}{5} \\int_{-\\inf}^\\theta \\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{(x-3)^2}{2}} dx \\\\\n",
" &=& \\frac{3}{5} \\frac{1}{\\sqrt{2\\pi}} \\int_{\\theta+1}^\\inf e^{-\\frac12 x^2} dx + \n",
" \\frac{2}{5} \\frac{1}{\\sqrt{2\\pi}} \\int_{-\\inf}^{\\theta-3} e^{-\\frac12 x^2} dx \\\\\n",
"P_{Fehler}(1.101) &=& \\frac{3}{5} \\frac{1}{\\sqrt{2\\pi}} \\int_{2.101}^\\inf e^{-\\frac12 x^2} dx + \n",
" \\frac{2}{5} \\frac{1}{\\sqrt{2\\pi}} \\int_{-\\inf}^{-1.899} e^{-\\frac12 x^2} dx \\\\\n",
" &=& \\frac{3}{5} ( 1- \\frac{1}{\\sqrt{2\\pi}} \\int_{-\\inf}^{2.101} e^{-\\frac12 x^2} dx ) + \n",
" \\frac{2}{5} ( 1- \\frac{1}{\\sqrt{2\\pi}} \\int_{-\\inf}^{1.899} e^{-\\frac12 x^2} dx ) \\\\\n",
" &=& \\frac{3}{5} ( 1- \\Phi(2.101)) + \\frac{2}{5} ( 1- \\Phi(1.899)) \\\\\n",
" &\\approx& \\frac{3}{5} ( 1- 0.98214) + \\frac{2}{5} ( 1- 0.97128) \\\\\n",
" &\\approx& 0.022\n",
"\\end{eqnarray}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### d)\n",
"\n",
"Die tatsächliche Verteilung der Daten weicht von der geschätzten Wahrscheinlichkeitsdichtefunktion ab."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Aufgabe 3"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true,
"hide_input": true
},
"outputs": [
{
"data": {
"text/plain": [
"[[5.0, 5.0, '^', 0.0],\n",
" [5.2, 4.7, 'o', 0.36],\n",
" [4.4, 5.0, 'x', 0.6],\n",
" [5.5, 5.8, 'x', 0.94],\n",
" [5.0, 4.0, 'o', 1.0],\n",
" [4.5, 6.2, 'x', 1.3],\n",
" [6.5, 4.0, 'o', 1.8],\n",
" [5.0, 3.0, 'o', 2.0],\n",
" [3.5, 7.0, 'x', 2.5],\n",
" [7.5, 6.0, 'x', 2.69],\n",
" [2.0, 4.0, 'x', 3.16],\n",
" [3.5, 2.0, 'x', 3.35],\n",
" [8.5, 4.0, 'o', 3.64],\n",
" [7.5, 2.0, 'o', 3.91],\n",
" [8.5, 8.0, 'x', 4.61]]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# data extracted from pdf image (coordinates in pixels)\n",
"\n",
"x = 1069\n",
"y = 625\n",
"\n",
"points = [[214, 250, 'x'],\n",
" [374, 125, 'x'],\n",
" [374, 437, 'x'],\n",
" [470, 312, 'x'],\n",
" [481, 388, 'x'],\n",
" [534, 312, '^'],\n",
" [534, 187, 'o'],\n",
" [534, 250, 'o'],\n",
" [556, 293, 'o'],\n",
" [588, 362, 'x'],\n",
" [695, 250, 'o'],\n",
" [801, 125, 'o'],\n",
" [801, 376, 'x'],\n",
" [908, 250, 'o'],\n",
" [908, 500, 'x']\n",
" ]\n",
"conv_points = []\n",
"for raw_x, raw_y, marker in points:\n",
" _x = round(raw_x*10/x, 1)\n",
" _y = round(raw_y*10/y, 1)\n",
" d = round(sqrt((_x-5)**2+(_y-5)**2), 2)\n",
" conv_points.append([_x, _y, marker, d])\n",
"sorted(conv_points, key=lambda x:x[-1])"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"hide_input": true
},
"outputs": [
{
"data": {
"image/png": "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\nu7R582ZlZ2crKytLmzdv1osvvihJuvTSS/XSSy9pZGTkbN8qFpn8/Hx5vV7V19czc8YidmIbM1O0\nMXPPWqu6ujplZWUpJyfH7XKiTjxfurq69Mc//lE333yzJCklJUWBQGBW9sP5goXg5PZxZGREAwMD\nGhkZUX9/v5YuXTqbu7tH0v9yeH2LpD3W2g5rbaekPZK2jr/2n5I+b4xJctrBjAOzMSbRGFNtjPnd\nTNeZDzv+cESvHWmb9NxrR9q04w9H9Kc//UkbNmyYsk59fb2qq6t18cUXT3mtqalJy5Yti35fXFw8\nbbA+0f33368rr7xShYWFp1zGabsJCQkqLy/Xu+++67gfxA5jjM477zyFw+HThiW47+nqJl1y98sq\n/fvndMndL+vp6rH/uye3McYYff7zn9eGDRv0wAMPTLst2pi5d/ToURljVFRU5Mr+Z3K+fPTRR8rL\ny9NNN92k9evX65ZbblFfX9+023vttde0Zs0affGLX9TBgwdPu3/OF8ynmZzvRUVF+ru/+zudd955\nKiwslN/v1xe+8IVpt3em57ukfEnPWmudfpkWSTpxmqrG8edkrY1IqpW01mknZ9LD/LeSPjiD5efF\nmmK/vvOb6mhofu1Im77zm2qtKfaro6NDmZmZk5bv7e3Vl7/8Zf3sZz+Tz+c75/03NzfriSee0G23\n3XZO28nPz1dzc/M514PFIyEhQWVlZWpra1NnZ6fb5eAUnq5u0g+eel9NoQFZSU2hAf3gqff1dHXT\nlDbm1Vdf1TvvvKMXXnhBP//5z/XHP/7xnPdPG3NmgsGguru7tWLFCldmxJjp+TIyMqK3335b3/72\nt1VdXa309HTdfffdU7Z34YUXqqGhQe+9955uu+02XX311Y7753zBfJrp+d7Z2alnnnlGH330kZqb\nm9XX16df//rXU7Z3Nue7xoZY/PM5vpXjkhy7vGcUmI0xxZK2SXrwHAuadZ8qy9X9X1uv7/ymWvfu\nrtF3flOt+7+2Xp8qy1VSUpIikUh02XA4rC9/+cv6+te/rmuvvXba7RUVFU2aK7exsdGxl6K6ulq1\ntbUqLy9XSUmJ+vv7VV5efsbbHRwclMfjOaP3jsUvOTlZ5eXlamhoUH9/v9vlYBr37KrRQHh00nMD\n4VHds6tmShsz8X86Pz9f11xzjfbt2zdle7Qxc6enp0fNzc0qLy9XYmKiKzXM9HwpLi5WcXFx9JPO\n6667btoLQH0+X/TCvSuuuELhcFhtbW1TlpvA+YL5NNPz/aWXXlJpaany8vKUnJysa6+9Vq+99tqU\n7Z3N+S4pTVKtMaZektcYUzvNok2Slp3wffH4cxPSJA04vdeZ9jD/TGNjQyKnWsAY801jzH5jzP75\nnmf2U2W5uuHi8/RPL9fqhovP06fKciVJlZWVqqurkzQ2pu3mm2/WqlWr9L3vfe+U27ryyiv1y1/+\nUtZavfHGG/L7/dGPtS6//PIpH51u27ZNra2tqq+vV319vbxer2prp/6stmzZot27d6uzs1OdnZ3a\nvXu3tmzZEn390KFDqqqqOudjgcXH6/Vq2bJlOnLkiMLhsNvl4CTNoenb0ObQwKQ2pq+vLzpdYF9f\nn3bv3j3t/2namLkxNDSkuro6lZaWKi0tzbU6Znq+FBQUaNmyZaqpqZEk/f73v9fq1aunrNfa2hq9\nzmHfvn2KRCLRcdmcL3DbTM/38847T2+88Yb6+/tlrdXvf/97rVq1asp6Z3O+S3rXWltirS2R1G+t\nnfoXorRL0heMMVnGmCxJXxh/bsInJB1weq+nDczGmC9JOm6tfctpOWvtA9bajdbajfN9J6XXjrTp\n12826PbLyvXrNxuiwzO2bdumvXv3ShobS/OrX/1KL7/8cnS6kueff16StGPHDu3YsUPS2F80K1as\nUHl5uW699Vb94he/kDR2W9Xa2lplZ2fPuK79+/frlltukSRlZ2frRz/6kS666CJddNFFuvPOO6Pb\nOnbsmDwejwoKCmbleGDxyc7OVk5Ojg4fPsyFNgvM0sD0vWxLA55JbcyxY8f06U9/WmvXrtWmTZu0\nbds2bd06dk0JbczcGh4e1qFDh1RYWDgrQ+3OxUzPF0n653/+Z33961/XmjVr9M477+iHP/yhpMnn\ny5NPPqmqqiqtXbtWt99+ux577DEZYzhfsCDM9Hy/+OKLdd111+nCCy/UBRdcoEgkom9+85uS5u58\nN8ZsNMY8KEnW2g5J/6+k/xp//Hj8ORljlkgasNa2Om7vdFfoG2N+IukbkkY01mXtk/SUtfaGU62z\nceNGu3///hm/qXMxMWZ5YhjGid+XesPavn279uzZc877OXDggB566CHde++9s1D1ZPfdd598Pl/0\namnEJ2utmpqa1NPTo4qKCiUlOV6wi3kyMUbvxI8dPcmJ+sm1F+jiggTaGJeFw2HV1NQoNzd3QQQ8\n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\nqqpqTsKyJAUCAd14441zsm0AiAen7WE2xqyRtFNSosYC9uPW2h87rUMPMwAAAObafPUwn3YMs7X2\nPUnr57oQAAAAYCHiTn8AAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAA\nADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADgg\nMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMA\nAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAO\nCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwA\nAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACA\nAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIz\nAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA\n4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDA\nDAAAADggMAMAAAAOCMwAAACAAwIzAAAA4IDADAAAADggMAMAAAAOCMwAAACAAwIzMM5aq8suu0zd\n3d0aHBzUpk2btHbtWp1//vn6h3/4h2nX2bt3r/x+v9atW6d169bpxz/+8Wn38/Wvf12VlZWqqqrS\nX//1XyscDk+73M6dO1VRUaGKigrt3Lkz+vz111+vw4cPn92bBIA4c2LbXlNTE22v161bJ5/Pp5/9\n7GdT1qFtxxTW2ll/bNiwwQKLze9+9zv73e9+11prbSQSsT09PdZaa4eHh+2mTZvs66+/PmWdV155\nxW7btu2M9vPcc8/ZSCRiI5GIvf766+0vfvGLKcu0t7fb0tJS297ebjs6Omxpaant6Oiw1lq7d+9e\ne8stt5zp2wOAuHRi236ikZERu2TJEltfXz/lNdr2xUPSfjsHWfbkBz3MwLhHHnlEV111lSTJGKOM\n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\n+P8Be26gu9prTiUAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x2b68d24a748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"\n",
"fig, ax = plt.subplots(figsize=(12, 12))\n",
"for x, y, m, d in conv_points:\n",
" plt.plot(x, y, marker=m, color='C0')\n",
" plt.annotate(\" ({}, {})\".format(x, y), [x, y])# , backgroundcolor=[1,1,1,0.2])\n",
"ax.add_patch(matplotlib.patches.Circle([5,5], radius=0.5, facecolor=[1,1,1,0], edgecolor=[.8,.8,.8]))\n",
"ax.add_patch(matplotlib.patches.Circle([5,5], radius=1.5, facecolor=[1,1,1,0], edgecolor=[.8,.8,.8]))\n",
"ax.text(5.2, 5.5, \"r = 0.5\", color=[.5,.5,.5])\n",
"ax.text(5.2, 6.5, \"r = 1.5\", color=[.5,.5,.5])\n",
"ax.set_aspect('equal')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
"Für `k=1`: 1x \"O\" = O\n",
"Für `k=5`: 2x \"O\", 3x \"X\" = X\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Aufgabe 5 (updated version)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"hide_input": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration 0: w: [1.0, -1.0], b: 0, e: [[-0.4, 0.8, True], [-0.8, -0.2, True]]\n",
"Iteration 1: w: [-0.2, -0.4], b: 2, e: [[0.3, 1.6, False], [-0.4, 1.5, False]]\n",
"Iteration 2: w: [-0.1, -3.5], b: 0, e: [[-0.4, 0.8, True]]\n",
"Iteration 3: w: [-0.5, -2.7], b: 1, e: [[-0.4, 0.8, True]]\n",
"Iteration 4: w: [-0.9, -1.9], b: 2, e: []\n"
]
}
],
"source": [
"from sympy import Rational\n",
"data = [[Rational('-.4'), Rational('.8'), True], [Rational('-.8'), Rational('-.2'), True], \n",
" [Rational('.3'), Rational('1.6'), False], [Rational('-.4'), Rational('1.5'), False]]\n",
"\n",
"b = 0\n",
"w = [1, -1]\n",
"e = ['dummy']\n",
"iterations = [w+[b]]\n",
"\n",
"def g(input):\n",
" return (w[0]*input[0] + w[1]*input[1] + b) >= 0\n",
"\n",
"def calc_e():\n",
" return list(filter(lambda x: g(x) != x[-1], data))\n",
"\n",
"def str_e():\n",
" return [[float(i) if not isinstance(i, bool) else i for i in el] for el in e]\n",
"\n",
"e = calc_e()\n",
"\n",
"while len(e):\n",
" print(\"Iteration {}: w: {}, b: {}, e: {}\".format(len(iterations)-1, [float(i) for i in w], b, str_e()))\n",
" # update weights and threshold\n",
" for i in e:\n",
" delta = -1 if i[-1] else 1\n",
" w[0] -= delta * i[0]\n",
" w[1] -= delta * i[1]\n",
" b -= delta\n",
" iterations.append(w+[b])\n",
" e = calc_e()\n",
"print(\"Iteration {}: w: {}, b: {}, e: {}\".format(len(iterations)-1, [float(i) for i in w], b, str_e()))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"hide_input": true
},
"outputs": [
{
"data": {
"image/png": "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\n47skfSbEdY2mmJ/7ckl3uz7PSTrSzI6LeZsi5Zz7qaS3R3lK1PuomG2KnHNum3Nube7x+5I2S5o8\n5Gmh7avER3uIP1Lfq9dQkyVtzfu4S8N3YhycpCfNbI2ZLY57YxT9fmpwzm3LPd4uqWGE54W9n4r5\nuaPeN8Wu78zcr9c/NrNTQtyeYiT131ls+8jMpkn6pKTnh3wptH1VE8RCKmVmT0pqLPClm5xzK3LP\nuUlSt6R7krJNRTjbOfcbMztW0hNm1pE7cohzmwI12jblf+Ccc2Y20qVKge6nFFkraYpz7gMzu0TS\ng5Kmx7xNSRPbPjKzwyXdJ+nPnXPvRbFOKSHRds59arSvm9nVki6VdJHLnTAa4jeSTsj7uCn3udC2\nqchl/Cb3351m9oD6fiUuO0YBbFOk+8nMdpjZcc65bblfDXeOsIxA91MBxfzcge+bSrcpPwTOuUfM\n7F/MbKJzLq77bUS9j8YU1z4ys1r1Bfse59z9BZ4S2r5K/OkRM1so6UZJlznn9o7wtBckTTezE81s\nnKTPS3ooqm0sxMwOM7MJ/Y/VN6BacAQ8QlHvp4ckXZV7fJWkYb8NRLSfivm5H5L0h7lR/zMkvZt3\naicMY26TmTWameUez1Pfv9fdIW7TWKLeR2OKYx/l1vcdSZudc/84wtPC21dRjrqW80fSa+o7N7Qu\n9+eO3OePl/RI3vMuUd8o7uvqO10Q5jYtUt85qgOSdkh6bOg2qe+qgPW5P5uSsE0x7KdjJP1E0quS\nnpR0dFz7qdDPLemLkr6Ye2yS/k/u6y9plKuCItymL+X2yXr1DcKfGfL2fE/SNkmHcn+X/jgB+2is\nbYp0H+XWebb6xmE25HXpkqj2FTMiAcAjiT89AgD4CNEGAI8QbQDwCNEGAI8QbQDwCNEGAI8QbQDw\nCNEGAI/8f/Fxrt6VKTZpAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x2b68baf2978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig, ax = plt.subplots(figsize=(12, 12))\n",
"\n",
"def gen_y(w, x):\n",
" return -(w[0]*x+w[2])/w[1]\n",
"\n",
"for p in data:\n",
" plt.plot(p[0], p[1], color='black' , marker='s'if p[2] else 'x')\n",
"\n",
"x_values = [-2, 2]\n",
"for idx, it in enumerate(iterations):\n",
" plt.plot(x_values, [gen_y(it, x) for x in x_values], label='Iteration '+str(idx))\n",
"\n",
"plt.legend()\n",
"ax.set_aspect('equal')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Online-Fragen\n",
"\n",
"1. Wie lautet der optimale Schwellwert $\\theta_{opt}$? - **1.101**\n",
"2. Wie wird die Raute für $k = 5$ klassifiziert? - **Kreuz**\n",
"3. Welche der folgenden Aussagen sind für die jeweils angegebene Abbildung wahr?\n",
" 1. Abbildung a) Die beiden Klassen sind linear separierbar. - **Falsch**\n",
" 2. Abbildung b) Die beiden Klassen lassen sich mit einem einfachen Perzeptron trennen. - **Falsch**\n",
" 3. Abbildung b) Die beiden Klassen lassen sich mit einem Multi Layer Perceptron mit einer versteckten Schicht, die aus zwei Neuronen besteht, trennen. - **Richtig?**\n",
" 4. Abbildung c) Die beiden Klassen sind linear separierbar. - **Falsch**\n",
" 5. Abbildung c) Nach einer Umrechnung in Polarkoordinaten (ohne Verschiebung) sind die beiden Klassen linear separierbar. - **Falsch**\n",
" 6. Abbildung d) Die beiden Klassen lassen sich mit einem einfachen Perzeptron trennen. - **Richtig**\n",
"4. Welchen Wert erhält man für $\\{w_{n1}, w_{n2}, b_n\\}$ wenn der Algorithmus terminiert? - **[-0.9, -1.9, 2]**"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.0"
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "251px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false,
"widenNotebook": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment