{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"preamble": true
},
"source": [
"(Defining latex commands: not to be shown...)\n",
"$$\n",
"\\newcommand{\\norm}[1]{\\left \\| #1 \\right \\|}\n",
"\\DeclareMathOperator{\\minimize}{minimize}\n",
"\\newcommand{\\real}{\\mathbb{R}}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Monster vs. Mouse (50 Points)\n",
"\n",
"While trying to sleep, you hear some noise under your bed. Being a big Science Fiction fan you obviously immediately think it's a monster. A BIG monster... or maybe two?!? Frightened to death, you do not dare to move, but your brain is racing. And it recalls that the other day, you saw a mouse disappearing on the other side of the bedroom... So maybe it is (just?!?) a mouse. Or, just something else... Hmmm. Remembering your Emperical Inference classes, you decide to evaluate the probability that, given some noise under your bed, there is a monster.\n",
"\n",
"You define the random variables:\n",
"\n",
" + n = some noise under your bed (Values 0 or 1)\n",
" + M = 0, 1 or 2 monsters under your bed (Values 0, 1 or 2)\n",
" + m = a mouse under your bed (Values 0 or 1)\n",
" + e = something else (e.g. only air) under your bed (Values 0 or 1),\n",
"\n",
"and express your beliefs about monsters, mice and noise, by assigning numbers to P(M), P(m), P(e), P(n|M), P(n|m), P(n|e). Given that you heard some noise under your bed, you then calculate the Maximum a Posteriori (MAP) of M (i.e., the maximum of P(M|n=1)).\n",
"\n",
"Please share your beliefs and your results with us."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Programming a Hand-Featured SVM (50 points)\n",
"\n",
"The goal of this exercise is to implement a very simple SVM using an off-the-shelf optimizer, in the case of a 2-dimensional input space.\n",
"Most of it has already been implented in an iPython Notebook that you can find on the homepage of the course, and that we reproduce hereafter.\n",
"\n",
"You are asked to hand out a print out of the lines marked \"### CHANGE THIS LINE ###\", as well as your plots."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The SVM equation in the linear separable case\n",
"\n",
"Let $(x_1,t_1), \\ldots, (x_N,t_N) \\in \\real^p \\times \\{-1,1\\}$ be N data points with their binary labels. For this exercise, $p=2$. \n",
"In the lecture, we saw that trying to maximize the margin between two linearly separable classes of data points led to the problem:\n",
"\\begin{equation}\n",
" \\minimize_{\\substack{ \\{ w \\ \\in \\real^2,\\ b \\ \\in \\ \\real \\} }} \\frac{1}{2} \\norm{w}^2 \\quad \\mathrm{subject \\ to} \\quad t_n(w^T x_n + b) \\geq 1 \\quad n = 1 \\ldots N ,\n",
"\\end{equation}\n",
"whereby the points are subsequently classified according to the rule:\n",
"\\begin{equation}\n",
" t = \\left \\{ \n",
" \\begin{array}{cc}\n",
" \\ \\ 1 \\quad \\mathrm{if} \\quad w^T x + b \\geq 0 \\\\\n",
" -1 \\quad \\mathrm{if} \\quad w^T x + b < 0\n",
" \\end{array}\n",
" \\right . .\n",
"\\end{equation}\n",
"The function $\\mathop{l}(w,b) := \\frac{1}{2} \\norm{w}^2$ is called the _objective_ function. The equations $t_n(w^T x_n + b) \\geq 1$ are called the (_inequality_) _constraints_.\n",
"\n",
"In practice, one often preferres to transform this problem into its so-called _dual_ formulation. However, in this exercise, we will stick to the above equations: the _primal_ formulation."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Loading the required packages."
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import math as m\n",
"from numpy import *\n",
"from scipy import optimize\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definition of the data point \n",
"\n",
"_X = location of the data points_ $\\in \\real^{N \\times 2}$ \n",
"_t = label class of each point_ $\\in \\real^N$"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X_ = np.array([[1.,3.],[2.,6.],[2.,3.],[-1.,0],\n",
" [1.,0.],[2.,2.],[3.,1.],[0.,-1.]])\n",
"t_ = np.array([1,1,1,1,-1,-1,-1,-1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definition of the Objective Function and its Gradient\n",
"\n",
"_wb = $(w_1, w_2, b) = (w , b)$_ $\\in \\real^2 \\times \\real$\n",
"\n",
"(Note that the gradient of the objective function (here called 'jac') does not appear in the equations of an SVM. But our off-the-shelf optimizer uses it for its computations.)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def objective(wb):\n",
" ### changed ###\n",
" return 1/2*(wb[0]*wb[0]+wb[1]*wb[1])\n",
"\n",
"def jac(wb):\n",
" return hstack((wb[0:2],array([0])))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definition of the Inequality Constraints and of their Gradient\n",
"\n",
"(Again, the gradient does not appear in the SVM equations, but it is needed for our optimizer.)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def ineq(wb):\n",
" #writing \"return a-b\" would encode the constraint a-b >= 0\n",
" ### changed ###\n",
" return t_*(dot(wb[0:2],X_.T)+wb[2])-1\n",
"\n",
"def grad(wb):\n",
" return -1*hstack(((-t*X.T).T, -t[:,newaxis]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Optimisation of the SVM"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"def optimizeSVM(X_,t_):\n",
" global X,t\n",
" X = X_\n",
" t = t_\n",
" wb0 = np.random.randn(3) #initialization\n",
" #wb0 = array([-1.,-2.,0.2])\n",
"\n",
" cons = {'type':'ineq', #constraints\n",
" 'fun': ineq,\n",
" 'jac': grad}\n",
"\n",
" opt = {'disp':False}\n",
"\n",
" opt_result = optimize.minimize(objective, wb0, jac=jac,constraints=cons, #the optimizer\n",
" method='SLSQP', options=opt)\n",
" wb_opt = opt_result[\"x\"] #result of the optimization\n",
" \n",
" return wb_opt\n",
"\n",
"wb_opt = optimizeSVM(X_,t_) #the optimized parameters"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting the Result"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": [
"iVBORw0KGgoAAAANSUhEUgAAAXAAAAEACAYAAACqOy3+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n",
"AAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm8lVX1x/HPl0lQcDZHcADNAaeSeRDFiesETuGEmmCW\n",
"glrO08NjhZoz5IhjzmapmZZpSqmZWmqZ2q8gDTSn1AzMufX7Y13wYhd49j3n3jPc9X69eOU596yz\n",
"t6TLzXr22ltmRgghhNrTodITCCGE0DKRwEMIoUZFAg8hhBoVCTyEEGpUJPAQQqhRkcBDCKFGlZTA\n",
"JX1R0tNNfr0raVK5JhdCCGHRVK594JI6AK8A/c1sTlm+NIQQwiKVs4SyHTArkncIIbSNcibwscBN\n",
"Zfy+EEIIi1GWEoqkLnj5ZGMze7PkLwwhhLBEncr0PaOA3zeXvCXFYSshhNACZqbF/bxcCXxf4OaW\n",
"TqIaSJpsZpMrPY8lqYV51sIcIeZZblU1T68KXACMBHbH7P8++1EVzXMxiix+S07gkpbBH2BOKPW7\n",
"QgihZNKqwA+BfwEDMHu3wjNqNSU/xDSz98xsZTObW44JhRBCi0lbAU8CDwGj6zl5Q/lKKPVgRqUn\n",
"UNCMSk+ggBmVnkBBMyo9gYJmVHoCBc2o6OjSOOA84DDM7ljMJ2e0zYRaX9kaeRY5gGS1UAMPIdQo\n",
"qRNwDrALvup+rsIzKosiuTNW4CGE2iWtDNwKfAT0x+ydCs+oTcVhViGE2iRtgde7nwR2aW/JG2IF\n",
"HkKoRdJYYBpwJGa3Vno6lRIJPIRQO6SOwBRgH2A7zP6QFs4gYJYZb7TG9NpalFBCCLVBWgG4B9gK\n",
"6NeC5P014E5g/VaYXUVEAg8hVD9pE+AJ4HlgR8z+WTyULhKXA0cBQ814tJVm2eaihBJCqG7SHsDl\n",
"wDcxuz4tlNWB24E3gAFm1FXDYazAQwjVSeqAdAZ+psmoFiTv/viq/T5gz3pL3hAr8BBCNZKWA24A\n",
"lsP3d7+eFs4hwNnAeDN+0gozrAqxAg8hVBdpQ+Bx4O/4TpPCyVuis8RU4ERgeD0nb4gVeAihmki7\n",
"AlcDJ2F2ZVooq+CnEM4D+ptR1wdZQazAQwjVwOvdpwGXAru1IHl/Ce/IfATYrT0kb4gVeAih0qQe\n",
"wLXAGni9+x9p4ewPXAh83Yzbyz/B6hUJPIRQOVIfvLnmMWA/zD4sHkon4CxgDLCtGc+2ziSrV8kl\n",
"FEnLS7pd0guSnpc0sBwTCyHUOWlH4FHg+/gZ3inJeyXgZ8BmQL/2mLyhPCvwi4B7zWwv+bm8y5Th\n",
"O0NoNX2lhp4wqQd0nQsfzIGpfzK7t9LzajckAccBRwN7YfZwWjib4av224GTzfikcGyuLsDHlrXy\n",
"RQhtpKQELt+rOczMDgIws0+gfTw8CLWpr9QwCC6aDn3mvzcBeveViCTeBvwO3auA3vh9lXPSwtkb\n",
"uASYZLboi9Sbjc21BvBjvOxyZ0pstSq1hLIu8KakayQ9JWm6pKXLMbEQWkNPmNQ0eQNMhz69YGKl\n",
"5tRuSOvgJZMPgeEpyVuio8QU/OadHVqQvAfhu1TuBu5Kia1mpZZQOgFfAo40syclXYhvoD+96Yck\n",
"TW7ycoaZzShx3BBapAd0be797tCtrefSrkjbAjcBZwJTSbjLUWL5xthueL37zaShc43Hj6A9xDK7\n",
"JyW2LUkaAYxIiSk1gb8MvGxmTza+vh1P4Asxs8kljhNCWcyFD5p7fx6839ZzaRe83n0Unhf2w+zB\n",
"tHA2xssd9wLHmfFx4Vivd18IbAMMs8z+L2Xstta4sJ0x/7WkbEkxJZVQzOw1YI6kDRrf2g6oiwtF\n",
"Q32aA1MnwMym742HWbP9dpdQTlI3fH/3wcDAFiTv0cCvgClmHJ2YvFcFfgmsCQyo9uTdUiXfSi9p\n",
"c+BKoAswCzjEzN5t8vO4lT5Ulb5SQy+Y2B26zYP3Z8O0eIBZZlJP/IHhTOBQzP5TPJQOeBn2UPwU\n",
"wSeShs7VD/gR3pJ/hmX235T4alEkd5acwMsxiRBCHZGG4TfFXwCcm1jvXha4HlgJ2MuM15KGzjUO\n",
"OBc4zDKr6Z0mRXJndGKGEMrD691fBzJgHGb3pYWzAb5DZAawtxkfFY7N1RnfobIzsI1l1i5KuZHA\n",
"Qwilk5YCLgYGAkMwm7mEiM+FszNwDXCKGdOTYnOtDNyGb0/sb5m9kxJfy+I0whBCaaQ18FXzCsCg\n",
"lOQtIYmTgSuA0S1I3lvg+7sfB3ZpT8kbYgUeQiiFNAjfPnwpMAUr/sBQoju+6u6J7+9OO4Uw11h8\n",
"99ARltltKbH1IhJ4CKFltKBB5lDM7k4LpTe+v/sJYGszih9klasj3hC0F7CdZfaHlLHrSSTwEEIa\n",
"qQu+w2QkMAxL22MtsT1+3+UZwCVmFN+lkmtF4GagI9DPMnsrZex6EzXwEEJx0qrAA3jZY0BK8m6s\n",
"dx8L/ADYx4yLE5P3pviK/Vlgp/aevCFW4CGEoqSt8Oaca4A8sd69NDAd2BAYYMbspKFz7QlcBhxj\n",
"md2QElvPIoGHEJZMGgech1+8cEdaKGsDd+DHbAw1K37ujHJ1wEstB+Kr7t+njF3vIoGHEBbNL2k5\n",
"B9gFGIGlNchIjMBr1t8DLkwsmSwH3Aj0wOvdb6SM3R5EDTyE0DxpZeA+vOzRPyV5N9a7JwG3AAea\n",
"cUFi8t4Qr3e/iO80ieTdjFiBhxD+l7QFXva4FTgFs0+Lh9IVr1dvCQwy48WkoXPtit/ac6JldnVK\n",
"bHsTCTyEsDAtaJA5ErNb00JZC3/Q+SIw2Iz3Csd6vfsU4DBgV8vs8ZSx26NI4CEEJ3XEG3P2AbbD\n",
"0hpkJIbiZ5JcBHwvsWTSA7gOWA0/z+TVlLHbq0jgIQTQggaZTkA/zP6ZFs7XgG8DB5nxs6TYXH3w\n",
"UwgfBfa1zAp3ZbZ3kcBDaO+kvnhb+13ACZh9UjyUpYCpwFBgiBl/TRo61074yvt0y+zylNhQhgQu\n",
"6SXg38CnwMdm1r/U7wwhtBFpD+By4BgsrUFGYnX8IKs3gIFmzC0cm0vA8cAkYE/L7JGUsYMrxwrc\n",
"gBFm9nYZviuE0BakDkAOjAN2wtIaZCQG4Mn7CuC7ZhTvysy1DH7d2br4fZUvp4wdPlOuEkpcmRZC\n",
"rZCWww+TWhavdyftsZY4BDgbGG/GT5Jic62Ll2ueBoZbZh+kxIeFlaORx4AHJP1O0oQyfF8IobVI\n",
"G+KXH/wd32lSOHlLdJaYBpwIDG9B8h4JPIZfgn5IJO/SlWMFPsTMXpW0CnC/pD+b2cNNPyBpcpOX\n",
"M8xsRhnGDSGk0IIGmZMwuyotlC8APwTmAv3NeLdwrNe7j8Zr3mMti3//myNpBDAiKaact9JLyoB5\n",
"ZnZek/fiVvoQKkkLGmS+BuyF2W/Twvky3pxzPXB6Yr27G14n3wQYY5n9PWXs9qxI7iyphCJpaUk9\n",
"Gv96GWAH/KzeEEI18H8/fwiMwuvdqcn7AODnwLfMODUxefcCHsEvXxgaybv8Si2hrArcIWn+d91o\n",
"Zr8oeVYhhNJJffAHhr8B9sOKN8hIdMIfVI4GtjVLW5gp13D8HJVzgfMtK+Mf9cMCZS2hNDtAlFBC\n",
"aHvSjvjNN6djaQ0yEivhyfdTYF8zCm8Rbqx3fwM4HTjQsljQtVSR3BmdmCHUE//j8HHAUcCeWFqD\n",
"jMTm+CmEPwRONqP4KYS5lgIuAfoBgy2zWSljh3SRwEOoF/4c6iqgN35fZVKDjMQ+wMXARDNuSYrN\n",
"tQb+oHMOnrznpcSHlokLHUKoB9K6eK37A/ym+MLJW6KjxJl4zXv7FiTvQfjlCz8B9onk3XZiBR5C\n",
"rZNG4lePTQGmkfBgS2IF4CZgKaCfGWmnEOYaD3wXb8y5NyU2lC4SeAi1yuvdR+Gdkfti9lBaOJvg\n",
"u1TuAY4z4+PCsbm6ABfijSfDLLO/pIwdyiMSeAi1SOqGnyK4KTAQs5fSwhkNTAeONeO6pNhcq+IH\n",
"Wb0NDLTM/p0SH8onauAh1BqpJ/AwvgAbkpK8JTpI5PgZ3g0tSN79gCeBX+KdlZG8KyhW4CHUEmk4\n",
"ftP7+cB5ifXuZfF2+BXxevfrSUPnOghvzJlgmd2ZEhtaRyTwEGqB17u/DmTAgSR2PEtsgN+48xCw\n",
"txkfFY7N1RlP3KOArS2z51PGDq0nEngI1U5aCt+fPQAYjKU1yEjsDFyDN+ZcmRSbaxW8K/MD/LLh\n",
"f6XEh9YVNfAQqpm0BjADWB4YlJK8JSRxCv6wc/cWJO8t8Xr3b4FdI3lXn1iBh1CtpEF4S/ulwJTE\n",
"end34FpgLfz87n8kDZ1rX/xB5xGW2W0psaHtRAIPoRpJ4/HGnEMwuyctlN74/u4ngP3NKH4KYa6O\n",
"wJnAXsBIy+yPKWOHthUJPIRqogUNMtvgLfH/lxbODvhOkxy41Iziq/ZcKwI346XVfpbZWyljh7YX\n",
"NfAQqoW0Kr6/ek38MKrCybux3n0sXjbZ24xLEpP3pviK/VlgVCTv2hAr8BCqgdQP+BFwNXAGZsVv\n",
"vhFL4xcFbwAMMGNO0tC59sLr7EdbZjemxIbKKksCl9QR+B3wspntWo7vDKHdkMbh+6wPw9IaZCTW\n",
"xuvdzwLDzHi/cKzXu88ADgB2tMyeShk7VF65VuBHAc8DPcr0fSHUP6kzcA6wM7ANZs+lhbMNfpLg\n",
"WcDUxJLJ8sANQHe83v1GytihOpRcA5e0FtCA/xEurk4LoQhpZeA+4ItA/5Tk3VjvnoQ/cDzAjIsS\n",
"k/dGwOPA34DtI3nXrnKswC/Ar3BatgzfFUL9k7bAry27BTgVs+LXlomuwGXAFsAgM15MGjrXbvhi\n",
"6wTL7JqU2FB9SkrgknYB3jCzpyWNWMznJjd5OcPMZpQybgg1SxoLTAOOwNIaZCTWwq8t+xswxIz3\n",
"Csfm6gCcCkzAuyofTxk7tL7GHDoiKaaUW+klTQEOBD4BuuKr8B+Z2bgmn4lb6UPQQg0yYzD7Q1o4\n",
"Q4Hb8D3i5ySWTHrgN9R/AdjTMnstZexQGUVyZ0kJ/HODbQ0c+/ldKJHAQ7unBQ0yHYGvYGl7rCUO\n",
"xxtzDjLj50mxudbHd6k8Aky0zAqfQhgqq0juLPc+8PL81yCEeiFtite77wROxOyT4qEshZdbhuAl\n",
"k5lJQ+caBVwHnGaZXZ4SG2pD2VbgixwgVuChvZL2xB84HoPZDWmhrI439ryGr7znFo7NJeAEYBJ+\n",
"S/wjKWOH6lCJFXgIQeqAN8gcCOyE2e/TwhmI3zl5GTDFjOJdmbmWwc/+Xhs/v/vllLFDbYkEHkI5\n",
"ScsBN+JNbf2wtD3WEl/FG3MONePupNhc6+Glmt/jN+d8kBIfak8cZhVCuUgb4gdCvQhsl5K8JTpL\n",
"fB84HhjeguS9HfAb4Argq5G824dYgYdQDtKuwFX4g8qr00L5An5xw7/xw6jeLRzr9e5j8Ga6sZZF\n",
"j0V7Egk8hFJ4vfsU4DBgVyytQUbiy3hzznXA5MR6dzdgOrAxMNAy+3vK2KH2RQIPoaW0oEFmVfw8\n",
"k1fTwjkAOB843IwfJ8Xm6oVvT/wzMNQy+09KfKgPUQMPoSWk9fHLft/ETxIsnLwlOkmcD0wGtm1B\n",
"8t4aP4zqJuCASN7tV6zAQ0ilzxpksLQGGYmVgVuBj4F+ZrxTONbr3UcAp+GJ+/6UsUP9iQQeQlFa\n",
"qEFmDyytQUZic7zscRtwihnFTyHM1RW4BNgKGGSZ/S1l7FCfIoGHUIS0DH7d2Xp4vTupQUbiK8D3\n",
"gYlm3JIUm2tN/EHnbGCwZTYvJT7Ur6iBh7Ak0rr4Huv38ZviCydviY4SZ+HNOdu3IHkPxveW34m3\n",
"xUfyDgvECjyExZFG4p2VU4BpJBweJLECfgphF7ze/c+koXMdBnwHONgyuzclNrQPkcBDaI7Xu4/G\n",
"a977YvZQWjib4KvmnwLHmVH8FMJcXYCpwHB8i+BfUsYO7Uck8BA+T+qGt6T3BQZi9lJaOGMa479l\n",
"xg+SYnOthh9k9U+8OeffKfGhfYkaeAhNSb3wyw86AkNSkrdEB4kcuAgY1YLk3R94Ergf2COSd1iS\n",
"Uu/E7Ar8ClgKr/PdZWYnlWNiIbQ5v1XqFuA84LzEevdywPXACni9+/WkoXMdDJwDjLfM7kqJDe1X\n",
"SQnczD6QtI2Z/UdSJ+ARSUMtcX9sCBWlhRpkDsTsF2nhfBG4C/glsJcZha8tU67OwLnAKPwI2OdT\n",
"xg7tW8k1cLMFbbxd8D92vl3qd4ba1Fdq6AmTekDXufDBHJj6J6u+3RNN5/kRfHQB2LqwBjAYs1kp\n",
"3yWxC74//GQzrkyKzbUK3tTzPn75wr9S4kMoOYHLT2N7CugNXGoWK4j2qK/UMAgumg595r83AXr3\n",
"laimJN7cPP8I8xrgoHsTkrdEB+Bk4HBgdzMeS5mHcm2Jd2XeCJxumRXuygxhvpIfYprZf81sC2At\n",
"YLikESXPKtScnjCpaVIEmA59esHESs2pOc3NczPoDkwo+h0SPfDzu3cB+rcgee8H/AI4zjI7JZJ3\n",
"aKmybSM0s3cl3YOf1TCj6c8kTW7ycoZZHDpfb3pA1+be7w7d2noui1PqPCV64/Xux4H9zPiw6NjK\n",
"1QnvyBwDjLTM/lg0NtS/xsXviJSYUnehrAx8Ymb/ku+d3R7IP/85M5tcyjih+s2FZq/wmuf13eog\n",
"dZnoZ5n8jyLzlNgRP/87By41o/gulVwrwYI2+v6W2VtFY0P70LiwnTH/taRsSTGlllBWBx6U9Ay+\n",
"IrnbzH5Z4neGGjQHpk6AmU3fGw+zZsO0Ss1pIdJqwIN94JVJsNBJfkuap4QkjgOuBfY245LE5L0Z\n",
"fp7JH4BRkbxDuShhq2vLBpDMzNSqg4Sq0Fdq6AUTu0O3efD+bJhWFQ8wpX74aX5XAWf0hZ2KzlNi\n",
"6ca49YExZsxJGjrXXsClwNGW2Y2l/Y2E9qRI7owEHuqbdBC+z3oCZnemhbIOvlPkWeBrZsXLQcrV\n",
"ETgD2B/vqnwqZewQiuTOOAsl1CctaJBpAEZg9lxaONviV5adCUxNLJksj28PXBroZ5m9mTJ2CEXF\n",
"WSih/kirAPcBG+CXLxRO3o317qPx5L2/GRclJu+N8Hr3TGCHSN6hNcUKPNQXLWiQuRk4FSu+x1qi\n",
"G3AZsDkwyIwXk4bOtTswHTjeMrs2JTaElogEHuqHtC9+jvYRmN2WFkpP/EHnLGCIGe8Vjs3VAT9H\n",
"ZTywi2X2RMrYIbRUJPBQ+/wgtTOBPYGRWFqDjMQw/Kb4C4FzEksmy+J7w1fB692vpYwdQikigYfa\n",
"Jq2IN8h0APphxfdYSwg/y2QycJAZP08aOtcG+K07v8bvqyx8CmEI5RAJPNQuaVM8gd4BnIhZ8WvL\n",
"xFL4LfGD8JLJzCWELByfqwFv7DnNMrs8JTaEcokEHmqTFjTIHIPZDWmhrAH8CHgVf1g5t3BsLgEn\n",
"AkcCYyyzR1PGDqGcIoGH2qIFDTIHADth9vu0cAbid05eBkwx47+FY3N1B64BeuHnmbySMnYI5RYJ\n",
"PNQOaXngBqAHXu9+Iy2c8cAU4FAz7k6KzbUeXq75PX5zTrOHd4XQlqKRJ9QGaSP8wLQXge1SkrdE\n",
"F4mLgeOA4S1I3tsDj+E3zX81kneoFrECD9VP2g24EjgBs2vSQlkVv3zh3/jlC+8WjvV69zeBY4Gv\n",
"WBbn2IfqEgk8VC+/ru9U/LacXTF7PC2crfDmnOuALLHevTTeVbkRMMAym50ydghtIRJ4qE5SD7xB\n",
"5gt4vTupQUZiHHAeforgj5Nic62Nb018Hhhq2YKLu0OoKlEDD9VHWh/4LfAGsE1K8pboJHEBcDqw\n",
"TQuS94jGsW8ADozkHapZqVeq9eSzVZIBV5jZ1HJMLLRT0ii85HEaltYgI7Ey3hL/MdDPjHcKx3q9\n",
"+wi8ZHOAZfZAytghVEJJFzrIr6lazcyekdQd32I12sxeaPKZuNAhLJkk4ARgErAPZo+khbMFXva4\n",
"FTjFjOKnEObqClyCX8g92jL72xJCQmh1rX6hg/kfbV9r/Ot5kl4A1gBeWGxgCE1JywBXA+vi53e/\n",
"nBbOWPxOy4lmCy4OXszn+zZAz0nQoysrvmaM77g6S3/6R2CQZVb4FMIQKq1sDzElrQNsie/VDaEY\n",
"aV28QeZpYDhWfI+1REe8MWcfYHsznllyTN8GGHQRTO9Dz0dh733gic3e4lcfXmv/fS6Sd6gpZXmI\n",
"2Vg+uR04yszmleM7QzsgjcQbZK4EDklM3isA9wD98Hr3EpO36zkJpvfhy1fA2DFw93SY8dRK2NoT\n",
"0/8GQqisklfg8rsHfwTcYIu4NFbS5CYvZ5hFQ0S75vXuo4HjgbEk/vMgsQlwF3A3cJwZhU8hpOPS\n",
"3Rh1OKz9a7jqUXh7/cYfdO+WMocQyk3SCGBEUkyJDzGF7xh4y8yOWcRn4iFm+IzUDW9J3wQYg9nf\n",
"08LZA7gc+KYZ1yfF5lqd17s/zzsjl+eOH8CHyzb5acPPze4dlfJ9IbSmIrmz1BLKEPxUuG0kPd34\n",
"a6cSvzPUK6kX8Aj+z93QlOQt0UHiDOACYFQLknd/4Ak+/PQebl155sLJe/wsmD0t5ftCqAYlrcAL\n",
"DRAr8AAgDce3+J0LnE/CP3gSy+GNNcsBe5vxetLQuQ4BzgYmWGZ3+YPMXhO9bDLvfZg9zexP96Z8\n",
"ZwitrUjujAQeWpcWNMicBhyA2f1p4XwRr3c/gJdNCl9bplyd8Xb6HfH93bG9NdSMVt8HHsJiSV2B\n",
"i/GdIoOwtAYZiV3w/eEnm3FlUmyuVfBTCN/DD6P6V0p8CLUgzkIJrUNaE5gBLAsMTknejfXuU/Fb\n",
"c3ZvQfL+EvAkXm/fLZJ3qFexAg/lJw3GV7/fB85KrHf3wC8LXgM/v/sfSUPn2h+4EPi6ZXZ7SmwI\n",
"tSYSeCgvaQLwXeBgzJIeDEr0xuvdvwX2M+PDwrG5OgFnAWOAbS2zZ1PGDqEWRQIP5SF1AS4Ctsa3\n",
"CP4lLZwd8ZMtJwOXmVF81Z5rJeAW/ETMfpbZ2yljh1CrogYeSuenUj4IrA4MTEneEpI4Hr/tfS8z\n",
"Lk1M3psBTwDPAA2RvEN7EivwUBqpH36UwlXAtzErfm2ZWKYxrjcwwIw5SUPn2hs/BvYoy+ymlNgQ\n",
"6kEk8NBy0kHAOcAEzO5KC2Ud/BTCP+A3xb9fODZXR+DbwH7AjpbZUyljh1AvIoGHdH6A2bnAKGAE\n",
"Zs+nhbMtcBNwJjA1sWSyfGNsN7ze/WbK2CHUk6iBhzTSKsB9wPr45QuFk3djvftoPAHvZ8ZFicl7\n",
"Y7ze/Vdgh0jeob2LFXgoTtoSv7bsRuB0zIpfWya64Y05mwMDzXgpaehco4HpwHGW2bUpsSHUq0jg\n",
"oRhpP3yb4Dcw+2FaKD2BHwMzgcFmFL7pXbk64DfMHwrsbJk9kTJ2CPUsEnhYPKkTXqveAxiJ2R/T\n",
"whmGn0J4AXBuYslkWeB6YCW83v1aytgh1LtI4GHRpBXxBhnh9e63ioci4HC8MWecGfclDZ1rA3yX\n",
"yq+AvS2zwqcQhtBeRAIPzZM2xRPoHcCJmBW+tkxiKfwclIF4yWRW0tC5GvDzUE61zK5IiQ2hPSnH\n",
"nZhXAzsDb5jZpqVPKVSctBdwKXA0ZjemhbIGfsH1q8AgMwpfcq1cAk4EjsTP7/5NytghtDclX+gg\n",
"aRgwD/hBcwk8LnSoIVJH4Az8mrwxWFqDjMRAPHlfBnw3sd7dHW+n7wXsYZm9kjJ2PfKbg3pOgh5d\n",
"Ye4HMGdq3BzUfrTJhQ5m9rCkdUr9nlBh0vL4tWXdgX6YvZEWzqH4w86vmvHTpNhc6+Hlmt8BW1tm\n",
"H6TE1yNP3oMugul9Pnt3Qm+pL5HEw3zRyBNA2ghvkPkbsH1K8pboInExcBwwrAXJe3vgMfym+UMj\n",
"ec/Xc9LCyRv8da+JlZlPqEZt8hBT0uQmL2eY2Yy2GDcUIO0OXAkcj9k1aaGsil/c8C/8MKp3C8d6\n",
"vftbjb/2scx+lTJ2/evRtfn3u3dr23mEtiJpBDAiJaZNEriZTW6LcUICqQN+0fB4YBfMHk8LZyu8\n",
"OecaIDej+CmEuZbGuyo3wu+rnJ0ydvswdxF/EplX+NCvUFsaF7Yz5r+WlC0pJkoo7ZG0LJ58d8Dr\n",
"3anJexzwM+AoM7LE5L02flelAUMjeS/KnKkwYebC742fBbOnVWY+oRqVYxfKzfgtLCsBbwCnW5M/\n",
"isculCqjBQ0yDwMTseINMhKd8ONjdwFGm/Fc0tC5RgA3N37HBZaV+A9fnfMHmb0metlk3vswe1o8\n",
"wGw/iuTOkhN4OSYR2ogWNMichtnlaaGsjLfEf4SfJPhO4Vivdx8JnArsb5k9kDJ2CO1Rm2wjDDVA\n",
"EnACMBHf3/1oWjhb4B2ZtwKnmFH8FMJcXfGmoC8Dgyyzv6WMHUJYtEjg9U5aBn/QuDZ+nklSg4zE\n",
"WGAacKQZtybF5loLr7W/iCfv91LiQwiLFw8x65m0Hr7H+j1g65TkLdFR4my8OWe7FiTvIcDj+H2Z\n",
"YyN5h1B+sQKvV9J2eGfld4CLSXjYIbEC/rCxM9DPjH8mDZ3ra/idlQdZZj9LiQ0hFBcJvN54vfub\n",
"wLHAWBKbpiT64rtUfgIcb0bxUwhzdcHLLcOAIZbZX1PGDiGkiQReT7RQg8xAzP6eFs4eeEv7N824\n",
"Pik21+r4QVZv4M05c1PiQwjpogZeL7SgQQZgaErylugg8W3gQmBUC5L3APwslfuAPSN5h9A2YgVe\n",
"D7SgQeZc4PzEevdyeK18Obze/XrS0LkOAb6HH0T1k5TYEEJpIoHXMq93H4GfaXIAZvenhbMhXu9+\n",
"ADjGjI8Lx+bqDJyPt+MPt8xeSBk7hFC6SOC1SuoKXAJsBQzC0hpkJHYFrgJOMuOqpNhcX8BPIZyH\n",
"17v/lRIfQiiPqIHXImlN/LLfHsDglOTdWO8+De+O3K0FyfvLwJP4WSq7RfIOoXJiBV5rpCHAbfil\n",
"wWcl1rt74GehrI7Xu19NGjrX/viDzq9bZrenxIYQyi8SeC2RDsMbcw7GLOlUOok+eL37Mfwwqg8L\n",
"x+bqBJwNjAa2tcyeTRk7hNA6IoHXAi1okBmObxH8S1o4OwHXARlweeJlwysBt+Dnd/ezzN5OGTuE\n",
"0HqiBl58SrLdAAAPrklEQVTtpNWBh4DVgAEpyVtCEicAVwN7mXFZYvLeDK93Pw00RPIOobrECrya\n",
"Sf3xw6CuAs7ArPjNN2IZPHGvh99XOSdp6Fx747tcJllmN6fEhhDaRskJXNJO+IOtjsCVZnZ2ybMK\n",
"oAUNMhMwuzMtlHXxevczwHAzCt+jqFwd8YOo9gN2sMyeThk7hNB2SkrgkjriuyG2A14BnpT0E7Pa\n",
"aeroKzX0hEk9oOtc+GAOTP1T4gPCspI6A+cBO+FHwD6fFs5I4Eb8GNipiSWT5YGbgG54vfvNtLH7\n",
"NkDPSX6j+twPYM7UuAIshNZT6gq8PzDTzF4CkHQLsDtQEwm8r9QwCC6aDn3mvzcBeveVqEgSl1bB\n",
"G2T+g1++UHiPtYSAo4AT8V0mDyYNnWtjfNV+L3CcZVa4K9PH79sAgy6C6X0+e3dCb6kvkcRDaB2l\n",
"PsRcExaqrb7c+F5N6AmTmiZvgOnQp5dfPda2pC/hDwwfBXZNTN7d8F0mBwMDW5C8R+ONQVMss6NT\n",
"k7frOWnh5A3+ulfb/16G0E6UugIv9MdzSZObvJxhiWdUt5Ye0LW597t7CaHtaEGDzDcw+2FaKD3x\n",
"+yr/Cgw24z+FY3N1wLcWfhXY2TJ7ImXshfVo9vfSb1QPISyJ/FC6ESkxpSbwV4CeTV73xFfhCzGz\n",
"ySWO0yrmwgfNvT+P4g/9SiJ1As4CxgAjMftjWjjD8T3aFwDnJta7lwWuB1bC692vpYz9v+Y2+3sJ\n",
"89rm9zKEGte4sJ0x/7WkbEkxpZZQfgesL2kdebPJV/CbXGrCHJg6AWY2fW88zJrtTTOtS1oJ+Bmw\n",
"OV7vLpy8G/d3H4HXyw8x45zE5L0Bfl/lP/DOyhKTN8CcqTBh5sLvjZ8Fs1v/9zKEdkoJR2k0/wXS\n",
"KD7bRniVmZ35uZ+bmamkQVpRX6mhF0zsDt3mwfuzYVqrP8CUNsPLHncAJ2JW/NoysRS+P3sAMNqM\n",
"mUsIWTg+1874LfWnWmZXpMQueW59G7zm3b2br7xnT4sHmCG0TJHcWXICL8ck2hVpL/wkwKMxuzEt\n",
"lDWAH+Olq4PNKHzzjXIJOAk/P3xvy+w3KWOHENpWkdwZnZhtxffMnwHsD+yI2VNp4QzC75y8FJhi\n",
"RvGuzFzd8VV3T7ze/Y+UsUMI1SkSeFuQlseba5YG+mGpDTKMB6YAXzXjp0mxuXrj+7ufALa2zAqf\n",
"QhhCqG5xmFVrkzbCk+dMYIeU5C3RReIS4FhgWAuS9/bAb4DLgPGRvEOoL7ECb03S7sB04HjMrk0L\n",
"ZVW8ZPIOfhjVu4Vjvd79rcZf+1hmv0oZO4RQGyKBtwapA37R8HhgFyytQUaiH34K4TVAnljvXhr/\n",
"j8aG+H2Vs1PGDiHUjkjg5SYtC/wAWAWvdyftsZYYhx9mdZgZdyTF5lob35r4HDDUMosmmhDqWNTA\n",
"y0naAPgt8BqwTUrylugscSG+ch/RguQ9onHs64FxkbxDqH+xAi8XqQG/MPg0zC5PC2Vl/KLiD4H+\n",
"ZrxTONbr3ROBk4EDLLMHUsYOIdSuSOClkoQf4XokMAazR9PC2QIve9wKnGLGp4Vjc3XFd5hsCQyy\n",
"zF5MGTuEUNsigZdCCxpkeuHnmbySFs5Y/NyVI824NSk211p4V+aLwGDL7L2U+BBC7YsaeEtJ6+F7\n",
"rOfiN+cUTt4SHSXOxptztmtB8h6K7y3/ETA2kncI7VOswFtC2h64AW+Nv4SEA2UkVgRuxg//6mfG\n",
"W0lD5zq8cdxxltnPU2JDCPUlEngKr3d/E++M3AdLa5CR6Iu3td8FnGBG8VMIcy0FTAWGAkMss7+m\n",
"jB1CqD+RwIvSggaZjYABWFqDjMSe+APHY8y4ISk21+p4V+YbwEDLrPAphCGE+hU18CKktYFH8Cvk\n",
"hqYkb4kOEt8Bzgd2akHyHoDXu38O7BnJO4QwX6zAl8TvqbsZOAe4ILHevRx+CmEPvN79RtLQuQ4B\n",
"zsYPoqqZm45CCG2jxStwSXtLek7Sp/Ib1euLJKQj8TsnD8Ts/MTkvSG+cn4J32lSOHkrV2flmobv\n",
"Lx8eyTuE0JxSVuDP4pfxJnUd1gSpK35t2VbAYMz+lhbOrsBVwElmXJUUm+sL+F2Xc4H+ltm7/p19\n",
"G6DnJL/9fe4HMGdqXFcWQvvW4gRuZn+G+Rsz6oi0Jt4g83dgEFZ8j7VEB+AU4GvAbmb8NmnoXF9u\n",
"HPt64HTL7L/+vX0bYNBFML3PZ5+e0FvqSyTxENqvqIE3JQ3BzySZCnwvsWTSA7gOWA2vd7+aNHSu\n",
"/fHLob9umd2+8E97Tlo4eYO/bpgIRAIPoZ1abAKXdD+ekD7vZDO7u+ggkiY3eTnDzGYUjW0z0mHA\n",
"t4GDMftZWih98L3djwL7mlH45hvl6oQ/qBwNbGuZPfu/n+rRtfno7t1S5hlCqF7yDRMjUmIWm8DN\n",
"bPsS5tP0eyaX43tahdQFX3EPx7cIJjXISOyEr7xPN0t7HqBcK+GHWP0Xv2z47eY/OfeD5t+fF0fG\n",
"hlAnGhe2M+a/lpQtKaZc+8BrsxAurQY8CKwKDExJ3hKSOAG4GtizBcl7c+BJ4CmgYdHJG2DOVJgw\n",
"c+H3xs+C2dNSxgwh1BcllHkXDpTG4CvXlYF3gafNbFQznzMzq74EL/XHD4OaDnwHs+LXloll8MS9\n",
"HjDGjJeThs61D3AxMNEyu6XYmH0boNdEL5vMex9mT4sHmCHUryK5s8UJvJyTaHP6rEEGS9tjLbEu\n",
"fp7J08DhZiyivNFMbK6OwHeAscAYy+yZlLFDCO1HkdzZvnahSJ3x+yZ3xI+AfSEtnJF4Z+UUYJoZ\n",
"xXep5FoBuAlYCq93/zNl7BBC+Lz2cxaKtApwP9AbP4yqcPJurHcfjSfvfc2Ympi8N8G7Mv8P2DGS\n",
"dwihHNrHCtxb/X+Mn+GdYVb82jLRDe823RQYaMZLSUPnGo3X2Y+1zK5LiQ0hhMWp/wSuzxpksM83\n",
"yCwplJ74fZV/AYaY8Z/Csbk6ABlwCL7L5MmUsUMIYUnqN4FLnYCz8PNatsWaa5BZXDjD8YOszgPO\n",
"TyyZLIu3w6+I17tfTxk7hBCKqM8ELq2EJ18D+mGL22P9+VAEfB1fPR9oxi+Shs61Ad6V+RCwt2X2\n",
"UUp8CCEUVX8JXNoM3+Z3O3AyZsWvLRNL4fuzBwCDzZiVNHSunfFb6k+xzKanxIYQQqr6SuDS3vgx\n",
"sJMwuzktlDXwxp5XgEFmzCscm0vAycA3gNGW2W9Sxg4hhJaojwQudcQPotoP2AGzp9PCGYSfwX0J\n",
"cGZivbs7cC2wFl7v/kfK2CGE0FK1n8Cl5fEGmW54vfvNtHDG4405h5hxT1Jsrt54ueYJYH/LrPAp\n",
"hCGEUKrabuSRNsaT51/wlXfh5C3RReIS4FvAsBYk7x2A3wCX4ndWRvIOIbSp2l2Ba0GDzHGYXZsW\n",
"yqr4Q863gQFm/LtwrNe7vwV8E99l8uuUsUMIoVxqL4FLHYDTgUOBnTF7Ii2cfvjDyquBM8wofgph\n",
"rqWBK4ENgAGW2ZyUsUMIoZxqK4FrQYPMSni9+7W0cMYB5wKHmXFnUmyutfF695+AYZZZXKYQQqio\n",
"2qmBSxsAjwP/wDsrCydvic4SFwKnAdu0IHlvA/wWv3lnXCTvEEI1aPEKXNI5wC7AR8As4BAze7dc\n",
"E/vcYPMbZE7F7Iq0UFbGLyr+EOhvxjuFY73ePRHf472/ZfbLlLFDCKE1lbIC/wWwiZltju8COak8\n",
"U2pCEtLJwBXA6BYk7y3wa8seB3ZZXPJuvFD0s9e5uuL/0TgUGFQtyfvz86xGtTBHiHmWW8yz7bU4\n",
"gZvZ/fbZNWSP440s5SN1x1fOuwP9sbTuRomx+PnfJ5hxkhlLOkJ2xILYXGsBv8b3lg+2zF5MGbuV\n",
"jaj0BAoYUekJFDSi0hMoaESlJ1DQiEpPoKARlZ5AuZSrBv5VoHz3M0q9gceAufjNOa8UD6WjxNl4\n",
"c852ZtyWNHSuofje8h8BYy2z91LiQwihrSy2Bi7pfmC1Zn50spnd3fiZU4CPzOymssxI2h6/eOEM\n",
"4BISLu2UWBG4GegI9DPjraShcx3eOO44y+znKbEhhNDWSrrUWNLBwARgpJk1e7mvpNa9NTmEEOpU\n",
"q11qLGkn4Dhg60Ul7yITCCGE0DItXoFL+ivQBW9HB3jMzL5RromFEEJYvJJKKCGEECqnTToxJZ0j\n",
"6QVJf5D0Y0nLtcW4KSTtLek5SZ/Kb7GvKpJ2kvRnSX+VdEKl59McSVdLel1S0v2jbU1ST0kPNf7/\n",
"/SdJkyo9p+ZI6irpcUnPSHpe0pmVntOiSOoo6WlJd1d6Losj6SVJf2yca9I5Sm1F0vKSbm/Mmc9L\n",
"Grioz7ZVK33rN/2U7ln8AuSqO11QfmHF94GdgI2BfSVtVNlZNesafI7V7mPgGDPbBBgIHFGNv5+N\n",
"z5a2MbMtgM2AbSQNrfC0FuUo4HkofhlKhRgwwsy2NLP+lZ7MIlwE3GtmG+H/v7+wqA+2SQJv9aaf\n",
"MjCzP5vZXyo9j0XoD8w0s5fM7GP8wubdKzyn/2FmD0PxowoqxcxeM7NnGv96Hv4vyBqVnVXzzOw/\n",
"jX/ZBd8eW/iC7rYiaS2gAT+psxY2LVTtHBurE8PM7GoAM/tkcUeUVOIwq/I2/bQPawJNj659ufG9\n",
"UCJJ6wBb4guLqiOpg6RngNeBh8zs+UrPqRkX4DvSCh/NXEEGPCDpd5ImVHoyzVgXeFPSNZKekjRd\n",
"0tKL+nDZErik+yU928yvXZt8prxNP60wxypV7X8srUny4xpuB45qXIlXHTP7b2MJZS1geLWd4yFp\n",
"F+AN83toq3Zl28QQM9sSGIWXzoZVekKf0wn4EnCJmX0JeA84cXEfLgsz235xP29s+mkARpZrzFRL\n",
"mmMVewXo2eR1T3wVHlpIUmf8uIQbzCzpeOFKMLN3Jd0DbAXMqPB0mhoM7CapAegKLCvpB2Y2rsLz\n",
"apaZvdr4v29KugMvTz5c2Vkt5GXgZTN7svH17SwmgbfVLpT5TT+7L67pp4pU20rid8D6ktaR1AX4\n",
"CvCTCs+pZkkScBXwvJldWOn5LIqkleWXdiOpG7A98HRlZ7UwMzvZzHqa2brAWODBak3ekpaW1KPx\n",
"r5cBdsA3L1QN83sO5sjvPwDYDnhuUZ9vqxr4NKA7cH/j9p1L2mjcwiSNkTQH35Vwj6SfVXpO85nZ\n",
"J8CRwH34k/5bzWyRT6YrRdLN+EXPG0iaI+mQSs9pEYYAB+C7Op5u/FWNu2dWBx5srIE/DtxtVh3H\n",
"Gi9GNZf7VgUebvL7+VMz+0WF59ScicCNkv6A70KZsqgPRiNPCCHUqNq5Ui2EEMJCIoGHEEKNigQe\n",
"Qgg1KhJ4CCHUqEjgIYRQoyKBhxBCjYoEHkIINSoSeAgh1Kj/B3rn1tXOP7uAAAAAAElFTkSuQmCC\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x106d19790>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def plotSVM(X,t,wb):\n",
" plt.plot(X[t>0,0],X[t>0,1], 'ro')\n",
" plt.plot(X[t<0,0],X[t<0,1], 'bo')\n",
" plt.axis([-2, 6, -2, 7])\n",
" x = np.arange(-2,6,1)\n",
" y0 = -1*wb[0]/wb[1]*x-wb[2]/wb[1]\n",
" y1 = -1*wb[0]/wb[1]*x-(wb[2]+1)/wb[1]\n",
" y_1 = -1*wb[0]/wb[1]*x-(wb[2]-1)/wb[1]\n",
" plt.plot(x,y0)\n",
" plt.plot(x,y1)\n",
" plt.plot(x,y_1)\n",
" \n",
"plotSVM(X_,t_,wb_opt) ### PROVIDE THIS PLOT ###"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## New Data Set\n",
"\n",
"You are now given the following new data set."
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Generating the data\n",
"N_half = 20\n",
"u1 = random.rand(N_half)\n",
"x1 = cos(2*pi*u1) + .3*random.rand(N_half)\n",
"y1 = sin(2*pi*u1) + .3*random.rand(N_half)\n",
"u2 = random.rand(N_half)\n",
"x2 = 2.*cos(2*pi*u2) + .3*random.rand(N_half)\n",
"y2 = 2.*sin(2*pi*u2) + .3*random.rand(N_half)\n",
"\n",
"# New Data\n",
"X_c = transpose(vstack((hstack((x1,x2)),hstack((y1,y2)))))\n",
"t_c = hstack((ones(N_half),-ones(N_half)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Remark that the data is distributed on two circles, centered on zero, with different radii."
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[-3, 3, -3, 3]"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x106eb0950>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot new data\n",
"plt.plot(X_c[t_c>0,0],X_c[t_c>0,1], 'ro')\n",
"plt.plot(X_c[t_c<0,0],X_c[t_c<0,1], 'bo')\n",
"plt.axis([-3, 3, -3, 3])"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.79320872 0.87751141]\n",
" [ 0.34859625 1.10144607]\n",
" [ 0.84730164 0.86600705]\n",
" [ 0.87178605 0.67973604]\n",
" [ 1.02320953 0.05223257]\n",
" [ 1.12153457 0.49210989]\n",
" [ 0.85257302 0.46268987]\n",
" [ 1.02866962 0.7313684 ]\n",
" [ 0.44710416 0.8148271 ]\n",
" [ 1.00715163 0.60103491]\n",
" [ 0.97326449 0.48955367]\n",
" [ 0.8782296 0.68866347]\n",
" [ 0.17089173 1.06423413]\n",
" [ 1.01157981 0.39264252]\n",
" [ 0.3417288 0.84054634]\n",
" [ 1.11146543 0.40394795]\n",
" [ 0.88481468 0.84173672]\n",
" [ 0.70515482 0.89868454]\n",
" [ 0.70562623 1.03892147]\n",
" [ 0.49678118 0.83054123]\n",
" [ 0.40706008 1.42381673]\n",
" [ 1.39657279 0.39009172]\n",
" [ 1.04451919 1.19192739]\n",
" [ 0.53297958 1.50011112]\n",
" [ 0.99420448 1.42983513]\n",
" [ 1.39050571 0.74889203]\n",
" [ 1.28308941 1.24967158]\n",
" [ 1.31448187 0.92596038]\n",
" [ 1.15165617 1.19119312]\n",
" [ 1.11444156 1.05553909]\n",
" [ 1.32773815 0.98155402]\n",
" [ 1.10494624 1.24527458]\n",
" [ 1.22212946 1.28531447]\n",
" [ 0.92884761 1.4680145 ]\n",
" [ 0.76518426 1.42363411]\n",
" [ 1.0229485 1.27350279]\n",
" [ 1.37170015 0.8541038 ]\n",
" [ 0.26667152 1.37509233]\n",
" [ 1.3817956 1.13790164]\n",
" [ 0.70795683 1.32292239]]\n"
]
},
{
"data": {
"text/plain": [
"[0, 6, 0, 6]"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n",
"JBXKgJakQv0/lfRzUKDZYtIAAAAASUVORK5CYII=\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x106a6b390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#X_transformed = 2.5*transpose(vstack((hstack((np.abs(x1),np.abs(x2))),hstack((np.abs(y1),np.abs(y2)))))) #radius ### CHANGE THIS LINE ####\n",
"#X_transformed = transpose(vstack((hstack((sqrt(x1**2+y1**2),sqrt(x2**2+y2**2))),map(lambda x: m.atan2(x[0],x[1]),X_c)))) # radius and angle\n",
"#X_transformed = transpose(vstack((hstack((x1**2,x2**2)),hstack((y1**2,y2**2))))) #radius ### CHANGE THIS LINE ####\n",
"X_transformed = transpose(vstack((hstack((abs(x1)**(0.5),abs(x2)**(0.5))),hstack((abs(y1)**(0.5),abs(y2)**(0.5))))))\n",
"print X_transformed\n",
"### prbly other transormation\n",
"plt.plot(X_transformed[t_c>0,0],X_transformed[t_c>0,1], 'ro')\n",
"plt.plot(X_transformed[t_c<0,0],X_transformed[t_c<0,1], 'bo')\n",
"plt.axis([0, 6, 0, 6])"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(40, 2)"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shape(X_transformed)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Plotting the result in the transformed space. \n",
"(Lines are commented, because code does not compile, until X has been correctly transformed.)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"ename": "ValueError",
"evalue": "all the input array dimensions except for the concatenation axis must match exactly",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-81-6c4875b82fa6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mwb_opt_c\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moptimizeSVM\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_transformed\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mt_c\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;31m#plotSVM(X_transformed,t_c,wb_opt_c) ### PROVIDE THIS PLOT ###s\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m#plotSVM(X_transformed,t_c,[-2,2,-1])\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-57-49e7f2f9b2de>\u001b[0m in \u001b[0;36moptimizeSVM\u001b[0;34m(X_, t_)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m opt_result = optimize.minimize(objective, wb0, jac=jac,constraints=cons, #the optimizer\n\u001b[0;32m---> 15\u001b[0;31m method='SLSQP', options=opt)\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0mwb_opt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopt_result\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"x\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m#result of the optimization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/Maximus/anaconda/lib/python2.7/site-packages/scipy/optimize/_minimize.pyc\u001b[0m in \u001b[0;36mminimize\u001b[0;34m(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'slsqp'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 434\u001b[0m return _minimize_slsqp(fun, x0, args, jac, bounds,\n\u001b[0;32m--> 435\u001b[0;31m constraints, callback=callback, **options)\n\u001b[0m\u001b[1;32m 436\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'dogleg'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 437\u001b[0m return _minimize_dogleg(fun, x0, args, jac, hess,\n",
"\u001b[0;32m/Users/Maximus/anaconda/lib/python2.7/site-packages/scipy/optimize/slsqp.pyc\u001b[0m in \u001b[0;36m_minimize_slsqp\u001b[0;34m(func, x0, args, jac, bounds, constraints, maxiter, ftol, iprint, disp, eps, callback, **unknown_options)\u001b[0m\n\u001b[1;32m 402\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvstack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_eq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma_ieq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 404\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconcatenate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mla\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 405\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 406\u001b[0m \u001b[0;31m# Call SLSQP\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: all the input array dimensions except for the concatenation axis must match exactly"
]
}
],
"source": [
"wb_opt_c = optimizeSVM(X_transformed,t_c)\n",
"#plotSVM(X_transformed,t_c,wb_opt_c) ### PROVIDE THIS PLOT ###s\n",
"#plotSVM(X_transformed,t_c,[-2,2,-1]) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feel free (not mandatory!) to rewrite the function plotSVM to plot the data and the separation curve, not in the transformed space (as above), but in the original space."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"annotations": {
"author": "",
"categories": [
"intelligent-systems-1-2015"
],
"date": "2015-04-23",
"location": "Beginning of next lecture",
"parent": "IS_SS2015",
"submission_date": "2015-04-30",
"subtitle": "Exercise Sheet 2, Support Vector Machines",
"tags": [
"IntelligenSystems",
"Course"
],
"title": "Intelligent Systems 1 - Summer Semester 2015"
},
"celltoolbar": "Edit Metadata",
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}