{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.spatial.distance as distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Create a function to compute f from the sheet, the kernel is by default the canonic scalar product.\n",
    "def f (z, beta, x, y, kernel = np.inner):\n",
    "    r = np.multiply(beta[:-1], y)\n",
    "    s = kernel(z, x)\n",
    "    return np.sum(r * s, axis = -1) + beta[-1]\n",
    "\n",
    "#Create a function for the given feature map in Task 2.6.\n",
    "def phi(x):\n",
    "    return np.column_stack((x[:,0],x[:,1], x[:,0]**2+x[:,1]**2))\n",
    "\n",
    "#The identity function, which we use as default feature map.\n",
    "def id(x):\n",
    "    return x\n",
    "#Task 2.1\n",
    "#OneStep algorithm from the sheet, with the possibility to pass a kernel, by default it's the canonic scalar product.\n",
    "#There is not much to explain here since the algorithm is given on the sheet.\n",
    "def OneStep (i, j, beta, x, y, C, kernel = np.inner):\n",
    "    delta = y[i]*(( f(x[j], beta, x, y, kernel) - y[j] ) - ( f(x[i], beta, x, y, kernel) - y[i] ))\n",
    "    s = y[i]*y[j]\n",
    "    chi = kernel(x[i],x[i]) + kernel(x[j],x[j]) - 2*kernel(x[i],x[j])\n",
    "    gamma = s*beta[i] + beta[j]\n",
    "    if s==1:\n",
    "        L = np.maximum(0, gamma - C)\n",
    "        H = np.minimum(gamma, C)\n",
    "    else:\n",
    "        L = np.maximum(0, -gamma)\n",
    "        H = np.minimum(C, C-gamma)\n",
    "    \n",
    "    if chi > 0:\n",
    "        beta[i] = np.minimum( np.maximum( beta[i] + delta/2, L ), H)\n",
    "    elif delta > 0:\n",
    "        beta[i] = L\n",
    "    else:\n",
    "        beta[i] = H\n",
    "        \n",
    "    beta[j] = gamma - s*beta[i]\n",
    "    beta[-1] = beta[-1] - ( f(x[i], beta, x, y, kernel) - y[i] + f(x[j], beta, x, y, kernel) - y[j] )\n",
    "    return beta\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Task 2.2\n",
    "x22 = np.array([np.random.exponential(1/4, 40), np.random.exponential(2, 40)]) #Here we generate an array of 80 exponential distributed values (first 40 with scale parameter 4 and the rest with scale parameter 1/2). \n",
    "x22 = x22.reshape(40,2) #Here we reshape x22 to an 2x40 matrix so the first 20 tuples have scale parameter 4 and the last 20 have scale parameter 1/2.\n",
    "y22 = np.array([-np.ones(20), np.ones(20)]).flatten() #Create an array to label x22."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Task 2.3\n",
    "#SMO algorithm with kernel argument, so we can later pass the gaussian kernel.\n",
    "def SMO (x, y, C, k, kernel = np.inner):\n",
    "    beta = np.zeros(len(y)+1) #create an array to save the beta in the first len(y) entries, in the last entry we save b.\n",
    "    for l in np.arange(k):\n",
    "        ind = np.random.choice(len(y), 2, replace = False) #Find randomly two indices from 0 to len(y) - 1.\n",
    "        beta = OneStep(ind[0], ind[1], beta, x, y, C, kernel) #Run OneStep and save the output in beta.\n",
    "    support = beta[:-1] > 0 #Check at which position beta is bigger than 0, so we know which vector is a support vector.\n",
    "    supp_num = support.sum() #Save the number of support vectors.\n",
    "    med = np.median(f(x[support], beta, x, y, kernel) - y[support])#calculate the median of f(x_i) - y_i\n",
    "    beta[-1] = beta[-1] - med #Change b \n",
    "    return beta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#LLS algorithm from the last sheet\n",
    "def LLS (xtrain, ytrain): \n",
    "    z = np.insert(xtrain, 0, 1, axis=1)\n",
    "    M = np.matmul( z.T, z )\n",
    "    b = np.matmul( z.T, ytrain )\n",
    "    return np.linalg.solve(M, b)\n",
    "\n",
    "#Contour function for LLS from the last sheet\n",
    "def contour_LLS (x, y, alpha):\n",
    "# generating a grid for the contourplot\n",
    "    samplenum = 400\n",
    "    xmax = np.ceil(np.amax(x[:,0]))\n",
    "    xmin = np.floor(np.amin(x[:,0]))\n",
    "    ymax = np.ceil(np.amax(x[:,1]))\n",
    "    ymin = np.floor(np.amin(x[:,1]))\n",
    "    plt.xlim(xmin, xmax)\n",
    "    plt.ylim(ymin, ymax)\n",
    "    xrange = np.arange(xmin, xmax+(xmax-xmin)/samplenum, (xmax-xmin)/samplenum)\n",
    "    yrange = np.arange(ymin, ymax+(ymax-ymin)/samplenum, (ymax-ymin)/samplenum)\n",
    "    X, Y = np.meshgrid(xrange, yrange)\n",
    "\n",
    "# evaluating classifier f at the points of the grid and drawing the contours of the two classes\n",
    "    arg = np.array([X.flatten(),Y.flatten()]).T\n",
    "    Z = alpha[0] + np.matmul(alpha[1:], arg.T)\n",
    "    Z = np.where(Z>0, 1, -1)\n",
    "    Z = np.reshape(Z,X.shape)\n",
    "    plt.contourf(X, Y, Z, levels=[-1, 0, 1], colors = ['blue', 'red'], alpha=0.2)\n",
    "\n",
    "# drawing in the data points\n",
    "    plt.scatter(x[y<0, 0], x[y<0, 1], color = 'blue', label = 'Class -1')\n",
    "    plt.scatter(x[y>0, 0], x[y>0, 1], color = 'red', label = 'Class 1')\n",
    "    plt.legend()\n",
    "    plt.show()\n",
    "    return"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Contour function, we can use different kernels and we pass the feature function so we can transform the values of the grid\n",
    "def contour_SVM (x, y, beta, xtrain, ytrain, C, feat = id, kernel = np.inner):\n",
    "# generating a grid for the contourplot\n",
    "    samplenum = 400\n",
    "    xmax = np.ceil(np.amax(x[:,0]))\n",
    "    xmin = np.floor(np.amin(x[:,0]))\n",
    "    ymax = np.ceil(np.amax(x[:,1]))\n",
    "    ymin = np.floor(np.amin(x[:,1]))\n",
    "    plt.xlim(xmin, xmax)\n",
    "    plt.ylim(ymin, ymax)\n",
    "    xrange = np.arange(xmin, xmax+(xmax-xmin)/samplenum, (xmax-xmin)/samplenum)\n",
    "    yrange = np.arange(ymin, ymax+(ymax-ymin)/samplenum, (ymax-ymin)/samplenum)\n",
    "    X, Y = np.meshgrid(xrange, yrange)\n",
    "\n",
    "# evaluating classifier f at the points of the grid and drawing the contours of the two classes\n",
    "    arg = np.array([X.flatten(),Y.flatten()]).T\n",
    "    Z = f(feat(arg), beta, xtrain, ytrain, kernel)\n",
    "    Z = np.where(Z>0, 1, -1)\n",
    "    Z = np.reshape(Z,X.shape)\n",
    "    plt.contourf(X, Y, Z, levels=[-1, 0, 1], colors = ['blue', 'red'], alpha=0.2)\n",
    "\n",
    "# drawing in the data points\n",
    "    margin = np.logical_and(C > beta[:-1], beta[:-1] > 0) #Find all margin verctors.\n",
    "    support = np.logical_and(beta[:-1] > 0, beta[:-1] >= C) #Find all support vectors, that aren't margin vectros.\n",
    "    minus = y < 0\n",
    "    plus =  y > 0\n",
    "    print('# Support Vectors = {}, \\n# Margin Vectors = {}'.format(support.sum() + margin.sum(), margin.sum()))\n",
    "    plt.scatter(x[minus, 0], x[minus, 1], color = 'blue', label = 'Class -1')\n",
    "    plt.scatter(x[plus, 0], x[plus, 1], color = 'red', label = 'Class 1')\n",
    "    plt.scatter(x[support, 0], x[support, 1], alpha = 0.7, color = 'grey', marker = 'D', label = 'Support Vectors')\n",
    "    plt.scatter(x[margin, 0], x[margin, 1], alpha = 0.7, color = 'black', marker = 'x', label = 'Margin Vectors')\n",
    "    plt.title('C = {}'.format(C))\n",
    "    plt.legend()\n",
    "    plt.show()\n",
    "    return"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nB+DMm8M/AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bc1359240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Support Vectors = 38, \n",
      "# Margin Vectors = 5\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4lNXd//H3N5OEyUYIS4AAAm3AQpAtC4kBRHABghRF\nRVyq+ODyU1vb0su6VmyLtZtPF3keHotbFRUEN8Cl2oKQCAaCgAQQQgsKAQIISSYhJJk5vz9mErOQ\nbWaSWfJ9XRfXMPfcM/cZhnxy5nufc24xxqCUUirwhfi6AUoppbxDA10ppYKEBrpSSgUJDXSllAoS\nGuhKKRUkNNCVUipIaKArpVSQ0EBXAUFEbhSRrSJiE5GjIvK+iIz38jG6iMjzIlIiIsdE5KetaNMh\nESkTkbdFpHudx64XkU9FpFxE1nuznUo1RQNd+T1XsP4JeBLoDVwALAZmevlQC4EhwEDgUuABEZna\nRJuSgP8DbnG1qRz4nzq7fONq81NebqNSTRKdKar8mYjEAkeAecaYN9r5WIXAbcaYf7ju/xIYaoy5\n4Tz7PgkMMsbc6Lr/XWAP0MMYU1pnv/nAzcaYSe3ZdqVAe+jK/2UAVuCt1j5BRB4UkTNN/WniOXFA\nX2BHnc07gKQmDpNUd19jzAHgHDC0te1UyttCfd0ApVrQAzhpjKlu7ROMMU/R9lJHtOu2uM62EiCm\nmf2LG2xrbn+l2p320JW/OwX0FJH27nzYXLdd62yLBUrPs2/N/l0bbGtuf6XanQa68nebcJYyZrX2\nCSLysGs0zHn/nO85xpjTwFFgVJ3No4D8Jg6TX3dfVw09HNjX2nYq5W0a6MqvGWOKgV8Ai0VklohE\nikiYiEwTkd818ZwnjTHRTf1p5nB/Bx4VkTgRGQbcAbzYxL7LgKtEZIKIRAG/At6sOSEqIhYRseIs\na4aIiFVEwtz6R1CqlTTQld8zxvwR+CnwKHAC+Bq4D3jby4d6HDgAHALWA78zxnxQ86Crhz/B1aZ8\n4G6cwV4ERAH31HmtW4CzwP8CE1x//5uX26tUPTpsUSmlgoT20JVSKki0GOiuqdBFIrKrzrbuIvKR\niOx33ca1bzOVUkq1pDU99BeBhtOfHwT+aYwZAvzTdV8ppZQPtaqGLiKDgDXGmBGu+18Ck4wxR0Wk\nL7DeGHNhezZUKaVU89ydrNHbGHPU9fdjOBcnOi8RuRO4EyAqIiL5e4MGuXlIpZTqnPL27DlpjOnV\n0n4ez74zxhgRabKbb4x5FngWIGX4cLP15Zc9PaRSSnUqkpJyqDX7uTvK5bir1ILrtsjN11FKKeUl\n7gb6u8Ctrr/fCrzjneYopZRyV2uGLb6Gcz2NC0XksIj8F86V7C4Xkf3AZegi/kop5XMt1tCNMXOb\neGiKl9uilHJDFXA4JIQKERDxdXOUu4zBagz9HQ7cXfQnONZDf/99WLwYjh+H3r3h3nth2jRft0qp\nDnE4JISY+HgGxcYiGugByxjDqeJiDhcVMdjhcOs1An/q//vvw6JFcOwYGOO8XbTIuV2pTqBChB4a\n5gFPXJ9jhQefY+AH+uLFUFFRf1tFhXO7Up2BiIZ5kBAPy2aBH+jHj7dtu1JKBanAD/TeTUxSbWq7\nUsrrjh0/zg233sp3L7qI5PHjmX7NNezbv5+Dhw4xIjW1Q9rwyMKFDLjwQqI78c9+4Af6vfeC1Vp/\nm9Xq3K6UanfGGK6eO5dJEyZw4IsvyMvO5jdPPMHxoo6db3jV9OnkfvJJhx7T3wR+oE+bBo88An36\nOGtPffo47+soF6XOa9lyC4OGRRASE8mgYREsW27x6PXWffIJYaGh3D1/fu22URddxITMzHr7HTx0\niAmXX87YzEzGZmby6ebNABw9doyJV1zB6IwMRqSmsjEnB7vdzm133cWI1FQuSkvjv595psV2pKel\n0bdPH4/eS6ALjmGL06ZpgCvVCsuWW7jzvi6Un3WeeDv0tXDnfV2Ac9w0x+7Wa+7avZvkMWNa3C++\nVy8+Wr0aq9XK/oIC5s6bx9aNG3l1xQquvOwyHnngAex2O+Xl5WzfuZMjhYXs2rIFgDNnzrjVts4m\nOAJdKdUqjywMrw3zGuVnhUcWhnPTnLPteuyqqiruW7CA7Tt3YrFY2FdQAEDq2LHcfs89VFVVMeuq\nqxg9ciTfGTSIfx88yA8XLCBr6lSumKLzGFsj8EsuSqlW++rw+YfENbW9NZKGDSPv889b3O+/n3mG\n3vHx7Ni8ma0bN1JZWQnAxPHj2fDhh/RLSOC2u+7i76++SlxcHDs2bWLShAksee455jc4J2a32xmd\nkcHojAx+8atfud32YKM9dKU6kQv6Gw593Ti8L+jv/sXiJ0+axMNPPMGzzz/PnbffDsDOXbsoLi5m\nQP/+tfsVl5TQv18/QkJCeGnZMux2Z4nn0Fdf0b9fP+6YN49z586xbft2pl9xBeHh4cyeNYsLhwzh\n5jr1eQCLxcL2TZvcbnOw0h66Up3IooWVREbUD+/ICMOihZVuv6aI8NZrr/HxunV896KLSEpJ4aHH\nH6dPg+GD99xxBy8tW8ao9HT27ttHVFQUAOs3bmRUejpjLr6Y5atWcf8993Dk6FEmTZvG6IwMbp4/\nn9888USL7Xjg0UfpP3Qo5eXl9B86lIWLFrn9ngJVqy5B5y16gQulvG9PaCjDEhNbvf+y5RYeWRjO\nV4eFC/o7w9zdE6LK+/YUFDCsurreNklJyTPGpLT0XC25KNXJ3DTH3u4nQJVvaMlFKaWChAa6UkoF\nCQ10pZQKEhroSikVJDTQlVIqSGigK6U85ovlczdkZzM2M5PQ2FhWvvVWuxwj0OiwRaWUR2qWz731\nxht5/aWXANjxxRccLyqqN1PU2y4YMIAX/+//+MOf/9xuxwg02kNXqrNZvhyGDYOYGOft8uUevZyv\nls8dNHAgI0eMICREY6yG9tCV6kyWL4f77oOzrolFX3/tvA8wZ45bL6nL5/oPDXSlOpOFC78N8xpn\nzzq3uxnoraXL57Y//a6iVGdy+HDbtreCL5bPVeenga5UZ9LUSUoPTl5OnjSJc5WVPPv887Xbdu7a\nxcacnHr7FZeU0LdPH0JCQnj5tdfqLZ/bOz6eO+bNY/6tt7Jt+3ZOnjyJw+Fg9qxZ/Pqxx9i2fbvb\n7etMNNCV6kwWLoSIiPrbIiKc293kq+Vzt+Tl0X/oUN546y3uuv9+klJaXIww6OnyuUoFuLYun8vy\n5c4AP3zY2TPvgPq5aj1dPlcp1Xpz5miAByktuSilVJDQQFdKqSChga6UUkFCA10ppYKEBrpSSgUJ\nDXSlOilbWZnXXmvR735HUkoKI8eNY3RGBp+51mDxhT8tXkx5eXmj7U88+SQPPf54vW3bd+5k2Nix\nbT7G9p07ee/DD91uY3vxKNBF5Cciki8iu0TkNRGxeqthSqn2k793L8tWrSJ/716PX2vTZ5+x5oMP\n2JaTw87PPuPj1avbddnc5tjt9iYDfe5117F81ap6215fuZK5113X5uO4E+jVDcaWtwe3A11E+gE/\nAlKMMSMAC3CDtxqmlGof+Xv3kpObizU8nJzcXI9D/eixY/Ts0YMuXboA0LNnTxL69gVg0PDhnDx5\nEoCt27YxaepUABYuWsQt8+eTMXkyQ0aN4m8vvADA+g0bmHjFFWTNns2FY8Zw949+hMPhAOC1FSu4\nKC2NEamp/Pyxx2qPH927NwseeohR6eks+t3vKDx6lEunT+fSadPqtXPokCHEdetW79vDijffrA30\nf/zzn2RMnszYzEyuu/lmbDYb4JyRevGUKYxKTyftkksoLi7mF7/+NctXrWJ0RgbLV67km2++YdYN\nNzBy3DjSL72Unbt21XufmZddxi3z55O/ezdpl1zC6IwMRo4bx37XAmXe4unEolAgQkSqgEig0PMm\nKaXaS02YR0ZEYLFYsFgs5OTmApD0ve+59ZpXTJnCL596iqGjR3PZpEnMmT2bSyZMaPF5O3ftYvO6\ndZSVlTEmM5MsV9jn5uWxe+tWBl5wAVNnzeLNd97h4vR0fv6LX5C3cSNxcXFcMXMmb69ezayrrqKs\nrIxxKSn88Te/AeD5l19m3Xvv0bNnz0bHnHvddby+ciXjUlPZnJtL97g4hiQmcvLkSX7929/y8erV\nREVF8dunn+bpv/6VBxcsYM6tt7L8pZdITU6mpKSEyMhIfvnoo2zdto1nnn4agB8uWMCYkSN5+/XX\n+df69fzgjjvYvmkTALv37iX7o4+IiIjghwsWcP8993DTnDlUVlbWrmfjLW730I0xR4A/AF8BR4Fi\nY8w/Gu4nIneKyFYR2Xri9Gn3W6qU8kjDMAewWCxERkR41FOPjo4mLzubZ//yF3r17MmcW2/lxVde\nafF538/KIiIigp49e3LpxInkbt0KQFpyMt8ZPBiLxcLc664je9MmtuTlMWnCBHr16kVoaCg3zZnD\nBtfiXxaLhdmzZrWqrXNmz2bl22/jcDjqlVs2b9nC7r17ybzsMkZnZPDSsmUc+vprvty3j759+pCa\nnAxA165dCQ1t3A/O3rSJW+bOBZyLlZ365htKSkoAmDl9OhGu9XMyxo3jyd//nt8+/TSHvvqqdru3\neFJyiQO+DwwGEoAoEbm54X7GmGeNMSnGmJRecXHut1Qp5TZbWRnZubl0CQ+vDfMaFouFLuHhZOfm\nun2i1GKxMGniRJ549FGe+eMfWfXOOwCEhobWlkwqKirqPUdEznu/qe1NsVqtjd5TUwb078/ggQP5\nZONGVr3zDnNmzwacl9G7fPJktm/axPZNm9idl8dz//M/rXrNltQsQgZw4/XX8+6KFURYrUyfPZt/\nrV/vlWPU8OSk6GXAf4wxJ4wxVcCbwMXeaZZSypuio6IYn5bGufN8zbfb7ZyrrGR8WhrRdcKntb7c\nt69eLXj7zp0MHDAAgEEXXECea+nbmpCv8c7atVRUVHDq1CnWb9xY2wvOzcvjPwcP4nA4WL5qFeMz\nMkhLSeGT7GxOnjyJ3W7ntTfe4JLx48/bnpjoaEpd9e/zmXvddfzkwQf5zqBB9O/XD4D01FRyNm+m\n4MABAMrKyti3fz8XDh3K0WPH2JKXB0BpaSnV1dWNjjHh4otZ5rqU3/oNG+jZowddu3ZtdOx//+c/\nfGfwYH50zz18PyuLnfn5zfzLtp0ngf4VkC4ikeL8FToF2OOdZimlvC3pe98jMy2N8rNna0PdbrdT\nfvYsmWlpbtfQbWVl3HrXXQxPTmbkuHHs3ruXhQ8/DMDjDz3E/Q88QMqECY160SNHjODS6dNJnzyZ\nx37+89oTqaljx3LfggUMS05m8MCBXD1zJn379OGpJ57g0unTGZWeTvKYMXx/xozztufOefOYevXV\njU6K1rju6qvJ37On3uiWXr168eKSJcydN4+R48aRMXkye/ftIzw8nOUvvcQPf/YzRqWnc/nMmVRU\nVHDpxIns3ru39qTowocfJm/7dkaOG8eDjz/OS88+e95jr3jzTUakpjI6I4Ndu3fzA1eZxls8Wj5X\nRJ4A5gDVwOfAfGPMuab21+VzlfK+ti6fW1NL7xIezrnKSo/C3F0LFy0iOjqan91/f73t6zds4A9/\n+QtrVq7s0Pb4E58tn2uMeRx4vMUdlVJ+oya8s3NzGe+DMFftRy9woVSAa/MFLlxsZWVu1cxV+/Kk\nh65T/5XqpDTMg48GulJKBQkNdKWUChIa6EopFSQ00JVSHpPoaG7+r/+qvV9dXU2vgQOZce21XjvG\n/HvvZfee1k11OXjoEP2HDq2dpVrD3aV9n/z979v8HF/QQFeqk2k4ss0bI92ioqLYtXs3Z8+eBeCj\nf/2LfgkJbXqNlpaXXbp4McOHDWvVaw0aOJALBgxgo2u9F4C9X35Jqc3GuNTUNrUL4Mk//KFN+xtj\nGv0y6Qga6Ep1Iq+uWMHSF1+sDXFjDEtffJFXV6zw+LWnX3klaz/4AIDX3nij3kzM3K1byZg8mTEX\nX8zFU6bw5b59ALz4yivMvP56Jk+fzpSsLBwOB/f8+Md8b8wYLr/qKqZfcw0r33oLgElTp7J12zbA\nuWTuIwsXMio9nfRLL+X48eON2jP32mt5vc4EpddXruQG19otJ06cYPaNN5I6cSKpEyeS41oZ0Waz\nMe/uu7koLY2R48ax6u23efAXv+Ds2bOMzsjgpttvB+Dpv/6VEampjEhN5U+LFwPObwUXjhnDD+64\ngxGpqXx9+DC33XUXI1JTuSgtjf9+5hmP/41booGuVCdhjKGsrIx333uvNtSXvvgi7773HmVlZR73\n1G9wBWhFRQU7d+1iXMq3w6a/N3QoG//xDz7/9FN++eijPLxwYe1j27ZvZ+Urr/DJhx/y5jvvcPCr\nr9idl8fLS5eyybW0b0NlZWWkp6WxY/NmJmZm8rcXX2y0z/XXXMPba9bU9vyXr1pV+0vm/gce4Cf3\n3ceWDRtYtWwZ8++9F4Bf/fa3xHbtyhe5uez87DMmX3IJT/3yl0RERLB90yaWPf88eZ9/zgsvv8xn\n69ezed06/vbCC3y+YwcA+wsKuOeOO8jfupWTp05xpLCQXVu28EVuLvNubrR2odd5uh66UipAiAjz\nb7sNgHffe49333sPcC7vOv+221pc1bAlI0eM4OBXX/HaG28w/cor6z1WXFLCrXfeyf4DBxARqqqq\nah+7fPJkunfvDjiXob3u6qsJCQmhT+/eXNrEuurh4eHMcK3Vkjx6NB+tW9don969ezNi+HD+uX49\nvePjCQ0NZURSEgAfr1vH7jrLBZeUlmKz2fh43Tper/PLIe48K8Rmf/opV191Ve0qitfMnMnGnBxm\nZmUx8IILSE9LA+A7gwbx74MH+eGCBWRNncoVU6a0+G/oKe2hK9WJ1A31Gt4I8xozp0/nZ488wtwG\nJ0Mf+9WvuHTiRHZt2cLqN96g4ty3Sz5FRUa2+ThhYWG1bbZYLE3W32suaNHwUnMOh4PN69bVLpd7\nZP9+oqOj29yOhuq+l7i4OHZs2sSkCRNY8txztd8C2pMGulKdSE2Zpa66NXVP3f6DH/D4gw9y0YgR\n9bYXFxfXniRt7uIXmenprHrnHRwOB8ePH2d9drZH7blm5kze+/BDlq9axQ11fslcMWUKf12ypPb+\n9p07Aee3hcV1Vko87booT1hYWO23igmZmby9Zg3l5eWUlZXx1urVTMjMbHTskydP4nA4mD1rFr9+\n7DG2uZYRbk8a6Ep1EnVr5jOnT+fdFSuct3Vq6p7q368fP7rnnkbbH/jJT3ho4ULGXHxxs6NZZs+a\nRf+EBIYnJ3Pz/PmMHTWK2NhYt9vTrVs3MsaNo3d8PN8ZPLh2+19+/3u2btvGyHHjGJ6czJKlSwF4\n9IEHOH3mDCNSUxmVns66DRsA55K8I8eN46bbb2fs6NHcdvPNpF1yCeMmTWL+bbcxZtSoRsc+cvQo\nk6ZNY3RGBjfPn89vnnjC7ffRWro4l1IBri2Lc726YgVlZWW1ZZaakI+KiuLG669v55a2js1mIzo6\nmlOnTpE2aRI5H39Mn969fd2sDuOz5XOVUoHlxuuvxxhT73Jv3qyhe8OMa6/lTHExlZWVPPbzn3eq\nMPeUBrpSnUxbr9nZ0da7xrKrttMaulKBzhivndRUvmWMAQ8+Sw10pQKc1RhOFRdrqAc44/ocrR58\njlpyUSrA9Xc4OFxUxIkTJ8DPyieqDYzBagz9PVgDRgNdqQAXBgz2wUJQyv9oyUUppYKEBrpSSgUJ\nDXSllAoSGuhKKRUkNNCVUipIaKArpVSQ0EBXSqkgoYGulFJBQgNdKaWChAa6UkoFCQ10pZQKEhro\nSikVJDTQlVIqSGigK6VUkPAo0EWkm4isFJG9IrJHRDK81TCllFJt4+l66H8GPjDGXCsi4UCkF9qk\nlFLKDW4HuojEAhOB2wCMMZVApXeapZRSqq08KbkMBk4AL4jI5yKyVESiGu4kIneKyFYR2Xri9GkP\nDqeUUqo5ngR6KDAW+F9jzBigDHiw4U7GmGeNMSnGmJRecXEeHE4ppVRzPAn0w8BhY8xnrvsrcQa8\nUkopH3A70I0xx4CvReRC16YpwO7mnlNR4e7RlFJKtcTTUS4/BJa5Rrj8G5jX0hP27HHeDhvm4ZGV\nUkrV49E4dGPMdld9fKQxZpYxptmzng5rJOXDkoFvg10ppZR3eNpDd8u3oZ4HaG9dKaW8wadT/+v2\n1rXHrpTyG++/DzNmQGqq8/b9933dolbxSQ+9rppQj9yTp/V1pXzAGIOINHm/03n/fVi06NtRHMeO\nOe8DTJvmu3a1gs8DvUbDYNdQV6r9vfrBB5Rt2cL8zZuRoiJMfDxL09OJSk3lxqlTfd0831i8uPGQ\nvIoK53Y/D3S/W22xfFgy5cOStQyjVDszxlC2ZQvvrl7N0uPHMcaw9Phx3l29mrItWzDG+LqJvnH8\neNu2+xG/6aE3VD4sWcswSrUjEWH+5s3gcPAu8K5r+0yHw9lj76xll969nWWW8233c37XQ6+rpreu\nPXal2ocUFTG/wbb5ru2d1r33gtVaf5vV6tzu5/w60OvS8etKeZ+Jj2dpg21LXds7rWnT4JFHoE8f\nEHHePvKI39fPwY9LLufTcPw6aClGKXcZY1ians67q1c7yyw4w/zdkBBIT2d+Zx7tMm1aQAR4QwEV\n6DV0RIxSnhMRolJTmQm1o1zmx8eDa5RLpw3zACYdeSZ7+PAU8/LLW73+upE641Qpt+k4dP8nKSl5\nxpiUlvYLmBp6c7S+rpT7Goa3hnngCsiSy/lofV0p1dkFRQ+9rpphjqA9dqVU5xI0PfSGdEVHpVRn\nE3Q99IZ0RUelVGcR9IEOjcswGuxKqWDUKQK9htbXlVLBLGhr6M3RETFKqWDUqXroDWmPXSkVTDp1\noNfQ+rpSKhhooLvoiVOlVKDTQG9Ag10pFag00Jug9XWlVKDRQG+B9taVUoFCA70VtAyjlAoEGuht\noMGulPJnGuhu0Pq6UsofaaB7oGFvXcNdBSJbRYWvm6C8RAPdQzW9de2xq0CUX1jIstxc8gsLfd0U\n5QWdci2X9lI+LLn2wtWg68Mo/5a/di05RUVYS0vJOXAA4uNJysrydbOUB7SH7mV64lQFgvy1a8k5\nepTI4mLCq6qILC4m5+hR8teu9XXTlAc00NuJBrvyV/mFheQUFRFps2Gx2wGw2O1E2mzkFBVp+SWA\naaC3M62vK39iq6ggu6CALqWltWFew2K306W0lOyCAj1RGqA00DuIjohR/iDaamV8YiLnYmKwWyz1\nHrNbLJyLiWF8YiLRVquPWqg84XGgi4hFRD4XkTXeaFAw0xExyh8kJSSQGR9PeXR0bajbLRbKo6PJ\njI8nKSHBxy1U7vJGD/1+QKOpjbS+rnwpKSuLzL59KY+NpTIsjPLYWDL79tVRLgHOo2GLItIfyAIW\nAT/1Sos6kZpQrxnqqMMcVUdKysqCwkKyCwoYn5ioPfMg4Ok49D8BDwAxTe0gIncCdwL06XOBh4cL\nTg3Hr4OGu+oYSQkJDOzeXWvmQcLtkouIzACKjDF5ze1njHnWGJNijEmJi+vl7uGCntbXla9omAcP\nT2romcBMETkIvA5MFpFXvNKqTk7r60opd7gd6MaYh4wx/Y0xg4AbgH8ZY272Wss6OZ2YpJRqKx2H\n7uc02JVSreWVQDfGrDfGzPDGa6nz0/q6Uqol2kMPMNpbV0o1RZfP9SMVFTas1ugW96sJdYA9e5yD\njHSYo1JKe+h+orAwn9zcZRQW5rfpedpjV0rV0B66Hyheu4QjRfnElZZw5MAuouKTiM26u9XPbzjj\nFLTHrlRnpD10Hyteu4T9R3cQXXyGLlVVRBefYf/RHRSvXdLm19ITp0p1bhroPlRYmM++onyiGlxo\nIMpmY19RfpvLLzVqgl3LMEp1LhroPlJRYaOgIBtracl5LzRgLS2hoCCbigqb28fQ+rpSnYsGuo9Y\nrdEkJo6nIqbreS80UBHTlcTE8a0a9dIcnZikVOehge5DCQlJDI1PoqzBhQbKoqMZGp9EQkKS146l\n9XWlgp8Guo/FZt3NkL6jsMV241xYGLbYbgzpO6pNo1zaQuvrSgUvHbboB2Kz7qZfYT4FBdkkJo4n\n1os986Y0XINdhzkqFfg00P1EQkIS3bsP9Lhm3hY641Sp4KIlFz/SkWHekNbXlQp82kNXtb4N9W8v\nQqU9dqUCh/bQVSM6IkapwKQ9dNWkhj127a0r5d+0h65apBOTlAoM2kNXraIjYpTyf9pDV22m9XWl\n/JP20JVbtL6ulP/RHrryiNbXlfIf2kNXHtP6ulL+QXvoyqu0vq6U72gPXXmdzjhVyje0h67ajc44\nVapjaaCrdqcnTpXqGBroqkPopfCUan8a6KpDabAr1X400JVPaH1dKe/TQFc+1bC3ruGulPt02KLy\nuboTk2quc6rDHJVqO+2hK7/i7fq6raLC8xdRKkAEZKBXVNh83QTVjrxVX88vLGRZbi75hYVeaplS\n/i3gSi6FhfkUFGSTmDiehIQkXzdHtaPyYcm1JZgarS3F5K9dS05REdbSUnIOHID4eJKystqnoUr5\nCbcDXUQGAH8HegMGeNYY82dvNex8itcu4UhRPnGlJRw5sIuo+CRis+5uz0MqH3Onvp6/di05R48S\nabNhsduxFBeTY7fD2rUa6iqoeVJyqQYWGGOGA+nAvSIy3DvNaqx47RL2H91BdPEZulRVEV18hv1H\nd1C8dkl7HVL5mdbU1/MLC8kpKqoNcwCL3U6kzUZOUZGWX1RQczvQjTFHjTHbXH8vBfYA/bzVsLoK\nC/PZV5RPVIMf0iibjX1F+RQW5rfHYZUfam5ikq2iguyCArqUltb+P6lhsdvpUlpKdkGBnihVQcsr\nJ0VFZBAwBvjsPI/dKSJbRWTr6dMn2vzaFRU2CgqysZaWnPeH1FpaQkFBtp4o7WTOF+zRVivjExM5\nFxOD3WKpt7/dYuFcTAzjExOJtlp90WSl2p3HgS4i0cAq4MfGmJKGjxtjnjXGpBhjUuLierX59a3W\naBITx1MR0/W8P6QVMV1JTByP1Rrt7ltQAaxhsCclJJAZH095dHTt/xe7xUJ5dDSZ8fEkJST4srlK\ntSuPAl3kymrNAAANcklEQVREwnCG+TJjzJveaVJjCQlJDI1PoqzBD2lZdDRD45N0tIuqF+oh38li\nWJe+lMfGUhkWRnlsLJl9++oJURX0PBnlIsBzwB5jzNPea9L5xWbdzZC1S9hXlI+1tISKmK4M1VEu\nqo66I2J6AoNshfznbAHjExO1Zx6gbBUVWiJrA0/GoWcCtwBfiMh217aHjTHved6s84vNupt+dcah\nxwZhz7yiwqblIy8oH5bMgD3Q09qdkGIraJ4HnPzCQrIL9BdyW7gd6MaYbEC82JZWSUhIonv3gUEZ\nejppyrtqe+y6PkzA0Ylh7gm4maJAUIa5TppqP3qN08CiE8PcF5BruQQbnTTVMXQNdv+nE8M843eB\n3tnGk+ukqY6nV0zyTzoxzHN+FeiFhfnk5i7rNCGmk6Z8Ry+F5390Ypjn/KaG3hlryDWTpo4c2EVo\n8Zl6oa6TpjpGTajXXdVR6+u+k5SQAPHx5LjKLBa7XSeGtYFf9NA7cw1ZJ021Tnt/S9H6uv9Iysoi\ns69ODHOHzwNda8iuSVN9R2GL7ca5sDBssd0Y0ndU0H9Daa2OLMVpGcY/JGVlkXnllVSMHk3mlVdq\nmLeST0suNTXkuBZqyME67rwuf5k05W8Tm3xRiqs747RmqKOWYTpeUkICA7t315p5G/i0h64Lb9WX\nkJBEWtpNPiuz+NtJaX8oxWmP3bc0zNvG5ydFExKSiIpPYr99R23ZpW4NORin9zfHV7+8/O2kdGFh\nPkeK8oluohTXrzC/w37x6YlTFSh8XkOHpmvIXabc7OumdQr+0BOuy1+Hc+qJU+XvfN5Dr9GwhlwG\n7MhdpuuatDN/6gnX8PfhnA2XEtDeuvIXfhPo8O3CW+f++Qr7/Ojrf7Dy55PSgVCKKx+WrGUY5Vf8\nouRS17l/vuJXX/+Dmb+flA6E4Zw641T5kw7toTscjmYf98ev/8HO33vC/jKcsyUNT5xqb135Qof2\n0MvKTjU5JM5fT4R1Bv7eE/b1cM62qOmxa29d+UKH9tDPng3hww9z6NWrghkzkus95u8nwoKdv/eE\nA+1z1/q68oUODXRjhOpqB1VVH7BmzQlmzJha7/G2fv33t1mNgS6YrwblCzrjVHW0Di25hITYiYs7\nQ1VVKJWVeaxZ80GjfVr79d/fZjUGCw3z9qHj11VH6NAeemionepqCyBUVYFIHmvW9OKyyy6sFyQt\nff33t1mNSrWGXgpPtbcO7aEbAyCEhDiwWAynTvWguDibnJznGvW0mzoR5m+zGpVqK51xqtpLB49D\nF0JDq7BaKygvj8BuD8FqLePMmTL+8Y8NrF1bP9Qbfv3XpXZVMNERMcrbOjTQRRyEh1dRVRVKdLSN\nXr1OYIxw6lRPzpyJ4ejRnEahXkOHNapgpb115S0dHOiGyspQHA7BYrETGlpNeXkkpaUx2O0WbLZI\niopyztvT9vdZjUp5omFvXcNduaNDA726OhQQwsOrAKisDCcy8iwxMaUA2O0WSku7NNnT1su1qWCn\n9XXliQ4NdLs9lG++6YHdHoLdbqG6OhS7PYTu3b8hNLSa8PBzxMSca7an7e+zGpXyBq2vK3d0+GqL\nxoAxzvJKVFQ5AN9804OoqDJ69DhJWFgKCQlJFBcfJza2N9B4ApG/z2pUylt0xqlqiw4eh15Njx6n\nqK62EBVVTlVVKHZ7OBaLc7sxUFz8JWvWnCQk5BADByYTFzegNrjrllR0VqPqLPSKSaq1fLgeuqG6\nOpyQkB706PEfHA6hqiqcyMgSHI4zVFaGsX//FioqvqCoKJ4DB3KIj4esrG9DXcNcdSa6oqNqSYef\nFD11qjthYVWEhBjAQWTkv3E4oLKyC6GhVYSGOhCB0NAqQkIcREaWExt7huLiyGaHNXYWOixT6YgY\n1ZQODfRz52x8tfdDIuxlxFSX0K3raXZs38ru3TsIC6sgPLzaNZsURJx/HA4hLq6YuLhTzQ5r7Ax0\n/RpVl46IUQ11aKBbpIpDhTvZ/nkeIQ4H2z7/nH37v6SqspKwMOdkIZHGz3M4IC6uGIulqtlhjcGs\neO0Sjny4hLjtn3LkwyUBvdRBZ/vs2pteMUnV6NBAj462Mvy732V3QQEvvvUW+/buZWhiIikpYxBX\nkpuaLjrOILdYDCEhhtOnY7Hbw1oc1thWzYWLPwRPRYUtqNavqfmWcfBgXss7q1bT3rqCDj4parHb\nSRkzhj0HDmAA25kzCM4QF3Hebtu2jbCwMC4aMRJLiDPcBYgOKaEqOoL4+EyvTSAqrDP0seFrNvdY\nRykszGf37o/oUvw1PYPgsnw1q2SGO+zsPXWY6l0bSJzxE183K6joio6dW8eOcjGQv2kTBgiprqZa\nhE+yszn49dd8//tX8/nn29i3bx9WqxUwjLzoImfP3TjoEmvoV3SaaVneCa+1a/MpKsqhtNTaaARN\nc491lOK1S/jqxG7sMdGUd+lCeWQkMaWltY/XXb8mEIZv1nzLACjt1o3QynMUmJOEvvAAg+b9zset\nCz46IqZzkroljjY/WWQq8GfAAiw1xjzV3P49o3uYvj1iGDugPxeOH8+nO3eyITubc+fO0aVLBBER\nXejVqw+VlWe5cOhQEKFLaCgXjRqFpaoKCMEentnoSkdttXZtPkeP5mCzRWK3W7BY7ERHl9O3byZA\nk491VKjXhF+UzUZ5RASnevQAoMc339SGut1iwRbbjX5X3u33PfTCwnyOfLgE7NWc6dYNi92OGIND\nhKqwMBLDe2pPvR1Fam894ElKSp4xJqWl/dyuoYuIBVgMTAOGA3NFZHhzz+kSG0vygPGkDB9NbEkJ\nqWOTGX/xRMLDrZw7V8HJk6c4ceJYbZjv+/JLqisrkepqjMVCiLFTVZXHoUPu118LC52975rABmoX\nBisu/pgzZz4+72MdNbqm4RLBMTYbPU6dAuBU9+6UxsQE1Po1Natk2h32emEOEGIModXVFFSd8ugz\nVc1rWF/XGnvw8uSkaBpQYIz5tzGmEngd+H5zT4iN7c59f3qZQVf9PyqHjGLL9oupqIyid+++WCyh\nhIZaOHPmDF/u28e+L79k2JAhJI8ZQ4gIxhiqwsI4fborhw5tdeuEZU24lJZ2qQ3sGiKGLl3KsFrL\ngPrfWlpaNMxbmloiuCbUjQgne/SgpFv3gFm/xmqN5oILUjjTvQdSJ8zB+a9sQkLoduqU25+paj09\ncRr83C65iMi1wFRjzHzX/VuAccaY+xrsdydwp+vuCGAXQEhISKjDEdEvJER6hoU5ADt2u53q6mpC\nQkIICwuje1zct6NfAGMXqh0WU1Z28j9nz5497U67IyIi4qKieg52OEIbDZAMDa0yANXVYY0eCwmp\nbs1xewIn3WlX3fb1jIoaHOpwNGpDVWioqRKpKikpOezu+/eQ2++vd9euiZbIyFgxxnkiHEAES3U1\nBszJsjK3P1Mv8fiz83P6/gLbhcaYmJZ2aveTosaYZ4FnAURka2vqQIFK31/gCub3Bvr+Ap2IbG3N\nfp6UXI4AA+rc7+/appRSygc8CfQtwBARGSwi4cANwLveaZZSSqm2crvkYoypFpH7gA9xDlt83hjT\n0jCQZ909XoDQ9xe4gvm9gb6/QNeq9+fROHSllFL+o0PXclFKKdV+NNCVUipIdEigi8hUEflSRApE\n5MGOOGZHEpHnRaRIRHb5ui3eJiIDRGSdiOwWkXwRud/XbfImEbGKSK6I7HC9vyd83SZvExGLiHwu\nImt83Zb2ICIHReQLEdne2uF9gUJEuonIShHZKyJ7RCSj2f3bu4buWiJgH3A5cBjn6Ji5xpjd7Xrg\nDiQiEwEb8HdjzAhft8ebRKQv0NcYs01EYoA8YFawfH7inLkWZYyxiUgYkA3cb4zZ7OOmeY2I/BRI\nAboaY2b4uj3eJiIHgRRjTNBNLBKRl4CNxpilrtGEkcaYM03t3xE99DYvERBojDEbgG983Y72YIw5\naozZ5vp7KbAH6OfbVnmPcapZcyDM9SdoRgqISH8gC1jq67aothGRWGAi8ByAMaayuTCHjgn0fsDX\nde4fJogCoTMRkUHAGOAz37bEu1wlie1AEfCRMSaY3t+fgAcAh68b0o4M8LGI5LmWGgkWg4ETwAuu\nktlSEYlq7gl6UlS1iohEA6uAHxtjSnzdHm8yxtiNMaNxznZOE5GgKJuJyAygyBgT7EtZjnd9ftOA\ne10l0GAQCowF/tcYMwYoA5o9B9kRga5LBAQ4V215FbDMGPOmr9vTXlxfZ9cBni247z8ygZmuGvPr\nwGQRecW3TfI+Y8wR120R8BbOMm8wOAwcrvONcSXOgG9SRwS6LhEQwFwnDZ8D9hhjnvZ1e7xNRHqJ\nSDfX3yNwnrzf69tWeYcx5iFjTH9jzCCcP3f/Msbc7ONmeZWIRLlO1uMqR1yBa0XXQGeMOQZ8LSIX\nujZNAZodjNARqy26s0RAQBGR14BJQE8ROQw8box5zret8ppM4BbgC1edGeBhY8x7PmyTN/UFXnKN\nxgoBVhhjgnJ4X5DqDbzlWmY7FHjVGPOBb5vkVT8Elrk6w/8G5jW3s079V0qpIKEnRZVSKkhooCul\nVJDQQFdKqSChga6UUkFCA10ppYKEBrpSSgUJDXSllAoS/x+cirrF/piIdgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bc12a0320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Support Vectors = 17, \n",
      "# Margin Vectors = 5\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bc0c2b1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Support Vectors = 18, \n",
      "# Margin Vectors = 15\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bc0c2b2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Run LLS for the created data\n",
    "alpha = LLS(x22, y22)\n",
    "contour_LLS(x22, y22, alpha)\n",
    "\n",
    "#Run SMO with C=0.01 for the created data\n",
    "beta0 = SMO(x22, y22 , 0.01, 10000)\n",
    "contour_SVM(x22, y22, beta0, x22, y22, 0.01)\n",
    "\n",
    "#Run SMO with C=1 for the created data\n",
    "beta1 = SMO(x22, y22 , 1, 10000)\n",
    "contour_SVM(x22, y22, beta1, x22, y22, 1)\n",
    "\n",
    "#Run SMO with C=100 for the created data\n",
    "beta2 = SMO(x22, y22 , 100, 10000)\n",
    "contour_SVM(x22, y22, beta2, x22, y22, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Task 2.4\n",
    "#Create data the same way we did in task 2.2\n",
    "x24 = np.array([np.random.exponential(1/4, 2000), np.random.exponential(2, 2000)])\n",
    "x24 = x24.reshape(2000,2)\n",
    "y24 = np.array([-np.ones(1000), np.ones(1000)]).flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy of LLS = 0.832\n",
      "C = 0.01, accuracy of SVM = 0.6565\n",
      "C = 1, accuracy of SVM = 0.9145\n",
      "C = 100, accuracy of SVM = 0.8975\n"
     ]
    }
   ],
   "source": [
    "#Run LLS for data x25 with the alpha computed in task 2.3\n",
    "pred_LLS = alpha[0] + np.matmul(alpha[1:], x24.T)\n",
    "pred_LLS = np.where(pred_LLS > 0, 1, -1) #Classify our prediction data\n",
    "acc_LLS = np.sum(pred_LLS == y24)/2000\n",
    "print('accuracy of LLS =',acc_LLS)\n",
    "\n",
    "#Run SVM for the data x24 with the betas computed in task 2.3\n",
    "pred_SVM0 = f(x24, beta0, x22, y22, np.inner)\n",
    "pred_SVM0 = np.where(pred_SVM0 > 0, 1, -1) #Classify our prediction data\n",
    "acc_SVM0 = np.sum(pred_SVM0 == y24)/2000 #Calculate the accuracy\n",
    "print('C = 0.01, accuracy of SVM =',acc_SVM0)\n",
    "\n",
    "pred_SVM1 = f(x24, beta1, x22, y22, np.inner)\n",
    "pred_SVM1 = np.where(pred_SVM1 > 0, 1, -1)\n",
    "acc_SVM1 = np.sum(pred_SVM1 == y24)/2000\n",
    "print('C = 1, accuracy of SVM =',acc_SVM1)\n",
    "\n",
    "pred_SVM2 = f(x24, beta2, x22, y22, np.inner)\n",
    "pred_SVM2 = np.where(pred_SVM2 > 0, 1, -1)\n",
    "acc_SVM2 = np.sum(pred_SVM2 == y24)/2000\n",
    "print('C = 100, accuracy of SVM =',acc_SVM2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Support Vectors = 100, \n",
      "# Margin Vectors = 55\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nHASR2wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bc4c985f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Support Vectors = 12, \n",
      "# Margin Vectors = 11\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAI4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bc4c98630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Task 2.6\n",
    "x26 = np.zeros((100, 2)) #Create an array to save our data points\n",
    "y26 = np.append(-1 * np.ones(50), np.ones(50), 0) #Create an array to classify our data\n",
    "k = 0\n",
    "while k < len(x26):\n",
    "    if k < len(x26) / 2:\n",
    "        temp = np.random.uniform(-1, 1, 2) #Create a two uniformly distributed numbers  in [-1,1)\n",
    "        if np.inner(temp, temp) < 1: #Check if the created vector is in the unit sphere\n",
    "            x26[k] = temp\n",
    "            k += 1\n",
    "    else:\n",
    "        temp = np.random.uniform(-2, 2, 2) #Create two uniformly distributed number in [-2,2)\n",
    "        if 1 < np.inner(temp, temp) < 4: #Check if norm of the vector is  in (1,2)\n",
    "            x26[k] = temp\n",
    "            k += 1\n",
    "#Task 2.6 a.)\n",
    "#Run SMO and plot the scattered data and the hyperplane corresponding to f=0, as seen before\n",
    "beta3 = SMO(x26, y26 , 10, 10000)\n",
    "contour_SVM(x26, y26, beta3, x26, y26, 10)\n",
    "\n",
    "#Task 2.6 b.)\n",
    "x26_transf = phi(x26) #Transform data with given feature function\n",
    "beta4 = SMO(x26_transf, y26, 10, 10000) #Here we just need the transformed training data, so we don't pass the feature function  \n",
    "contour_SVM(x26_transf, y26, beta4, x26_transf, y26, 10, phi) #Here we need to pass the feature function, so we can later transform the grid\n",
    "'''The feature map increases the dimension of the data, therefore the problem is now posed in an higher dimension. This can \n",
    "be an advantage if the data is in the lower dimension not seperable by a hyperplane, in the higher dimensions this could \n",
    "be possible and so we compute a hyperplane in the higher dimension to classify the data. In the example it is obvious that\n",
    "the data is in two dimensions not seperable by an hyperplane, but in three dimensions it is possible and so we get \n",
    "a better classification result'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Support Vectors = 8, \n",
      "# Margin Vectors = 8\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22bbe02fda0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Task 2.7\n",
    "#gaussian kernel\n",
    "def gaussian_kernel(t, x, sigma = 1):\n",
    "    if t.ndim == 1: #Check if t is a vector\n",
    "        t = np.array([t])\n",
    "    if x.ndim == 1: #Check if x is a vector\n",
    "        x = np.array([x])\n",
    "    M = distance.cdist(t,x) \n",
    "    return np.exp(-np.square(M)/(2*sigma)) #Return the gaussian kernel\n",
    "    \n",
    "#Here we run SMO and plot the scattered data and the hyperplane corresponding to f=0 with the gaussian kernel\n",
    "beta5 = SMO(x26, y26, 10000, 10, gaussian_kernel)\n",
    "contour_SVM(x26, y26, beta5, x26, y26, 10, kernel = gaussian_kernel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.9376\n",
      "confusion Matrix:\n",
      " [[ 958    0    3    0    0    4    7    2    3    3]\n",
      " [   0 1124    1    2    0    2    4    1    1    0]\n",
      " [  11   19  930   11    5    0    7   21   25    3]\n",
      " [   1    2   14  933    0   23    2   10   16    9]\n",
      " [   2    2    8    1  924    2    9    2    2   30]\n",
      " [   9    1    6   17    2  825   13    5    8    6]\n",
      " [   7    3   11    0    7   21  905    1    3    0]\n",
      " [   0   15   18    4    5    1    1  960    1   23]\n",
      " [   5    5   11   13   10   15    9   13  882   11]\n",
      " [   7    6    4    8   22   10    1   12    4  935]]\n"
     ]
    }
   ],
   "source": [
    "#Task 2.8\n",
    "#This is just the code from the sheet\n",
    "#Load MNIST Data\n",
    "#!pip install urllib3\n",
    "#!python -m pip install --upgrade pip\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import confusion_matrix\n",
    "import os\n",
    "import gzip\n",
    "from sklearn import svm\n",
    "from urllib.request import urlretrieve\n",
    "def download(filename , source='http://yann.lecun.com/exdb/mnist/'):\n",
    "    print(\"Downloading %s\" % filename)\n",
    "    urlretrieve(source + filename , filename)\n",
    "def load_mnist_images(filename):\n",
    "    if not os.path.exists(filename):\n",
    "        download(filename)\n",
    "    with gzip.open(filename, 'rb') as f:\n",
    "        data = np.frombuffer(f.read(), np.uint8, offset=16)\n",
    "    data = data.reshape(-1, 28, 28)\n",
    "    return data / np.float32(256)\n",
    "def load_mnist_labels(filename):\n",
    "    if not os.path.exists(filename):\n",
    "        download(filename)\n",
    "    with gzip.open(filename, 'rb') as f:\n",
    "        data = np.frombuffer(f.read(), np.uint8, offset=8)\n",
    "    return data\n",
    "\n",
    "X_train = load_mnist_images('train-images-idx3-ubyte.gz')\n",
    "y_train = load_mnist_labels('train-labels-idx1-ubyte.gz')\n",
    "X_test = load_mnist_images('t10k-images-idx3-ubyte.gz')\n",
    "y_test = load_mnist_labels('t10k-labels-idx1-ubyte.gz')\n",
    "\n",
    "#Task 2.8 a.)\n",
    "\n",
    "#At first we create 500 indices without repetition\n",
    "a = np.arange(len(X_train)) #Therefore we create at first an interval from 0 to len(X_train)-1\n",
    "np.random.shuffle(a) #then shuflle it\n",
    "indizes = a[:500] #and then take the first 500 entries\n",
    "\n",
    "#Here we create a dictionary, so GridSearchCV knows for which gamma and C values it has to run SVC \n",
    "tuned_parameter = [{'kernel':['rbf'],'gamma':[0.1,0.01,0.001], 'C':[1, 10, 100]}]\n",
    "clf = GridSearchCV(svm.SVC(), tuned_parameter, cv = 5, iid = False) #Pass which classification Algorithm we want to use (SVC) and for which parameters we want to run it\n",
    "nsamples, nx, ny = X_train[indizes].shape \n",
    "d2_X_train = X_train[indizes].reshape((nsamples,nx*ny)) #Reshape the training data, so it has the right shape for the fit function\n",
    "clf.fit(d2_X_train, y_train[indizes]) #Run the 5-fold crossvalidation with the training data\n",
    "C_best = clf.best_params_['C'] #Return the best choice for C \n",
    "gamma_best = clf.best_params_['gamma'] #Return the best choice for gamma\n",
    "\n",
    "#Task 2.8 b.)\n",
    "#Create again random indices as seen before\n",
    "b = np.arange(len(X_train))\n",
    "np.random.shuffle(b)\n",
    "indizes_b = b[:2000]\n",
    "\n",
    "nsamples, nx, ny = X_train[indizes_b].shape\n",
    "d2_X_train_b = X_train[indizes_b].reshape((nsamples,nx*ny)) #Reshape our training data as seen before\n",
    "\n",
    "clf_2 = svm.SVC(C = C_best, gamma = gamma_best) #Create the classifier\n",
    "clf_2.fit(d2_X_train_b,y_train[indizes_b]) #Give the classifier the training data\n",
    "\n",
    "n_tests, nx, ny = X_test.shape\n",
    "d2_X_test = X_test.reshape((n_tests,nx*ny)) #Reshape our test data\n",
    "\n",
    "y_pred = clf_2.predict(d2_X_test) \n",
    "\n",
    "print('accuracy:', accuracy_score(y_test,y_pred))\n",
    "print('confusion Matrix:\\n', confusion_matrix(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "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"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
