From 168cca035efb65a016af724839bc1d623f876e4c Mon Sep 17 00:00:00 2001
From: Uwe Schmitt <uwe.schmitt@id.ethz.ch>
Date: Fri, 3 May 2019 23:56:37 +0200
Subject: [PATCH] more memes

---
 00_numpy_pandas_matplotlib_intro.ipynb        | 167 ++++++++++--------
 01_introduction.ipynb                         |   8 +-
 02_classification.ipynb                       |  20 ++-
 03_overfitting_and_cross_validation.ipynb     |   2 +-
 04_measuring_quality_of_a_classifier.ipynb    |  21 ++-
 05_classifiers_overview.ipynb                 |   7 +
 ...ines_and_hyperparameter_optimization.ipynb |  18 +-
 07_regression.ipynb                           |  87 ++++-----
 setup_eth_course_rooms/install.sh             |  21 ++-
 setup_eth_course_rooms/setup_anaconda.sh      |   2 +-
 setup_eth_course_rooms/update_installer.sh    |  30 ++--
 11 files changed, 226 insertions(+), 157 deletions(-)

diff --git a/00_numpy_pandas_matplotlib_intro.ipynb b/00_numpy_pandas_matplotlib_intro.ipynb
index 594e8e7..1a77afb 100644
--- a/00_numpy_pandas_matplotlib_intro.ipynb
+++ b/00_numpy_pandas_matplotlib_intro.ipynb
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 66,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [
     {
@@ -113,7 +113,7 @@
        "<IPython.core.display.HTML object>"
       ]
      },
-     "execution_count": 66,
+     "execution_count": 2,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -162,7 +162,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 67,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
@@ -190,7 +190,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 68,
+   "execution_count": 4,
    "metadata": {
     "scrolled": true
    },
@@ -300,7 +300,7 @@
        "9  9  9.9  five"
       ]
      },
-     "execution_count": 68,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -329,7 +329,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 69,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
@@ -360,7 +360,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 70,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
     {
@@ -369,7 +369,7 @@
        "(10, 3)"
       ]
      },
-     "execution_count": 70,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -394,7 +394,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 71,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
@@ -467,7 +467,7 @@
        "4  4  4.4  five"
       ]
      },
-     "execution_count": 71,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -485,7 +485,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 72,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
@@ -558,7 +558,7 @@
        "9  9  9.9  five"
       ]
      },
-     "execution_count": 72,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -576,7 +576,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 73,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
@@ -635,7 +635,7 @@
        "2  2  2.2  thee"
       ]
      },
-     "execution_count": 73,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -660,7 +660,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 74,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
     {
@@ -679,7 +679,7 @@
        "Name: a, dtype: int64"
       ]
      },
-     "execution_count": 74,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -690,7 +690,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 75,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
@@ -725,7 +725,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 76,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -744,7 +744,7 @@
        "Name: a, dtype: int64"
       ]
      },
-     "execution_count": 76,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -777,7 +777,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 77,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
@@ -826,7 +826,7 @@
        "2  2  2.2"
       ]
      },
-     "execution_count": 77,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -844,7 +844,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 78,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -855,7 +855,7 @@
        "Name: c, dtype: object"
       ]
      },
-     "execution_count": 78,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -873,7 +873,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 79,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -953,7 +953,7 @@
        "9  9  9.9  five"
       ]
      },
-     "execution_count": 79,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -971,7 +971,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 173,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -990,7 +990,7 @@
        "Name: a, dtype: bool"
       ]
      },
-     "execution_count": 173,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1001,7 +1001,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 175,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
@@ -1028,8 +1028,6 @@
        "      <th>a</th>\n",
        "      <th>b</th>\n",
        "      <th>c</th>\n",
-       "      <th>d</th>\n",
-       "      <th>e</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
@@ -1038,64 +1036,52 @@
        "      <td>4</td>\n",
        "      <td>4.4</td>\n",
        "      <td>five</td>\n",
-       "      <td>16</td>\n",
-       "      <td>-0.287903</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>5</th>\n",
        "      <td>5</td>\n",
        "      <td>5.5</td>\n",
        "      <td>one</td>\n",
-       "      <td>25</td>\n",
-       "      <td>-0.132352</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>6</th>\n",
        "      <td>6</td>\n",
        "      <td>6.6</td>\n",
        "      <td>two</td>\n",
-       "      <td>36</td>\n",
-       "      <td>-0.991779</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>7</th>\n",
        "      <td>7</td>\n",
        "      <td>7.7</td>\n",
        "      <td>thee</td>\n",
-       "      <td>49</td>\n",
-       "      <td>-0.953753</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>8</th>\n",
        "      <td>8</td>\n",
        "      <td>8.8</td>\n",
        "      <td>four</td>\n",
-       "      <td>64</td>\n",
-       "      <td>0.920026</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>9</th>\n",
        "      <td>9</td>\n",
        "      <td>9.9</td>\n",
        "      <td>five</td>\n",
-       "      <td>81</td>\n",
-       "      <td>-0.629888</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "text/plain": [
-       "   a    b     c   d         e\n",
-       "4  4  4.4  five  16 -0.287903\n",
-       "5  5  5.5   one  25 -0.132352\n",
-       "6  6  6.6   two  36 -0.991779\n",
-       "7  7  7.7  thee  49 -0.953753\n",
-       "8  8  8.8  four  64  0.920026\n",
-       "9  9  9.9  five  81 -0.629888"
+       "   a    b     c\n",
+       "4  4  4.4  five\n",
+       "5  5  5.5   one\n",
+       "6  6  6.6   two\n",
+       "7  7  7.7  thee\n",
+       "8  8  8.8  four\n",
+       "9  9  9.9  five"
       ]
      },
-     "execution_count": 175,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1115,7 +1101,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 82,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
@@ -1194,7 +1180,7 @@
        "4  4  4.4  five  16"
       ]
      },
-     "execution_count": 82,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1214,7 +1200,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 83,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
@@ -1299,7 +1285,7 @@
        "4  4  4.4  five  16 -0.287903"
       ]
      },
-     "execution_count": 83,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1325,7 +1311,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 140,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
@@ -1345,7 +1331,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 141,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [
     {
@@ -1362,7 +1348,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 142,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
@@ -1385,7 +1371,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 143,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [
     {
@@ -1409,7 +1395,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 144,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -1426,7 +1412,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 145,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
@@ -1450,7 +1436,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 146,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
@@ -1470,7 +1456,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 147,
+   "execution_count": 27,
    "metadata": {},
    "outputs": [
     {
@@ -1481,7 +1467,7 @@
        "       [ 9., 25.,  9.]])"
       ]
      },
-     "execution_count": 147,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1493,7 +1479,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 148,
+   "execution_count": 28,
    "metadata": {},
    "outputs": [
     {
@@ -1504,7 +1490,7 @@
        "       [27., 41., 43.]])"
       ]
      },
-     "execution_count": 148,
+     "execution_count": 28,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1516,7 +1502,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 150,
+   "execution_count": 29,
    "metadata": {},
    "outputs": [
     {
@@ -1527,7 +1513,7 @@
        "       [ 0.,  2.,  0.]])"
       ]
      },
-     "execution_count": 150,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1538,7 +1524,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 151,
+   "execution_count": 30,
    "metadata": {},
    "outputs": [
     {
@@ -1549,7 +1535,7 @@
        "       [0., 2., 0.]])"
       ]
      },
-     "execution_count": 151,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1560,7 +1546,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 153,
+   "execution_count": 31,
    "metadata": {},
    "outputs": [
     {
@@ -1579,6 +1565,47 @@
     "print(len(x))"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ True,  True,  True,  True,  True,  True, False, False, False,\n",
+       "       False])"
+      ]
+     },
+     "execution_count": 32,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "x < 2"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "6"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "np.sum(x < 2)"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
diff --git a/01_introduction.ipynb b/01_introduction.ipynb
index 4f985a1..b0839f9 100644
--- a/01_introduction.ipynb
+++ b/01_introduction.ipynb
@@ -777,7 +777,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Hands-on section"
+    "# Hands-on section\n",
+    "\n",
+    "<img src=\"https://i.imgflip.com/303yin.jpg\" title=\"made at imgflip.com\" width=35%/>"
    ]
   },
   {
@@ -1442,14 +1444,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 2. Experiment with (hyper)parameters of ML methods"
+    "### 2. Experiment with hyperparameters of ML methods"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Both `LogisticRegression` and `SVC` classifiers have a parameter `C` which allows to enforce a \"simplification\" (often called **regularization**) of the resulting model. Test the beers data \"re-classification\" with different values of this parameter.\n"
+    "Both `LogisticRegression` and `SVC` classifiers have a hyperparameter `C` which allows to enforce a \"simplification\" (often called **regularization**) of the resulting model. Test the beers data \"re-classification\" with different values of this parameter."
    ]
   },
   {
diff --git a/02_classification.ipynb b/02_classification.ipynb
index 76fe8cb..26e85ee 100644
--- a/02_classification.ipynb
+++ b/02_classification.ipynb
@@ -597,7 +597,9 @@
     "<p><i class=\"fa fa-warning\"></i>&nbsp;\n",
     "Eventually, classification is about finding a procedure to separate point clouds in a n-dimesional space.\n",
     "</p>\n",
-    "</div>\n"
+    "</div>\n",
+    "\n",
+    "<img src=\"https://i.imgflip.com/303vuc.jpg\" width=50%/>"
    ]
   },
   {
@@ -1089,7 +1091,15 @@
    "source": [
     "## Feature engineering\n",
     "\n",
-    "To improve ML performance we can try to create new feature by transformation of existing features. This process is called **feature engineering**."
+    "To improve ML performance we can try to create new feature by transformation of existing features. This process is called **feature engineering**.\n",
+    "\n",
+    "This is actually the oposite of \"garbage in / garbage out\".\n",
+    "\n",
+    "<img src=\"https://i.imgflip.com/303whl.jpg\" width=50% title=\"made at imgflip.com\"/>\n",
+    "\n",
+    "The general idea is to include / extract usefull information based on domain knowledge. \n",
+    "\n",
+    "E.g. to classify spam emails you can count the number of words written in capital letters only."
    ]
   },
   {
@@ -1401,7 +1411,11 @@
     "\n",
     "In scikit-learn</code> preprocessing utilites have:\n",
     "<ul>\n",
-    "    <li>a <strong><code>transform()</code></strong> method to appropriately transform data,<br/><strong>and, if applicable</strong></li>\n",
+    "    <li>a <strong><code>transform()</code></strong> method to appropriately transform data\n",
+    "        \n",
+    "</ul>\n",
+    "\n",
+    "and, if applicable<ul>\n",
     "    <li>a <strong><code>fit()</code></strong> and <strong><code>fit_transform()</code></strong> methods to learn the preprocessing from data or fit and transform in one step.</li>\n",
     "</ul>\n",
     "</div>"
diff --git a/03_overfitting_and_cross_validation.ipynb b/03_overfitting_and_cross_validation.ipynb
index 618bcbc..00c17a1 100644
--- a/03_overfitting_and_cross_validation.ipynb
+++ b/03_overfitting_and_cross_validation.ipynb
@@ -244,7 +244,7 @@
     "We observed a phenomenon called **\"overfitting\"**.\n",
     "\n",
     "\n",
-    "<img src=\"https://i.imgflip.com/2qky90.jpg\" />\n",
+    "<img src=\"https://i.imgflip.com/2qky90.jpg\" width=30% />\n",
     "\n",
     "To explain the concept of \"overfitting\" we use one of the 2D data sets from script 02:"
    ]
diff --git a/04_measuring_quality_of_a_classifier.ipynb b/04_measuring_quality_of_a_classifier.ipynb
index 54444d8..82eae2d 100644
--- a/04_measuring_quality_of_a_classifier.ipynb
+++ b/04_measuring_quality_of_a_classifier.ipynb
@@ -171,8 +171,13 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Before we define the **confusion matrix** we must introduce some additional terms. \n",
-    "\n",
+    "Before we define the **confusion matrix** we must introduce some additional terms. \n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
     "After applying a classifier to a data set with known labels `0` and `1`:\n",
     "\n",
     "<div class=\"alert alert-block alert-warning\">\n",
@@ -225,7 +230,12 @@
     "    </tbody>\n",
     "</table>\n",
     "\n",
-    "</div>"
+    "</div>\n",
+    "\n",
+    "\n",
+    "<img src=\"https://i.imgflip.com/303z59.jpg\" title=\"made at imgflip.com\" width=30%/>\n",
+    "\n",
+    "\n"
    ]
   },
   {
@@ -284,6 +294,11 @@
     "\n",
     "This is also called the **accuracy paradox** (<a href=\"https://en.wikipedia.org/wiki/Accuracy_paradox\">see also here</a>).\n",
     "\n",
+    "\n",
+    "<img src=\"https://i.imgflip.com/303wyp.jpg\" title=\"made at imgflip.com\" width=50%/>\n",
+    "\n",
+    "\n",
+    "\n",
     "To evaluate this test on such an unbalanced dataset we need different numbers: \n",
     "\n",
     "1. Does our test miss infected people: How many infected people are actually discovered to be infected ?\n",
diff --git a/05_classifiers_overview.ipynb b/05_classifiers_overview.ipynb
index fab2f63..a85a255 100644
--- a/05_classifiers_overview.ipynb
+++ b/05_classifiers_overview.ipynb
@@ -130,6 +130,13 @@
     "# Chapter 5: An overview of classifiers"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<img src=\"https://i.imgflip.com/303zjr.jpg\" title=\"made at imgflip.com\" width=50%/>"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
diff --git a/06_preprocessing_pipelines_and_hyperparameter_optimization.ipynb b/06_preprocessing_pipelines_and_hyperparameter_optimization.ipynb
index 5629a57..8ca9d73 100644
--- a/06_preprocessing_pipelines_and_hyperparameter_optimization.ipynb
+++ b/06_preprocessing_pipelines_and_hyperparameter_optimization.ipynb
@@ -430,7 +430,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "<img src=\"https://i.imgflip.com/2xi5wt.jpg\" />"
+    "<img src=\"https://i.imgflip.com/2xi5wt.jpg\" width=50%/>"
    ]
   },
   {
@@ -735,6 +735,15 @@
     "\n",
     "Classifiers and pipelines have parameters which must be adapted for improving performance (e.g. `gamma` or `C`). Finding good parameters is also called *hyperparameter optimization* to distinguish from the optimization done during learning of many classification algorithms.\n",
     "\n",
+    "### Up to now we adapted such hyperparameters manually, but there are more systematic approaches !\n",
+    "\n",
+    "<img src=\"https://i.imgflip.com/3040hg.jpg\" title=\"made at imgflip.com\" width=50%/>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
     "The simplest approach is to specify valid values for each parameter involved and then try out all possible combinations. This is called *grid search*:"
    ]
   },
@@ -972,13 +981,6 @@
     "print(\"Best parameter (CV score=%0.3f):\" % search.best_score_)\n",
     "print(search.best_params_)"
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {
diff --git a/07_regression.ipynb b/07_regression.ipynb
index 11d03bb..3294c43 100644
--- a/07_regression.ipynb
+++ b/07_regression.ipynb
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [
     {
@@ -102,13 +102,18 @@
        "    }\n",
        "    \n",
        "    div#maintoolbar {display: none !important;}\n",
-       "</style>\n"
+       "</style>\n",
+       "    <script>\n",
+       "IPython.OutputArea.prototype._should_scroll = function(lines) {\n",
+       "        return false;\n",
+       "}\n",
+       "    </script>\n"
       ],
       "text/plain": [
        "<IPython.core.display.HTML object>"
       ]
      },
-     "execution_count": 1,
+     "execution_count": 2,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -139,14 +144,17 @@
     "in contrast to classification which predicts categories.\n",
     "</div>\n",
     "\n",
+    "<img src=\"https://i.imgflip.com/30416v.jpg\" title=\"made at imgflip.com\" width=35%/>\n",
     "\n",
-    "\n",
-    "Other differences are:\n",
+    "<div class=\"alert alert-block alert-warning\">\n",
+    "<i class=\"fa fa-info-circle\"></i>&nbsp; \n",
+    "    Other differences are:\n",
     "\n",
     "* Accuracy is measured differently\n",
     "\n",
     "\n",
-    "* Other algorithms"
+    "* Other algorithms\n",
+    "</div>"
    ]
   },
   {
@@ -162,7 +170,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
@@ -241,7 +249,7 @@
        "4           24.5    74.5  atlantic    24.2"
       ]
      },
-     "execution_count": 2,
+     "execution_count": 3,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -255,7 +263,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
@@ -334,7 +342,7 @@
        "99           27.5    86.5  sockeye    43.4"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -352,7 +360,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
@@ -390,7 +398,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
     {
@@ -469,7 +477,7 @@
        "4           24.5    74.5     0    24.2"
       ]
      },
-     "execution_count": 5,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -483,7 +491,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
@@ -562,7 +570,7 @@
        "99           27.5    86.5     1    43.4"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -580,7 +588,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -603,7 +611,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -623,7 +631,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -640,7 +648,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -700,50 +708,28 @@
     "For our current example we compute the average absolute difference between given values $y_i$ and predicted values  $\\hat{y}_i$:\n",
     "\n",
     "$$\n",
-    "\\frac{1}{n} \\left(|y_1 - \\hat{y}_1| + |y_2 - \\hat{y}_2| + ... + |y_n - \\hat{y}_n| \\right)\n",
+    "\\frac{1}{n} \\left(\\, |y_1 - \\hat{y}_1| \\, + \\, |y_2 - \\hat{y}_2| \\, + \\, \\ldots \\,+ \\,|y_n - \\hat{y}_n| \\,\\right)\n",
     "$$\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "mean absolute error: 5.35144698789554\n"
+      "5.35144698789554\n"
      ]
-    },
-    {
-     "data": {
-      "image/png": "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3dSpU4mOjqZnz54sWbLE0eHIBdC5a9p0/pounbumTeev6dK5c6x6z/A0mUyEhoZSVlbG4cOHq7QnJiZis9lqrNZToaI6T0W1nnMZhkFCQgIWi8X+paC2/gDx8fFAzVWCRERERERakgYp7TJixAgAfvjhhyptFdtGjhxZp32sXbu2Stv27dvJzMxk4MCB9snBFf3Xr19fZRz/8ePHiYmJoUOHDk2+lKeIiIiISENokMR/4sSJuLq68vbbb7N371779j179rB48WLc3NyYMmWKffvRo0eJj48nJyfHvi0yMpLu3buzadMmVqxYYd+emZnJU089BcCMGTPs2zt27MiIESNISEhg4cKF9u35+fk89thjlJWVVeovIiIiItKSNcjKvcHBwcydO5d58+YxefJkhgwZAkBUVBSlpaU899xz+Pv72/tPnz6d5ORkFixYYB9fbzabefbZZ5k2bRqPP/44n332GYGBgURHR5Odnc3NN9/MlVdeWen3PvHEE9xyyy28+eabrFu3ji5durB9+3bS0tK44ooruOWWWxri8EREREREmrwGSfwBbr31Vtq3b8/ixYvZvn07Li4uREREMGvWLIYNG1anfYSHh/Ppp5+yaNEioqKiOHToEJ06deKBBx7gpptuqtK/Y8eO9v4bNmzgyJEjdOzYkdtvv51p06ZVmWgsIiIiItJSNWhmPHr0aEaPHn3efuvWrauxLTQ0lEWLFtX5d7Zr144FCxbUub+IiIiISEvUIGP8RURERESkcVPiLyIiIiLSAijxFxERERFpATT7tRm4/vrriYyMpEOHDo4ORS6Qzl3TpvPXdOncNW06f02Xzp1jmQzDMBwdhIiIiIiIXFwa6iMiIiIi0gIo8RcRERERaQGU+IuIiIiItABK/EVEREREWgAl/iIiIiIiLYAS/2bktddeIywsrMZ/n376qaNDlHNs3ryZ22+/nSFDhhAREcHUqVPZsGGDo8OS8/jiiy9qfZ+9/PLLjg5RfmPlypWEhYWxdevWatsTExN54IEHGDlyJP369WPChAksWbIEm812iSOV6tR2/k6cOFHr+/GWW25xQMQtV1lZGR999BE33HADAwYMIDw8nD/96U+89tprFBUVVem/Z88e7rnnHi677DIGDBjATTfdxOrVqx0QecuhOv7NSExMDABjx47Fzc2tSntISMilDklqsHLlSh5+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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "image/png": {
-       "height": 269,
-       "width": 383
-      }
-     },
-     "output_type": "display_data"
     }
    ],
    "source": [
     "import numpy as np\n",
     "\n",
-    "# mean abso.ute error\n",
-    "\n",
-    "abs_error = np.abs(predicted - values_test) \n",
-    "mean_abs_error = np.mean(abs_error)\n",
-    "\n",
-    "print(\"mean absolute error:\", mean_abs_error)\n",
-    "\n",
-    "sns.distplot(abs_error)\n",
-    "plt.xlabel(\"absolute error\");"
+    "error = np.sum(np.abs(predicted - values_test)) / len(values_test)\n",
+    "print(error)"
    ]
   },
   {
@@ -780,12 +766,12 @@
     "<div class=\"alert alert-block alert-warning\">\n",
     "    <i class=\"fa fa-info-circle\"></i>&nbsp; <strong>mean absolute error</strong> is defined as \n",
     "\n",
+    "\n",
     "$$\n",
-    "\\frac{1}{n} \\left(|y_1 - \\hat{y}_1| + |y_2 - \\hat{y}_2| + ... + |y_n - \\hat{y}_n| \\right)\n",
+    "\\frac{1}{n} \\left(\\, |y_1 - \\hat{y}_1| \\, + \\, |y_2 - \\hat{y}_2| \\, + \\, \\ldots \\,+ \\,|y_n - \\hat{y}_n| \\,\\right)\n",
     "$$\n",
     "\n",
     "\n",
-    "\n",
     "</div>\n",
     "\n",
     "\n",
@@ -801,8 +787,9 @@
     "    <i class=\"fa fa-info-circle\"></i>&nbsp; <strong>mean squared error</strong> is defined as \n",
     "\n",
     "\n",
+    "\n",
     "$$\n",
-    "\\frac{1}{n} \\left((y_1 - \\hat{y}_1)^2 + (y_2 - \\hat{y}_2)^2 + ... + (y_n - \\hat{y}_n)^2 \\right)\n",
+    "\\frac{1}{n} \\left(\\, (y_1 - \\hat{y}_1)^2 \\, + \\, (y_2 - \\hat{y}_2)^2 \\, \\, \\ldots \\,+ \\,(y_n - \\hat{y}_n)^2 \\,\\right)\n",
     "$$\n",
     "\n",
     "\n",
@@ -823,7 +810,7 @@
     "\n",
     "\n",
     "$$\n",
-    "\\text{median}\\left(|y_1 - \\hat{y}_1|, |y_2 - \\hat{y}_2|, ..., |y_n - \\hat{y}_n| \\right)\n",
+    "\\text{median}\\left(\\,|y_1 - \\hat{y}_1|, \\,|y_2 - \\hat{y}_2|, \\,\\ldots, \\,|y_n - \\hat{y}_n| \\, \\right)\n",
     "$$\n",
     "\n",
     "\n",
diff --git a/setup_eth_course_rooms/install.sh b/setup_eth_course_rooms/install.sh
index ab784eb..0b83da1 100755
--- a/setup_eth_course_rooms/install.sh
+++ b/setup_eth_course_rooms/install.sh
@@ -1,4 +1,4 @@
-#! /bin/sh
+#!/bin/bash
 #
 # run_install.sh
 # Copyright (C) 2019 Uwe Schitt <uwe.schmitt@id.ethz.ch>
@@ -14,6 +14,7 @@ err() {
 }
 trap 'err $LINENO' ERR
 
+WORKSHOP_TMP=${HOME}/.tmp/ml_workshop
 
 if [[ ${MACHTYPE} == *darwin* ]]; then
     # local testing
@@ -22,9 +23,7 @@ else
     BASE_URL="https://sis.id.ethz.ch/mlw"
 fi;
 
-WORKSHOP_TMP=${HOME}/.tmp/ml_workshop
-
-rm -f ${WORKSHOP_TMP}/*
+rm -rf ${WORKSHOP_TMP}/*
 
 curl -# $BASE_URL/mlw_packages.yml > /tmp/mlw_packages.yml
 curl -# $BASE_URL/setup_anaconda.sh | bash
@@ -35,11 +34,19 @@ curl -# $BASE_URL/notebooks.tar.bz2 | tar -C ${WORKSHOP_TMP} -xjf -
 
 cat >start_mlw.sh <<END
 cd ${WORKSHOP_TMP}
-${HOME}/.tmp/conda_envs/mlw/bin/jupyter notebook
+/tmp/conda_envs/mlw/bin/jupyter notebook
 END
 
 chmod +x ./start_mlw.sh
 
+cat >update_notebooks.sh <<END
+rm -rf ${WORKSHOP_TMP}
+mkdir -p ${WORKSHOP_TMP}
+curl -# $BASE_URL/notebooks.tar.bz2 | tar -C ${WORKSHOP_TMP} -xjf -
+END
+
+chmod +x ./update_notebooks.sh
+
 echo
 echo
 echo
@@ -60,7 +67,7 @@ echo IN THE TERMINAL TO OPEN THE NOTEBOOKS AGAIN.
 echo
 echo PLEASE WRITE DOWN HOW THIS COMMAND, THEN PRESS ENTER TO CONTINUE
 echo
-read -p ""
+read -p "PRESS ENTER"
 
 
-./start_jupyter.sh
+./start_mlw.sh
diff --git a/setup_eth_course_rooms/setup_anaconda.sh b/setup_eth_course_rooms/setup_anaconda.sh
index aad7585..4283dcd 100755
--- a/setup_eth_course_rooms/setup_anaconda.sh
+++ b/setup_eth_course_rooms/setup_anaconda.sh
@@ -1,4 +1,4 @@
 export CONDA_PKGS_DIRS=/tmp/conda_pkgs
-export CONDA_ENVS_DIRS=${HOME}/.tmp/conda_envs
+export CONDA_ENVS_DIRS=/tmp/conda_envs
 conda info
 conda-env create --force -f /tmp/mlw_packages.yml -n mlw
diff --git a/setup_eth_course_rooms/update_installer.sh b/setup_eth_course_rooms/update_installer.sh
index 80a8c1a..5d7e407 100755
--- a/setup_eth_course_rooms/update_installer.sh
+++ b/setup_eth_course_rooms/update_installer.sh
@@ -11,7 +11,9 @@ set -e
 # files to include for installation:
 INSTALLER_FILES="setup_anaconda.sh install.sh ../mlw_packages.yml"
 NOTEBOOKS=??_*.ipynb
-GRAPHICS="../*.svg ../*.png ../*.jpg ../*.jpeg ../*.gif"
+
+GRAPHICS="*.svg *.png *.jpg *.jpeg *.gif"
+GRAPHICS+=" images/neuralnets/*.svg images/neuralnets/*.png images/neuralnets/*.jpg images/neuralnets/*.jpeg images/neuralnets/*.gif"
 
 # settings remote server
 URL_POSTFIX=mlw
@@ -37,25 +39,31 @@ pushd .. >/dev/null
 for NOTEBOOK in ${NOTEBOOKS}; do
     echo process ${NOTEBOOK}
 
-    TARGET=${LOCAL_BUILD_FOLDER}/course/${NOTEBOOK%.ipynb}-solutions.ipynb
+    TARGET=${LOCAL_BUILD_FOLDER}/course/${NOTEBOOK}
     nb-filter-cells -i $NOTEBOOK -t solution -o ${TARGET}
 
-    cp $NOTEBOOK ${LOCAL_BUILD_FOLDER}/solutions
+    TARGET=${LOCAL_BUILD_FOLDER}/solutions/${NOTEBOOK%.ipynb}-with-solutions.ipynb
+    cp $NOTEBOOK ${TARGET}
 done
 
-popd >/dev/null
-echo
-
-# also copy graphis to build folder
 echo scp graphics
-cp ${GRAPHICS} ${LOCAL_BUILD_FOLDER}/solutions 2>/dev/null || true
-cp ${GRAPHICS} ${LOCAL_BUILD_FOLDER}/course 2>/dev/null || true
+
+rsync -R ${GRAPHICS} ${LOCAL_BUILD_FOLDER}/solutions 2>/dev/null || true
+rsync -R ${GRAPHICS} ${LOCAL_BUILD_FOLDER}/course 2>/dev/null || true
 
 # zip notebooks and scp to remote machine
+pushd ${LOCAL_BUILD_FOLDER}
 echo
-echo scp notebooks archive
+echo scp notebooks.tar.bz2
 REMOTE_CMD="cat > ${REMOTE_WEB_FOLDER}/notebooks.tar.bz2"
-tar jcf - ${LOCAL_BUILD_FOLDER} 2>/tmp/tar.err | ssh ${REMOTE_LOGIN} ${REMOTE_CMD}
+tar jcf - . 2>/tmp/tar.err | ssh ${REMOTE_LOGIN} ${REMOTE_CMD}
+
+popd >/dev/null
+popd >/dev/null
+echo
+
+# also copy graphis to build folder
+
 
 # copy other files needed by installer
 echo
-- 
GitLab