{
"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": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\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": 2,
"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": 11,
"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": 4,
"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_*(list(map(lambda x:np.dot(wb[0:2].T,x),X_))+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": 12,
"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": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": [
"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\n",
"z2nC5qRuAAAAAElFTkSuQmCC\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x7f69572e5c88>"
]
},
"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": 18,
"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": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[-3, 3, -3, 3]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6957433e10>"
]
},
"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": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[-1, 6, -1, 6]"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n",
"AABJRU5ErkJggg==\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x7f69572f8668>"
]
},
"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)))))) ### CHANGE THIS LINE ####\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([-1, 6, -1, 6])"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(40, 2)"
]
},
"execution_count": 36,
"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": 37,
"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[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-37-ae3c6dd9b647>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mwb_opt_c\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0moptimizeSVM\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX_transformed\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mt_c\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;31m#plotSVM(X_transformed,t_c,wb_opt_c) ### PROVIDE THIS PLOT ###s\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m<ipython-input-12-49e7f2f9b2de>\u001b[0m in \u001b[0;36moptimizeSVM\u001b[1;34m(X_, t_)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m opt_result = optimize.minimize(objective, wb0, jac=jac,constraints=cons, #the optimizer\n\u001b[1;32m---> 15\u001b[1;33m method='SLSQP', options=opt)\n\u001b[0m\u001b[0;32m 16\u001b[0m \u001b[0mwb_opt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopt_result\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"x\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;31m#result of the optimization\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/opt/anaconda3/lib/python3.4/site-packages/scipy/optimize/_minimize.py\u001b[0m in \u001b[0;36mminimize\u001b[1;34m(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)\u001b[0m\n\u001b[0;32m 433\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'slsqp'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 434\u001b[0m return _minimize_slsqp(fun, x0, args, jac, bounds,\n\u001b[1;32m--> 435\u001b[1;33m constraints, callback=callback, **options)\n\u001b[0m\u001b[0;32m 436\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'dogleg'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 437\u001b[0m return _minimize_dogleg(fun, x0, args, jac, hess,\n",
"\u001b[1;32m/opt/anaconda3/lib/python3.4/site-packages/scipy/optimize/slsqp.py\u001b[0m in \u001b[0;36m_minimize_slsqp\u001b[1;34m(func, x0, args, jac, bounds, constraints, maxiter, ftol, iprint, disp, eps, callback, **unknown_options)\u001b[0m\n\u001b[0;32m 402\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 403\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mvstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma_eq\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ma_ieq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 404\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconcatenate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mzeros\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mla\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 405\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 406\u001b[0m \u001b[1;31m# Call SLSQP\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;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"
]
},
{
"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."
]
}
],
"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 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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}