Skip to content

Instantly share code, notes, and snippets.

@maasencioh
Last active October 5, 2015 02:27
Show Gist options
  • Select an option

  • Save maasencioh/5b51837391160cbb4894 to your computer and use it in GitHub Desktop.

Select an option

Save maasencioh/5b51837391160cbb4894 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Assignment 3: Kernels and SVMs\n",
"* Miguel Angel Asencio Hurtado - 1026573414\n",
"* Jefferson Javier Hernández Panqueba - 1019096996"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import math\n",
"from matplotlib import pyplot as plt\n",
"from sklearn.cross_validation import train_test_split"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1\n",
"Let $x = \\{x_1, . . . , x_n\\}$ be a subset of an input data set $X$. Consider a kernel function $k : X \\times X \\rightarrow \\mathbb{R}$, which induces a feature space $\\Phi(X)$:\n",
"\n",
"__(a)__ Deduce an expression (using kernels) that, given a vector $w \\in X$, calculates the norm of the projection of the image of a point $(x,\\phi(x))$, onto the image of the vector $(w,\\phi(w))$:\n",
"\n",
"$$P_{\\phi(w)}(\\phi(x)) = \\frac{\\langle \\phi(w),\\phi(x)\\rangle}{\\| \\phi(w)\\|}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__R/__ Given the projection of the image of a point $(x,\\phi(x))$ onto th image of the vector $(w,\\phi(w))$ as:\n",
"\n",
"$$P_{\\phi(w)}(\\phi(x)) = \\frac{\\langle \\phi(w),\\phi(x)\\rangle}{\\| \\phi(w)\\|}$$\n",
"\n",
"Based in the relation of inner product and norm:\n",
"\n",
"\\begin{eqnarray*}\n",
"\\langle x,x\\rangle &=& \\|x\\|^2 \\\\\n",
"\\|x\\| &=& \\sqrt{\\langle x,x\\rangle}\n",
"\\end{eqnarray*}\n",
"\n",
"And accepting the kernel function $k : X \\times X \\rightarrow \\mathbb{R}$ as:\n",
"\n",
"$$k(x, w) = \\langle \\phi(x),\\phi(w)\\rangle$$\n",
"\n",
"So, the projection of the image of the point could be calculated as:\n",
"\n",
"\\begin{eqnarray*}\n",
"P_{\\phi(w)}(\\phi(x)) &=& \\frac{\\langle \\phi(w),\\phi(x)\\rangle}{\\| \\phi(w)\\|} \\\\\n",
"&=& \\frac{\\langle \\phi(w),\\phi(x)\\rangle}{\\sqrt{\\langle \\phi(w), \\phi(w)\\rangle}}\\\\\n",
"&=& \\frac{k(w,x)}{\\sqrt{k(w,w)}}\n",
"\\end{eqnarray*}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__(b)__ Deduce an expression (using kernels) to calculate the sample variance of the projections in the feature space of a set of points along a vector $w$:\n",
"\n",
"\\begin{eqnarray*}\n",
"\\sigma_{\\phi (w)}^2(x) &=& \\frac{1}{n} \\sum_{x_i \\in X}(P_{\\phi (w)}(\\phi (x_i))- \\mu)^2 \\\\\n",
"\\mu &=& \\frac{1}{n} \\sum_{x_i \\in X}P_{\\phi (w)}(\\phi (x_i))\n",
"\\end{eqnarray*}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__R/__ Given the definition of projections before:\n",
"\n",
"$$P_{\\phi(w)}(\\phi(x)) = \\frac{k(w,x)}{\\sqrt{k(w,w)}}$$\n",
"\n",
"The mean could be calculated as:\n",
"\n",
"\\begin{eqnarray*}\n",
"\\mu &=& \\frac{1}{n} \\sum_{x_i \\in X}P_{\\phi (w)}(\\phi (x_i)) \\\\\n",
"&=& \\frac{1}{n} \\sum_{x_i \\in X}\\frac{k(w,x_i)}{\\sqrt{k(w,w)}} \\\\\n",
"&=& \\frac{\\mu_k}{\\sqrt{k(w,w)}} \\\\\n",
"\\mu_k &=& \\frac{1}{n} \\sum_{x_i \\in X}k(w,x_i)\n",
"\\end{eqnarray*}\n",
"\n",
"And the variance as:\n",
"\n",
"\\begin{eqnarray*}\n",
"\\sigma_{\\phi (w)}^2(x) &=& \\frac{1}{n} \\sum_{x_i \\in X}(P_{\\phi (w)}(\\phi (x_i))- \\mu)^2 \\\\\n",
"&=& \\frac{1}{n} \\sum_{x_i \\in X}(\\frac{k(w,x_i)}{\\sqrt{k(w,w)}} - \\mu)^2 \\\\\n",
"&=& \\frac{1}{n} \\sum_{x_i \\in X}(\\frac{k(w,x_i)}{\\sqrt{k(w,w)}} - \\frac{\\mu_k}{\\sqrt{k(w,w)}})^2 \\\\\n",
"&=& \\frac{1}{n} \\sum_{x_i \\in X}\\frac{(k(w,x_i) - \\mu_k)^2}{k(w,w)}\n",
"\\end{eqnarray*}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__(c)__ Use the previous expression to calculate the variance of the projections of the images of the elements of the following point set in $\\mathbb{R}^2$, $x = \\{(0, 1),(-1, 3),(2, 4),(3, -1),(-1, -2)\\}$ over the images of the vectors $w_1 = (1, 1)$ and $w_2 = (-1, 1)$, in the feature spaces induced by the following kernels:\n",
"\n",
"<ol type=\"I\">\n",
"<li> $k(x, y) = \\langle x,y\\rangle$ </li>\n",
"<li> $k(x, y) = \\langle x,y\\rangle^2$ </li>\n",
"<li> $k(x, y) = (\\langle x,y\\rangle + 1)^5$ </li>\n",
"<li> Gaussian kernel with $\\sigma = 1$ </li>\n",
"</ol>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__R/__ We define basic structure for the different kernels as:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X = [(0,1), (-1,3), (2,4), (3,-1), (-1,-2)]\n",
"W = [(1,1), (-1,1)]\n",
"\n",
"def mean(k, X, w):\n",
" m = 0\n",
" for x in X:\n",
" m += k(w, x)\n",
" return float(m) / len(x)\n",
"\n",
"def var(k, X, w):\n",
" s = 0\n",
" m = mean(k, X, w)\n",
" for x in X:\n",
" s = (k(w,x) - m)**2\n",
" return float(s) / (len(x) * k(w,w))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I. We create the kernel $k(x, y) = \\langle x,y\\rangle$ and prints the result"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w_1: 12.25\n",
"w_2: 1.0\n"
]
}
],
"source": [
"def dot(x,y):\n",
" return x[0]*y[0] + x[1]*y[1]\n",
"\n",
"print 'w_1:', var(dot, X, W[0])\n",
"print 'w_2:', var(dot, X, W[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"II. We create the kernel $k(x, y) = \\langle x,y\\rangle^2$ and prints the result"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w_1: 40.5\n",
"w_2: 40.5\n"
]
}
],
"source": [
"def square(x,y):\n",
" return (x[0]*y[0] + x[1]*y[1])**2\n",
"\n",
"print 'w_1:', var(square, X, W[0])\n",
"print 'w_2:', var(square, X, W[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"III. We create the kernel $k(x, y) = (\\langle x,y\\rangle + 1)^5$ and prints the result"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w_1: 154971.938786\n",
"w_2: 5126.87705761\n"
]
}
],
"source": [
"def pol(x,y):\n",
" return (x[0]*y[0] + x[1]*y[1] + 1)**5\n",
"\n",
"print 'w_1:', var(pol, X, W[0])\n",
"print 'w_2:', var(pol, X, W[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"IV. We define the kernel as a Gaussian kernel with $\\sigma = 1$, so we create the kernel:\n",
"\n",
"$$k(x, y) = e^{-\\|x-y\\|^2 / \\, 2}$$\n",
"\n",
"And prints the result."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w_1: 0.0210470345361\n",
"w_2: 0.0308321049036\n"
]
}
],
"source": [
"def gaussian(x,y):\n",
" return math.e**(((x[0]-y[0])**2 + (x[1]-y[1])**2) / -2)\n",
"\n",
"print 'w_1:', var(gaussian, X, W[0])\n",
"print 'w_2:', var(gaussian, X, W[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 2\n",
"\n",
"Load all data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Loading training set\n",
"a = np.genfromtxt(\"assign3-train.txt\", delimiter=\" \", dtype=[('x_train', 'S9'), ('y_train', float)])\n",
"a = np.sort(a, order='y_train')\n",
"a[:] = a[::-1]\n",
"\n",
"x_train = np.array([a[i][0] for i in xrange(a.shape[0])])\n",
"y_train = np.array([a[i][1] for i in xrange(a.shape[0])])\n",
"\n",
"# Loading test set\n",
"a = np.genfromtxt(\"assign3-test.txt\", delimiter=\" \", dtype=[('x_test', 'S9'), ('y_test', float)])\n",
"a = np.sort(a, order='y_test')\n",
"a[:] = a[::-1]\n",
"\n",
"x_test = np.array([a[i][0] for i in xrange(a.shape[0])])\n",
"y_test = np.array([a[i][1] for i in xrange(a.shape[0])])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (a)\n",
"\n",
"Implement a function that calculates a kernel over fixed-length strings,\n",
"\n",
"$$ k: \\Sigma^d \\times \\Sigma^d \\rightarrow \\mathbb{R},$$\n",
"\n",
"which counts the number of coincidences between two strings.\n",
"\n",
"__R/__ We define the kernel function as:\n",
"\n",
"\\begin{eqnarray*}\n",
"k(s_1 ... s_d,t_1 ... t_d) &=& \\sum_{i=1}^d equal(s_i,t_i) \\\\\n",
"equal(s,t) &=& \\begin{cases} 1 &\\mbox{if } s = t \\\\ \n",
"0 & \\mbox{if } s \\neq t \\end{cases} \n",
"\\end{eqnarray*}"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AATTAAAAG GTGTGTAAC\n",
"Coincidences: 3.0\n"
]
}
],
"source": [
"def str_kernel(a, b):\n",
" result = 0\n",
" for i in xrange(9):\n",
" if a[i] == b[i]:\n",
" result += 1\n",
" return result * 1.0\n",
"\n",
"# test kernel\n",
"print x_train[0], x_train[1]\n",
"print \"Coincidences:\", str_kernel(x_train[0], x_train[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (b)\n",
"\n",
"Implement Kernel Ridge Regression (KRR).\n",
"\n",
"__R/__ The KRR could be described as:\n",
"\n",
"\\begin{equation*}\n",
"g(x) = y^\\prime (K+\\lambda I_n)^{-1} \\left[ \\begin{matrix}\n",
"k(x,x_1) \\\\\n",
"\\vdots \\\\\n",
"k(x,x_n)\n",
"\\end{matrix} \\right]\n",
"\\end{equation*}"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class KRR:\n",
" def __init__(self, X_train, y_train, kernel, regularization=1.0):\n",
" self.X_train = X_train\n",
" self.train_size = X_train.shape[0]\n",
" self.kernel = kernel\n",
" size = X_train.shape[0]\n",
" K = np.array([[kernel(X_train[i], X_train[j]) for i in xrange(size)] for j in xrange(size)])\n",
" self.alpha = np.dot(np.linalg.inv(K + regularization*np.eye(size)), y_train).T\n",
"\n",
" def predict(self, X):\n",
" size_predict = X.shape[0]\n",
" K = np.array([[self.kernel(X[i], self.X_train[j]) for i in xrange(size_predict)] for j in xrange(self.train_size)])\n",
" return np.dot(self.alpha, K).T\n",
"\n",
" # R^2 score for regression\n",
" def score(self, X, y):\n",
" predicted = self.predict(X)\n",
" u = np.square(y - predicted).sum()\n",
" v = np.square(y - y.mean()).sum()\n",
" return 1 - (u / v)\n",
" \n",
" # Square error for regression\n",
" def sqr_error(self, X, y):\n",
" predicted = self.predict(X)\n",
" l = len(y)\n",
" err = sum([(predicted[i] - y[i])**2 for i in xrange(l)])\n",
" return err / l"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (c)\n",
"\n",
"Training the KRR model with the training set"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training R² score: 0.987792375055\n",
"Training square error: 0.591611921351\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEZCAYAAACEkhK6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VOX5//H3TcIWEAKCssjmgisKmLogalwqiFVEi1vF\nXaxatdWK268Ftdpq61L3DfcConVHQFSCigL9CiKiKMoiLqAIKCAgCffvj3NChjGZTCbJrJ/XdeVi\n5ixznjmac+d57mcxd0dERKQ6DVJdABERyQwKGCIiEhcFDBERiYsChoiIxEUBQ0RE4qKAISIicVHA\nkJxnZq+Y2ZC6Pra2zGyTmW2fjGuJxMM0DkMykZmtAcr/520GrAfKwvdD3X10SgpWh8xsE7Cjuy+o\n5riuwAIg3903JaFokqPyU10AkUS4e/Py12a2EDjb3d+IPs7M8t29NKmFSx1LdQEku6lJSrKKmRWb\n2ZdmNszMvgFGmlmhmb1sZt+a2Qoze8nMOkacU2JmZ4evzzCzt83sn+GxC8ysf4LHdjOzN83sRzOb\nZGZ3m9kTMcp+uZl9HZb/rKh9R5nZLDP7wcy+MLPhEbvfDP9dZWarzWxfM9vBzN4ws+Vm9p2ZPWlm\nLWt1cyXnKWBINtoWaAV0Bs4j+P98ZPi+M7AOuCvieKeieQtgH2AesDVwc3huIseOAqYBrYERwKlR\n524WBprLgMOB7uG/kdYAp7p7S+Ao4HwzGxjuOzD8t6W7b+Xu08P3NwDtgV2BTmEZRBKmgCHZaBMw\n3N03uvt6d1/h7s+Fr9cANwIHxzh/sbuP9CDB9zjQ3sy2qcmxZtYZKAL+6u6l7j4VeJGqm41OAB52\n94/c/ScgsgaBu09x97nh6znAmIjv8IvPdPfP3f318B4sB26r5juLVEsBQ7LRd+7+c/kbMysws/vN\nbJGZ/QBMAVqaWVUP76XlL8KHN0DzGh7bAVjh7usjjl0So8zto/Z/EbkzbGaaHDarrSKoOW1d1YeZ\n2bZmNiZs3voBeCLW8SLxUMCQbBTd7HMZQTPPPmGTzsEEf5XXZ5L4G6C1mTWN2Na5muMj90cfOwp4\nHtjO3QuB+6j4/a2smetGgl5je4TfeQj6fZda0v9AkguaE+QtfjCz1kQ199QHd18M/B8wwswamtn+\nwG+oIocBjAXOMLNdzaygkjI2B1a6+89mtg9wSsRnfUfQDLdD1PFrgR/DBP/ldfG9JLcpYEg2in4o\n3w40BZYD7wDjKzkm8tzofYke+ztgf+B74HrgKeBnKuHuE8JyvgF8Crwe9VkXANeZ2Y/AX8LPKj/3\nJ4IE99Swt9Y+wLVAb+AH4CXgvzG+h0hcUjZwz8w6ESQJtyH4H/kBd78j/AvwKaALsAg4wd1XpaSQ\nInXIzJ4CPnL3a1NdFpFEpDJgtAPaufv7ZtYceA84FjgTWO7uN5vZFUArd78yJYUUqQUzKwJWAguB\nfsCzwH7uPjulBRNJUMpGerv7UsIeJu6+xsw+BjoCx1DR/e8xoARQwJBM1I4gSGxN0APq9woWksnS\nYi6pcC6cKcAewBfu3ircbgRdE1ulrnQiIgJpkPQOm6P+C1zi7qsj94WDoVIf0UREJLWTD5pZQ4Jg\n8YS7Px9uXmZm7dx9qZm1B76t5DwFERGRBLh7wuOPUlbDCJubRhL0Grk9YteLwOnh69MJBiv9grvr\nx53hw4envAzp8qN7oXuhexH7p7ZSWcM4gGAytg/MbFa47SrgH8DYcEbQRQRz7IiISIqlspfU21Rd\nw4meqVNERFIs5UlvqZ3i4uJUFyFt6F5U0L2ooHtRd9KiW21NmZlnYrlFRFLJzPBMTHqLiEhmUcAQ\nEZG4KGCIiEhcMjZgrNL8tSIiSZWxAeOBB1JdAhGR3JKxvaQ6dnQWLIBGjVJdGhGRzJCzvaR23hnG\njk11KUREckfGBozLLoNbboEMrCCJiGSkjA0Y/fvDhg0weXKqSyIikhsyNmA0aACXXhrUMkREpP5l\nbMAAOPVUeO89GDdOTVMiIvUtowNGkybw6KPwpz/BwQfDG28ocIiI1JeM7VYbWe7SUhgzBq67DgoK\n4Igj4LDDoG9faNYshQUVEUkjte1Wm7kB48gjYdQoKCzcvL20FN59N6hpvP46zJgBDRtC8+bQogU8\n9BAceGAKCy4ikkK5GzAABg+OORijrAx++glWr4aHH4YFC4J/RURyUe4GjKIimDRpixrGLwwdCp9+\nCgUFLLhxDAcc2YKvvgp6WImI5JraBoxUruldO9UFCwiCxZQpAGzf/BxathzLrFmw995JKJ+ISJbJ\n3L+1y4PF0KFQXAwDBvxyCtuCguDfoiJ44AEGDIBXXklqKUVEskbmBoxy5bWI8eOD4BFp1KggzxHW\nRo46SgFDRCRRmZvDKC/3gAFBsIgjp7FhA2yzDXz2GbRtm6TCioikiZydrXazqFpELI0bw6GHwsSJ\nSSqbiEgWSWnAMLOHzWyZmc2J2DbCzL40s1nhT/+YH1JYGHStrS4BHuY6jvrs37zy/M91Un4RkVyS\n0iYpMzsQWAM87u49wm3DgdXufmuM87zG5S4uhilT+IoO7NloHsvWbkV+5vYRExGpsYxuknL3t4CV\nlexK7AvF0WOqY1EHOnUvYPr0hK4gIpKz0jWHcZGZzTazkWZWTVtThDh7TB11TB7jxtVxiUVEslw6\nNsrcC1wXvr4euAU4O/qgESNGbH5dXFxMcXHxL8ZdbKE81wGcfHKQ/D76aNh//7ouvohIeigpKaGk\npKTOPi/l3WrNrCvwUnkOI559VeYwVq0KahYPPFBtEnzCBDjttKDHVK9eCRdfRCRjZHQOozJm1j7i\n7SBgTlXH/kK8PaYIlni9774g3fHRRzUvp4hIrklpk5SZjQYOBtqY2RJgOFBsZj0BBxYC59XX9Y87\nDtauhX79YNo06Nixvq4kIpL5Ut4klYiEutXG8Le/BXnykpJg/QwRkWyUu9Ob12G5N22CY46BnXaC\n226rs48VEUkrWZfDSIUGDeCJJ+CFF2KuxyQiktPSsVttSrRqBc88E+Qz1q8P1szYeWc0GlxEJKQa\nRoTeveHRR+Gll2DQIGjZEo49NkiMi4jkutzMYUQs3cqoUVV2w12zBi66CBYtgnHjKsYFiohkIiW9\nExFORAgE04UUFlYEkLZtYfHizcGkbKtCzjoLliyBl19W0BCRzKWAkYjoRZeOPbYigLRpA8uXB68H\nD4axYykrgzPOgK+/DvIcrVrV+iuIiCSdekklInrRpcg5qHr2rHgdzkeVlxfkNnr0CH40caGI5KLc\nrGFEi5yDCipeDxu2Za5j2DAmTy/grPlXUjyoFbff05iWLeuuGCIi9UlNUvUpOtfx7bcwZQqrac75\nnV9h/a8O5Jln6r8YIiJ1QU1S9Sl6uvTw/VZFu/DgtB7Mnh0kwkVEcoFqGLFET5ce9f611+Ccc2Du\nXGjWrP6LIyJSG2qSSrEhQ6BdO/jnP1NdEhGR2BQwUiUc/PdtXnt6zPkPE19tsLmDlYhIOlIOI1XC\n9cO3eWMMN3a5n4svjtg3dGiQMB8wIGjGEhHJAgoYiYpIiJ8+/mQWLoQPPgj3hcGE8eOD4CEikgUU\nMBIVMfgvv00hZ58N998f7ovuXSUikgWUw6gjX34Je+4ZzDnVbGNU7yoRkTSgpHcaGTgwWLnv7LMj\nNsY5M66ISH1T0juNnHdeRLNUOeUzRCRLKGDUoX79YNkymDkzYqPyGSKSJRQw6lBeHpx7blQtI3pm\nXBGRDKUcRl2IyFN8fctodu/Tkttugz59YKedwBJuMRQRqTsZncMws4fNbJmZzYnY1trMJpnZp2b2\nqpml/5/lEXmKDsPP5f77YeJE+PWvgwX8Ro5MdQFFRGovpTUMMzsQWAM87u49wm03A8vd/WYzuwJo\n5e5XRp2XXjWM6BX8Ipqe3n8fDj8cPvwwmHNKRCRVMr5brZl1BV6KCBjzgIPdfZmZtQNK3H2XqHPS\nK2BEz2obZdgw+O47eOSRFJRNRCSUjQFjpbu3Cl8bsKL8fcQ56RUwqvHjj7DLLvDcc7DvvqkujYjk\nqtoGjPy6LExdc3c3s0ojw4gRIza/Li4upri4OEmlqrkWLeAf/4CLLoJp06CB+qaJSBKUlJRQUlJS\nZ5+XjjWMeUCxuy81s/bA5LRvkorDpk1wwAFBy9WZZ6a6NCKSizK6l1QVXgROD1+fDjyfwrLUmQYN\n4M474corYf78VJdGRKTmUt1LajRwMNAGWAb8FXgBGAt0BhYBJ7j7qqjzMq6GUe7BB+Hmm+Hdd6FN\nm1SXRkRyScYnvRORyQED4IorYOpUeO01aNIk1aURkVyhgJFJwhHhm5o246Qmz5HftBFPPqkkuIgk\nRzbmMLJXOCK8wYRXeKzBmSx6/XOu7DJaS7mKSEZQwEimiJlrm468m5d2/BMvf7kXt4zfNfbU51oj\nXETSQFqPw8g6o0ZtMSJ865alTKQffRvNoO2hLTitqvPK56qC4PyxY5NVYhGRzRQwkqmwcMuH/ahR\ndBo6lAmXNeOQgc34aBG0bx8c1rUrHHRQONOt1tQQkTSgpHea+OADeOaZoMVp1SqYMQO6dQvGbuzY\nRmuEi0jtqZdUltq4EW6/HW66Cf7wBzjjDOjSRWtriEjiFDCyRcQiTLRtC4sXQ0EBS24ezTU3t2TS\nJCgrC1qlBg8OAoiCh4jUhAJGtigurkhst2kDy5cHrwcPhrFjcYevvgqaqv7+96Bl6qE2V9Llm2lB\nkBk1KphHvTzojBql5isR2YICRraIXISpsDAYBl7JgkwApaXwz3/CrcNXce3GqxnKA+QPPg6+/bYi\n6HTrBp07K3iIyGYauJctRo0KahOTJsHTT1e8ruRBn58PV10FJfteydMMZtfGC3j80EcobdI8OKCo\nCDp02LxsbMwxHiIicVINI5OFK/1NHvIww//ZnGXflHHRVo9y8jO/Zes/nFzlsrEikpvUJCUAuAcV\nigcegHHj4NfFP3PWilvo9/z55G2tYCEiChi5J7I3VRW5iVWr4Kmn4OGH4Ztv4Oyzg5/ttktBeUUk\nbSiHkWvKpwmJkZsoLITzzoPp0+HFF4Nc+F57BaeKiCRKU4NkmhpOE9KzJ9x9N3TvDuecAyUlmk5d\nRBKjR0emiexNVYNE9h/+EHTHvf/+eiybiGQ15TByyMcfBxMavvdeMEQDiCsnIiLZQUlvqZEbbgiW\nhx03LpxaJHKE+eDBQcBQABHJSkp6S/UiFmAaNnQVS5dCnz7wl7/AG+v2Zx1NKnIicSTVRSQ3qYaR\nC6JqEeseG8vUqfDGGzD5tVJmzyxjp13y6f2rPIpm3MPAj25ku6L2W+ZJopuuNG+VSMap9yYpM+sL\nDAe6UtGryt19+0QvWlsKGDUUOU9VJcnyDRtgzhyYORPeKfmZF5/5mR6/asLJQ/I54QRo3ZpfNl1F\nzlsVTpAoIuktGQHjE+CPwEygrHy7uy9P9KK1pYBRQ6tqtgDThg0wYQKMuvR/TFy8K/3azuTMduP5\n9fs3k1fUOwg6p5yiqUdEMkwyAsZ0d9830QskyswWAT8SBKmN7r5PxD4FjGQoLmbllNmM4SQeKfwT\ns37YngYN8zAzWhVu4n9FF7Ddk//YMlio15VI2kpGwPgHkAc8C2wo3+7uMxO9aFwFM1sI7O3uKyrZ\np4CRDFFNWRuaFuIezFt15ZXQqFEwzfoWopuu1FQlkjaSETBKgF8c5O6HJHrReIQBo8jdv69knwJG\nbcRbC4jRlLV4MfTuDQsWQMuWETuqyZeISOpk7TgMM1sA/EDQJHW/uz8YsU8BozbqqBZwyinQqxdc\nPj8iAN17L1x+edz5EhFJntoGjGrnkjKzQoJeUgeFm0qA69z9h0QvGqcD3P0bM2sLTDKzee7+VvnO\nESNGbD6wuLiY4uLiei5OFqnhfFRVufxyOPpouGT7BTR6a0rFxngCkHIdIvWupKSEkpKSOvu8eJqk\nngXmAI8BBgwB9nT34+qsFNUws+HAGne/JXyvGkZt1LDXVCyHHw6nffcvTvvg8po1QynXIZJ0ychh\nzHb3varbVpfMrADIc/fVZtYMeBW41t1fDfcrYKSJCRNg2GVlzN7tZOzBGgQg5TpEki4ZU4OsM7MD\nIy7YF/gp0QvGaVvgLTN7H5gOvFweLCS99OsH5OVx1Q5jmb046EUVlwRn3RWR1ImnhtETeBwo7wuz\nEjjd3WfXc9lilUk1jDQydy7cd19QYVi3Dvr2hW22CUaIt31tNEdsHEf3NiuUqxBJsaT1kjKzFgDu\n/mOiF6srChjpa/78YKW/FSuCny/vH8e4pb1px1JO2ONj+j12CrvvDo0bx/mBSo6L1Jl6CxhmNsTd\nnzCzy9hyHIYRzCV1a6IXrS0FjAwyYABl4yfyVvdzGNv3Dt6c3pgFC4IVAA86CC69FLp2jXF+rOS4\ngolIjdRnDiPse8lWUT/Nw39FqjdqFHmDj6d4+k3ck3cRH7Yp5vsDj+WBW1az1Vaw997B+uOLF1dx\nfqwuwJqKXSSp4pqt1t3frm5bMqmGkaEqqS18/z3ceivcc0+Q8+jWDbbfPvi3a1fo1mY13e++mNaP\n3vbLGoR6WonUSDK61c5y915R22a6e+9EL1pbChgZKsYDfsPZF7B4zo8s8G4sPOkqFn1bwMKFsHBh\nUJHo0QOOPTb42XHH8KQ6HE8ikgvqM4exP9AH+BNwK0HuAoLmqEH1OQ6jOgoYGSrWAz6y9tGtW7Do\neJib2NC0kMmT4fnng5/eveGvf4X99kv6NxDJaPWZw2hEEBzyqMhdNCeYcvy3iV5QclhhYZC0rqw2\nEJmr6NBhi9xE48bQv3/QdXfxYjjmGDjxxGAMyPTpyf0KIrksniapLu5eVUoyJVTDyEKRtY9YizOF\nPaN+btKCR/uP4bp/FdC3L9zI1Wy/9B31mBKJIRkjvR8KJyAsv2BrM5uY6AVFKhVZ+4g1CjzsGdVo\n4ksMfecMPvkE9tgDfvXfK7hySn9Kx7+qHlMi9SSeGsb77t6zum3JpBpGDqsicb70sN9x5hunYi1a\nMHbu7jTfTjUMkWjJqGGUmVmXiAt2BTYlekGRWqmi9tHuv3fz4vGP02FgEQcPLGTp0hSWUSRLxVPD\n6A88ALwZbjoIGOruE+q5bLHKpBqGVMod/vY3ePhheOEF2HPPVJdIJH0kZS6pcBGj/QimCJnm7ssT\nvWBdUMCQ6owaBZdcEqw5fsYZqS6NSHqoz3EYu7r7x2a2N0GgKL+IA7j7zEQvWlsKGBKPuXPht7+F\nPn3grrugadNUl0gkteozYDzo7ueaWQlbTj4IgLsfkuhFa0sBQ+K1Zg2cf37QAWu77YIxgUVFcMMN\nkJeX6tKJJFfSpjdPJwoYUlMbNgSD/hYuhOuug0GD4M9/jnGCZsKVLFSfNYzjqaRmUc7dn030orWl\ngCHVinzgt20bRIvw4b9wZSH77AOTJwdjOCqlNcclC9U2YOTH2Hc0QcDYhmBOqTfC7YcA7wApCxgi\n1Sqf+hygTRtYHvbTGDqUbmPHctNNcOqpMGPv82n0+ce/rElET6uuGodI1eMw3P0Mdz+TYE6p3dz9\neHc/Htg93CaSviIf+D17VrwO19Q488xgfsNrX+tT+Zoa0eM9tPaGSFzjMOYBu5a3AZlZA+Ajd98l\nCeWrqkxqkpLYIuemgorXw4Ztriksu300e/UoY/efZ5HfooD8fYvYul1D9toriDG9egVrdABae0Oy\nQjLWw7gL6A6MIuhaeyIw390vSvSitaWAIQmLyk0s/n8P8tlF/6b04kspffARli5cx+wNO/N+h6OY\nPTef9u2hb1/o2/snjpp4EW0fu0XBQjJWMgKGAYOAA8NNb7r7c4lesC4oYEjCYtUUooJJ2eixfPgh\nvP12sPnVV4PTf7/6nxz44zisWZjPiKi1KL8h6SxZI727Aju5+yQzKwDy3H11ohetLQUMSVisRZyq\naXZauRIefxzuu3oxTX5awU1cwRGDC+Hbb6tc/KmyqdkVWCRVklHDGAqcC7R29x3MrDtwr7sfluhF\nqy1UMH/V7QSLNz3k7jdF7VfAkLoX55KvfuQAnpvQhCsb30a3Azpw04Y/0XPq3UGgadwYpk4NDozu\njquuupJiyZit9kKgL8FKe7j7pwRdbeuFmeUBdwH9gd2Ak81s1/q6nshmsVYEjGCjR3Hc4HzmLmnJ\nMcc1pP/8Ozi509t8eu/r0KJFcFBEj6zNorvqlhs6NAgmAwYEQUskTcUTMDa4+4byN2aWT4wBfXVg\nH+Azd1/k7huBMcDAeryeSM2EgaVh20IuvBA++7wBe5x3AH36t+DsrZ9j2dHnVN6TqqqFodRlVzJE\nPAFjipldAxSY2a+Bp4GX6rFMHYElEe+/DLeJpKXmzeGaa2D+fCjcpjH7fvAgc7+qpJZSVQ2mqpqH\nSJqJNdK73BXAOcAc4DzgFeCheixTXLWXESNGbH5dXFxMcXFxPRVHJD6tWsEttwRjOA45BEaPhsOq\nyvRFJsDvvRcuv7za3IlITZWUlFBSUlJnnxcz6R02P32YzEF6ZrYfMMLd+4fvrwI2RSa+lfSWdFdS\nAieeCGedFcxMYhbkw/v0gb32ggaHFisBLkmXjF5SLwAXu/viRC9SowIFQeoT4DDga2AGcLK7fxxx\njAKGpL1584KV/8rKYNMmWLs2iBGrVsER+W+wx9cTKezSklbDL2G7nZtRVASNoifdUVdcqUPJCBhv\nAb0IHtxrw83u7scketFqC2V2JBXdake6+9+j9itgSMZatAgmPvcTn98/iZX79mfl2sYsXBjEhf32\ng0MPhSFDgvU7EuqKqyAjVUhGwDi4/GXEZnf3KYletLYUMCQbrVoFb74JEybAmDHQrx/8cfGf2Pfd\n22s2h5XGe0gV6nM9jKbA74EdgQ+Ah8NurimngCEZoRZ/6f/wQ9Ccdee/y9hp/RzufHl7uhe1iO9k\nTZQoVajPgDEW+Bl4CxgALHL3SxK9UF1SwJCMUAd/6W/cCHfeCTfeGCw1e/XVcaxNHueI9V9QU1bW\nq8+R3ru6+6nufj9wPHBQohcRyUl1ML6iYUO49FKYPTt4lu+yS9ALd8OGqAMjR4vDluM94h1JrgGE\nUo1YAaO0/IW7l8Y4TkQqU9XI7gR07AhPtRzKmNYX8PLwGeyw/SZuvx2++io8INbDPt5AoAGEUo1Y\nTVJlwE8Rm5oC68LX7u5xNqjWPTVJSVarqmkooonrvcOH8a82NzFpUrDIU/H68eyyZBJNO29D0ysu\npknrAho1CrrpNr7uGrr+byzd9t6a/N133mJ98y0CWaJNWZIxkjK9ebpRwJCsVlXuo5Jk9qZNMHcu\nTH7lJxaOnMy6Aw5n3abGrF8PP/8c/KxbvZGF761k6aa27Ji3kL3WvsN+TGO/DkvYa4c1NGzeWDmL\nHKGAIZJtqurlVMsawE8/wbxfX8T776zl3TbHMO2nHnz8UxcasIlGeZtoUtiEG26A886r4+8jaUMB\nQyTb1GfTUORnn3IKZeMnsrH3fmx8fhxf/FjIwIFw+unw/74Yis1Xj6lso4AhIompJDAtXQr9+8NB\ny//L7V8NpgFe/4P/6rM7r7oKb0EBQyRX1dPDcNUqOGb7D1m8ciuaNykjf4cuNGmWx447wq67wq5T\n7mOvH99ih9YrsdF1cN36HJmuUe9bqG3AiGd6cxFJR+XdZSEIHnX0MCwshNc/2Y7Ph4ygbPh1lP7r\nBtYuWManc3ZgXtsLeGxWD2Z/fyQ/0JJe3b9kl+MLads2mJW3fftgavc2bWpwwfrszquuwnVKNQyR\nTJWsKUCi/0pfswbGj+e7vQ5n1l+f49Ovm/P997B8edBjd8oU2GMPOHrjs5yd/xhtCzfGrgElK2eT\n481RoCYpkdyVrIdhdGCCmNfdsCFYD+SZM17m5aV7cwcXM3iw5XxzUDpQwBCR+pVoYBowgOnjv+eM\nJmPY/YiO3PNgI7bZpobXjszTtG1b9aBDiYsChoikTqwHerh//R0PMPy2Qp58Ev7zn6CFK26RzWFt\n2gTtXqAEdoIUMEQkdWrwQJ80CU47DS6+GK64AhrEmsmuXGRzWGEhvPaapm2vhfqcrVZEJLbIXkg9\ne1a8ju6RNHQov76hmP/tMoSXnivlqC4fMq7Hlazrd2zsGXQjJ3B8+umqJ3OMd0ZeqRXVMEQkcZH5\nDag61xFRE9l4/Enc/f4BPPd5D2bRi+L2n7Lz74po0gSaTHieJiu+pnETaHTuGRS0KWCPPWD33YOp\n3quk8RZxUZOUiKS/6J5Wp5wC48ezouehvPqHF/ni+2asXw/rH3qS9Uu+5WcasaHbrqze5zA++CBI\njfToAUcfHcSktm2r+Xw1V1VKAUNE0l90T6uqel5V8eBfvRreew+eeAKefRaOOw7OOAN23jkIHvZD\nxOcNG6bpQKqggCEi2SOOLrzffQcPPgjPPQcLF8L69dClS7B0bV4e5M37kJ4/vsnvuY89B++i5qkI\nChgiktN+/DFoslq/HsrKoPSPf+b16c14sOEFdOm1NRdeks8JJ0B+XUyElOGTGSpgiEjuifXgDmsp\npfc8wLiphdx6a7CU7TXXwKlTz6fhZx8n/sDP8OR61gUMMxsBnAN8F266yt0nRB2jgCGSy2r44J4y\nBa6/Hua/vZS9Nsxga75n6+5t2OXyo+nXDzp1ivO6GZ5cz8aAMRxY7e63xjhGAUMklyX44P6g7wUs\nmPo1K7r2ZnnrnZm1pA2TVhWxzfbNOeGkPP7ylyAPUqVEp0lJk6asbA0Ya9z9lhjHKGCI5LJEH9yR\n5x17LEyZQhkNmHnYMIaV/Z3ttoNHH60maCQiTZqysnWk90VmNtvMRppZZtX5RKT+FRYGD92a/qUe\neV44Sj2vqDe/euYKxo0LVhw87TQoLa3j8mbJuhwpqWGY2SSgXSW7rgGmUZG/uB5o7+5nR53vw4cP\n3/y+uLiY4hrNaCYiOW/VL8durGtcyLGlT9OqbUPuu68OW45StC5HSUkJJSUlm99fe+212dUkFcnM\nugIvuXuPqO1qkhKRuhPRZLT+uFMY2uw/PP88HHBAMEjwgAOCAYKtW9dDc1USZV2TlJm1j3g7CJiT\nqrKISI5mcDB/AAAMO0lEQVSIaDJqMvJuHn886Ip75pnBBLnHHResZ964cTC6fO7c1BY3VdKuhmFm\njwM9AQcWAue5+7KoY1TDEJG6E2eTUWkpjB4Nf/5zMNK8T58klrEOZF0vqXgoYIhI0lTSJXbCBBgy\nBB55BH7zm1QXMH4KGCIi9amKLrHTp8PAgXDEEcFEiMWjz6PB/E+qH2uRwjEZChgiIvUpxiDB774L\nlp195BFY9clSjtrwLNuzgK77t6f7fZfRowdY9OM5hWMyFDBEROpTrPxGRG3h/RWdmTK9MYu33YfF\n+wxm9keNADj1VPjd72CnncJzUji9iAKGiEiqRNYWBg6ERo02Bxb3YA2P//wnSJQfdhj8+9/QJj91\n04tkXbdaEZGUi3eN8MgR3I8+WjGKfOhQ7JBiiv46gNuGr2LBAmjXDvbYA8ZMKMSfSmCU+qefBsFp\n/PigfCmggCEiEi3eh/OoUUEeIrppKer8ggK45RZ44YVg1twLL0ygTGkwvYgChohItHgfzlXNaVXF\n+fvuCzNmBIMBn366hmWqKjglkXIYIiLRajv3UzXnz5gBRx8NM2dCx451UN44KektIpKBrr8e3nwT\nJk6EBklq61HSW0QkA111FaxdC3fckeqSxE8BQ0QkBfLz4YnO1/D3YSu4d/e78JWr4u+dFa86/rz8\n2pdIREQSscPSqby9cSzHf/RfpvWazb2dFlPwdjiuY+jQ2o8CL++tVf55taQahohIqhQUsBOf8W6v\nCynbZ3/2n30v93A+Y7a/ildPepgvv6z95wN11hVXSW8RkVSJ6E3lLQt54v61TPvX26zY8xBWzPiM\nmcs6ckm3Fxn21tE03rb2vbXUS0pEJBsVF/PFlAX8gbv4bKve3Pfydhx0UO0+Ur2kRESyUUEBnVnC\nC3tfzw33tGLIkGDBpsceg3XrUlMkBQwRkXQUjuy21yYx6NRmfP45XHEFPPUUdOoEd94JyW5oUZOU\niEiG+eQTOOUU6NYNRo6Eli3jO09NUiIiOWbnnWHqVNh2W+jdG6ZNS851VcMQEclgY8fCpZcGzVRD\nh8KJJ1b0po2mXlIiIjmutDSYSf3++4P5qTp0gDZtgp8LLgjWHQcFDBGR3BNj9b2VK+Gbb+D772H5\n8mDRpvLlYRUwRERyTeTSsN26QefOcS3dmpFJbzMbbGZzzazMzHpH7bvKzOab2TwzOyIV5RMRSWuR\nU3506JC0pVtT1UtqDjAIeDNyo5ntBpwI7Ab0B+4xM/XkEhGJFLn6XosWwbYkLN2akoexu89z908r\n2TUQGO3uG919EfAZsE9SCyciku4il4ZN4tKt6Ta9eQcgskfxl0ASFzAUEckw5cGjXIyEeG3VW8Aw\ns0lAu0p2Xe3uL9XgoyrNbo8YMWLz6+LiYoqLi2tSPBGR7BSxBkbJscdSUofPxpT2kjKzycBl7j4z\nfH8lgLv/I3w/ARju7tOjzlMvKRGRygwYECTAi4p+0UyVkb2kokQW/kXgJDNrZGbdgJ2AGakplohI\nBqrHnEZKahhmNgi4A2gD/ADMcvcjw31XA2cBpcAl7j6xkvNVwxARqSEN3BMRkbhkQ5OUiIhkAAUM\nERGJiwKGiIjERQFDRETiooAhIiJxUcAQEZG4KGCIiEhcFDBERCQuChgiIhIXBQwREYmLAoaIiMRF\nAUNEROKigCEiInFRwBARkbgoYIiISFwUMEREJC4KGCIiEhcFDBERiYsChoiIxEUBQ0RE4qKAISIi\ncVHAEBGRuKQkYJjZYDOba2ZlZtY7YntXM1tnZrPCn3tSUT4REfmlVNUw5gCDgDcr2feZu/cKfy5I\ncrkyTklJSaqLkDZ0LyroXlTQvag7KQkY7j7P3T9NxbWzjX4ZKuheVNC9qKB7UXfSMYfRLWyOKjGz\nvqkujIiIBPLr64PNbBLQrpJdV7v7S1Wc9jXQyd1XhrmN581sd3dfXV/lFBGR+Ji7p+7iZpOBy9x9\nZk32m1nqCi0iksHc3RI9t95qGDWwufBm1gZY6e5lZrY9sBOwIPqE2nxhERFJTKq61Q4ysyXAfsA4\nMxsf7joYmG1ms4CngfPcfVUqyigiIltKaZOUiIhkjnTsJRWTmfU3s3lmNt/Mrkh1eZLJzDqZ2eRw\n0OOHZnZxuL21mU0ys0/N7FUzK0x1WZPFzPLCXnUvhe9z8l6YWaGZPWNmH5vZR2a2bw7fi6vC35E5\nZjbKzBrnyr0ws4fNbJmZzYnYVuV3D+/V/PCZekR1n59RAcPM8oC7gP7AbsDJZrZrakuVVBuBP7n7\n7gTNeReG3/9KYJK7dwdeD9/nikuAj4DyqnKu3ot/A6+4+67AnsA8cvBemFlX4Fygt7v3APKAk8id\ne/EIwfMxUqXf3cx2A04keJb2B+4xs5gxIaMCBrAPwUjwRe6+ERgDDExxmZLG3Ze6+/vh6zXAx0BH\n4BjgsfCwx4BjU1PC5DKz7YABwENUdJ7IuXthZi2BA939YQB3L3X3H8jBewH8SPCHVYGZ5QMFBN31\nc+JeuPtbwMqozVV994HAaHff6O6LgM8InrFVyrSA0RFYEvH+y3Bbzgn/kuoFTAe2dfdl4a5lwLYp\nKlay3QZcDmyK2JaL96Ib8J2ZPWJmM83sQTNrRg7eC3dfAdwCfEEQKFa5+yRy8F5EqOq7dyB4hpar\n9nmaaQFDGXrAzJoD/wUuiR7U6EEvhqy/T2b2G+Bbd59FRNfsSLlyLwi6x/cG7nH33sBaoppccuVe\nmNkOwB+BrgQPxOZmdmrkMblyLyoTx3ePeV8yLWB8BXSKeN+JLSNk1jOzhgTB4gl3fz7cvMzM2oX7\n2wPfpqp8SdQHOMbMFgKjgUPN7Aly8158CXzp7v8L3z9DEECW5uC9KALecffv3b0UeBbYn9y8F+Wq\n+p2Ifp5uF26rUqYFjP8DdgqnQW9EkLB5McVlShozM2Ak8JG73x6x60Xg9PD16cDz0edmG3e/2t07\nuXs3gqTmG+4+hNy8F0uBJWbWPdx0ODAXeIkcuxcEyf79zKxp+PtyOEGniFy8F+Wq+p14ETjJzBqZ\nWTeCgdIzYn1Qxo3DMLMjgdsJej+MdPe/p7hISRNOxvgm8AEVVcerCP4jjwU6A4uAE3JpwKOZHUww\nhcwxZtaaHLwXZrYXQfK/EfA5cCbB70gu3othBA/GTcBM4BxgK3LgXpjZaIIB0G0I8hV/BV6giu9u\nZlcDZwGlBE3cE2N+fqYFDBERSY1Ma5ISEZEUUcAQEZG4KGCIiEhcFDBERCQuChgiIhIXBQwREYmL\nAobkBDO7JpwSfnY4Hfqvwu1/NLOmMc57sK5mRDazNdXs7xo5LXWcn/momR1fu5KJxCcdlmgVqVdm\ntj9wFNDL3TeGg/sah7svAZ4A1lVyXgN3P7cOi1Ifg55ydl4kST7VMCQXtAOWh1Pi4+4r3P2bcAGq\nDsBkM3sdglqAmf3LzN4H9jezEjPrHbHvb2b2vpm9a2bbhNt3MLNpZvZBuH915cUImFlzM3vNzN4L\nzzkmYne+mT0ZLoL0dHntx8z2Dsvyf2Y2oXxuoPKPrKsbJRKLAobkgleBTmb2iZndbWYHAbj7HQRT\nYBe7+2HhsQXANHfv6e5T2fKv9wLgXXfvSTBFS3nt49/Abe6+J1tOv1+VdcAgd98bOJRgOu5yOwN3\nu/tuBGs7XBCu63AncLy7FxEsknNDDe+BSK0pYEjWc/e1wN7AUOA74CkzO72Kw8sIZgOuzM/uPi58\n/R7BFNoQrH74dPh6dBxFagD83cxmA5OADuW1FWCJu78bvn4S6EsQRHYHXjOzWcA15Og6MJJaymFI\nTnD3TcAUYEqYWD6dilXIIq33qidY2xjxehOJ//78jmByuN7uXhZO0d6kvKgRx1n43oC57t4nweuJ\n1AnVMCTrmVl3M9spYlMvglk7AVYDLWp5iWnAb8PXJ8VxfAuCxZ/KzOwQoEvEvs5mtl/4+hTgLeAT\noG35djNrGK7HLJJUChiSC5oDj5rZ3LAZaBdgRLjvAWBCedKb+Fcji+yd9Efg0jBRvgPwQzXn/wco\nMrMPgCEEa7OX+wS40Mw+AloC94bJ+t8CN4XXmEWwKFBl5RKpN5reXKSWzKypu68LX58EnOjug1Jc\nLJE6pxyGSO3tbWZ3EeQaVhIsSCOSdVTDEBGRuCiHISIicVHAEBGRuChgiIhIXBQwREQkLgoYIiIS\nFwUMERGJy/8HR/cPqiLluQQAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10470c290>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"classifier = KRR(x_train, y_train, str_kernel)\n",
"sc = classifier.score(x_train, y_train)\n",
"sr = classifier.sqr_error(x_train, y_train)\n",
"\n",
"print \"Training R² score:\", sc\n",
"print \"Training square error:\", sr\n",
"\n",
"y_pred = classifier.predict(x_train)\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'r.')\n",
"plt.plot(range(y_pred.shape[0]), y_train, 'b-')\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.title(\"Training data\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (d)\n",
"\n",
"Prediction with the test set"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test R² score: 0.980099835919\n",
"Test square error: 1.02530848376\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1077f2650>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sc_test = classifier.score(x_test, y_test)\n",
"sr_test = classifier.sqr_error(x_test, y_test)\n",
"\n",
"print \"Test R² score:\", sc_test\n",
"print \"Test square error:\", sr_test\n",
"\n",
"y_pred = classifier.predict(x_test)\n",
"\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'r.')\n",
"plt.plot(range(y_pred.shape[0]), y_test, 'b-')\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.title(\"Test data\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As is possible to see in the __Testing data__ plot, the error is really close to the original traning data error, so the model is consistent for those values."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (e)\n",
"\n",
"Build a new kernel, $k^\\prime$, composing the kernel $k$ with more complex kernel (polynomial, Gaussian, etc). Repeat steps (b) and (c). For instance, the new kernel may be defined as:\n",
"\n",
"$$ k^\\prime (x,y) = (k(x,y)+1)^d $$\n",
"\n",
"where $d$ is positive integer exponent.\n",
"\n",
"__R/__ For the exercise the kernels will be\n",
"\n",
"<ol type=\"I\">\n",
"<li> $k^\\prime(x, y) = k(x,y)^2$ </li>\n",
"<li> $k^\\prime(x, y) = (k(x,y) + 1)^3$ </li>\n",
"<li> $k^\\prime(x, y) = e^{(k(x,x)-2k(x,y)+k(y,y)) / \\, 2}$ </li>\n",
"</ol>\n",
"\n",
"So, for $k^\\prime(x, y) = k(x, y)^2$ the results are:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training R² score: 0.999950895498\n",
"Training square error: 0.00237972651175\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10824cd90>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test R² score: 0.933053825591\n",
"Test square error: 3.44924194076\n"
]
},
{
"data": {
"image/png": "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\n0rJEAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1084a0150>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def square_kernel(a, b):\n",
" return (str_kernel(a, b)) ** 2\n",
"\n",
"classifier = KRR(x_train, y_train, square_kernel)\n",
"sc = classifier.score(x_train, y_train)\n",
"sr = classifier.sqr_error(x_train, y_train)\n",
"\n",
"print \"Training R² score:\", sc\n",
"print \"Training square error:\", sr\n",
"\n",
"y_pred = classifier.predict(x_train)\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'b.')\n",
"plt.plot(range(y_pred.shape[0]), y_train, 'r-')\n",
"plt.title(\"Training data\")\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.show()\n",
"\n",
"sc_test = classifier.score(x_test, y_test)\n",
"sr_test = classifier.sqr_error(x_test, y_test)\n",
"\n",
"print \"Test R² score:\", sc_test\n",
"print \"Test square error:\", sr_test\n",
"\n",
"y_pred = classifier.predict(x_test)\n",
"\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'b.')\n",
"plt.plot(range(y_pred.shape[0]), y_test, 'r-')\n",
"plt.title(\"Test data\")\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The results for $k^\\prime(x, y) = (k(x,y) + 1)^3$ are:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training R² score: 0.999999626008\n",
"Training square error: 1.81246069907e-05\n"
]
},
{
"data": {
"image/png": "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\nwQntgg5PROJENMZhjAAeALoDR4X/dS3uDWX/RVZXVapdnSE8w6struO2nOO5/dDRpPd1jRQXkTJX\nlBLGNHc/OkrxFEmilTAi5ebCkCEwfDhcd+J0rvv6PBZzEO/1eYiHs9oEHZ6IxLBoVEndA1QEXgd+\nzz/u7l8X96YllcgJI1J6OkzM2sp9TR7myk338l7Ti3m8+o3k1UzV+A0R+YNoJIwc4A8XuXuv4t60\npJQwQiJLG6mbl/Fup39yzPI3yWQQC/pcxSNZrYMOUURiiAbuyU7p6TAj6xfuaPwEGWuGM6taN95s\n/Q9uyTpOpQ0RiUoJI5VQL6njw4dygNvdfW1xb1pSShh7FlniOOe0TRw0+QWu4/9YU6UxY1v/kzlN\n+6qqSiSBRSNhvA7MBl4ADLgAaO/uZxX3piWlhLFv+V1xu3beQe8Nr3PF/Cs5lXdoldFZ06iLJKho\nJIyZ7t5hX8eiSQlj3yJLG4MGQZOs4VxaPZNWP3xEam3NTSWSiKIxDmOzmfWIuGF3QPNTxLjUVBg7\nNvQ1MxPWDbiQjk1WkfrJ+KBDE5E4VZQSRkfgRaBW+NAaYLC7zyzj2AqLSSWM4sjKgquvhjlzoFKl\noKMRkSiLWi8pM6sJ4O7rinuz0qKEUUzucMopcPrp8Le/BR2NiERZmSUMM7vA3UeZ2bXsPg7DCM0l\n9UBxb1pSShglMGsW6445mYs6fMXG2k3Ua0okgZTlehgp4a812MPAPYlT7dvzaoMreOazw5lPW0a0\nPI0FB/Xhl/odGPVKJSUPEdmrIs1W6+6T93UsmlTCKJn8KUUuajOZtPXjOXTZRFqwlO/rd2FJ0+N5\npeL5rKnXWqUPkXImGt1qp7v7kQWOfe3unYp705JSwiiZgl1us7IgrWMu42+eyrvXZJP280vMoj1v\nNLiUb9ueQZXqlZQ8RMqBsmzD6AYcC1xDaHrz/JvUAM7UOIzyYbf5qFJDpY8Psn7nupavM/C3p6i3\nbjGPciUr+1/Cc29qmViReFaWCaMn0Au4FHgq4tR6YLy7LyzuTUtKCaPsFCx9LMuazp11H6Tn+rf5\nqmYvvFIVjj3OmDyvDvfUvY+k6skqfYjEiWhUSTV39++Le4PiMrOlwDpgB7DN3btGnFPCiILI5HFx\n359J+uwTKpDHMV2dk755hNvXX8MYziUjA003IhIHopEwsoEMd88N79cBRrv7KcW9aZECM1sCdHb3\n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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x105cf3090>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test R² score: 0.86813739003\n",
"Test square error: 6.79390642924\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10886f690>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def polynomial_kernel(a, b):\n",
" return (str_kernel(a, b) + 1) ** 3\n",
"\n",
"classifier = KRR(x_train, y_train, polynomial_kernel)\n",
"sc = classifier.score(x_train, y_train)\n",
"sr = classifier.sqr_error(x_train, y_train)\n",
"\n",
"print \"Training R² score:\", sc\n",
"print \"Training square error:\", sr\n",
"\n",
"y_pred = classifier.predict(x_train)\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'b.')\n",
"plt.plot(range(y_pred.shape[0]), y_train, 'r-')\n",
"plt.title(\"Training data\")\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.show()\n",
"\n",
"sc_test = classifier.score(x_test, y_test)\n",
"sr_test = classifier.sqr_error(x_test, y_test)\n",
"\n",
"print \"Test R² score:\", sc_test\n",
"print \"Test square error:\", sr_test\n",
"\n",
"y_pred = classifier.predict(x_test)\n",
"\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'b.')\n",
"plt.plot(range(y_pred.shape[0]), y_test, 'r-')\n",
"plt.title(\"Test data\")\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The results for $k^\\prime(x, y) = e^{(k(x,x)-2k(x,y)+k(y,y)) / \\, 2}$ are:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training R² score: 0.999998707267\n",
"Training square error: 6.26490779187e-05\n"
]
},
{
"data": {
"image/png": "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\nxp59N1tz/QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10860ced0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test R² score: -188.301862093\n",
"Test square error: 9753.32687732\n"
]
},
{
"data": {
"image/png": "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\nTKP2hwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1089600d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def gaussian_kernel(a, b):\n",
" return math.e**((str_kernel(a,a) - 2*str_kernel(a,b) + str_kernel(b,b))/2)\n",
"\n",
"classifier = KRR(x_train, y_train, gaussian_kernel)\n",
"sc = classifier.score(x_train, y_train)\n",
"sr = classifier.sqr_error(x_train, y_train)\n",
"\n",
"print \"Training R² score:\", sc\n",
"print \"Training square error:\", sr\n",
"\n",
"y_pred = classifier.predict(x_train)\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'b.')\n",
"plt.plot(range(y_pred.shape[0]), y_train, 'r-')\n",
"plt.title(\"Training data\")\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.show()\n",
"\n",
"sc_test = classifier.score(x_test, y_test)\n",
"sr_test = classifier.sqr_error(x_test, y_test)\n",
"\n",
"print \"Test R² score:\", sc_test\n",
"print \"Test square error:\", sr_test\n",
"\n",
"y_pred = classifier.predict(x_test)\n",
"\n",
"plt.plot(range(y_pred.shape[0]), y_pred, 'b.')\n",
"plt.plot(range(y_pred.shape[0]), y_test, 'r-')\n",
"plt.title(\"Test data\")\n",
"plt.xlabel(\"String label\")\n",
"plt.ylabel(\"Prediction\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (a)\n",
"\n",
"Getting all data"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = np.genfromtxt(\"train.csv\", delimiter=',')\n",
"\n",
"x_train = a[1:, 1:]\n",
"y_train = a[1:, 0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (b)\n",
"\n",
"Choosing classes 8 and 9"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"num1 = 8\n",
"num2 = 9\n",
"x_sub = [x_train[i] for i in xrange(x_train.shape[0]) if y_train[i] == num1 or y_train[i] == num2]\n",
"y_sub = [y_train[i] for i in xrange(y_train.shape[0]) if y_train[i] == num1 or y_train[i] == num2]\n",
"\n",
"x_sub_train, x_sub_test, y_sub_train, y_sub_test = train_test_split(x_sub, y_sub, test_size=0.4, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Performing Cross validation:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training error [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n",
"Test error [85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85]\n",
"C parameters [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10886fad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.svm import SVC\n",
"\n",
"reg = range(-5, 16)\n",
"test_error = []\n",
"train_error = []\n",
"\n",
"for i in reg:\n",
" val = 2**i\n",
" classifier = SVC(C=val, kernel='linear')\n",
" classifier.fit(x_sub_train, y_sub_train)\n",
" y_pred_train = classifier.predict(x_sub_train)\n",
" y_pred_test = classifier.predict(x_sub_test)\n",
" error_train = sum([1 if y_pred_train[i] != y_sub_train[i] else 0 for i in xrange(len(y_pred_train))])\n",
" error_test = sum([1 if y_pred_test[i] != y_sub_test[i] else 0 for i in xrange(len(y_pred_test))])\n",
" train_error.append(error_train)\n",
" test_error.append(error_test)\n",
"\n",
"print \"Training error\", train_error\n",
"print \"Test error\", test_error\n",
"print \"C parameters\", reg\n",
"plt.plot(reg, train_error, 'r')\n",
"plt.plot(reg, test_error, 'g')\n",
"plt.title('Train and test error')\n",
"plt.xlabel('C values')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The constant results changing the C values, means that the classes are separables and for that the value of C doesn't affect the behaviour of the model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (c)\n",
"\n",
"Getting the coefficients of the model, we choose an arbitrary value of C because it doesn't matter to the model"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"classifier = SVC(C=0.03125, kernel='linear')\n",
"classifier.fit(x_sub_train, y_sub_train)\n",
"\n",
"# This are the weights of the linear SVM model\n",
"weights = classifier.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (d)\n",
"\n",
"#### I.\n",
"\n",
"Arranging the weights with the same shape as the input images."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"weights = weights.reshape((28, 28))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### II.\n",
"\n",
"Ploting the weights of the SVM model"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x108283b90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.pcolor(weights)\n",
"plt.axis([0, 28, 0, 28])\n",
"plt.colorbar()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### III. \n",
"\n",
"Ploting the weights with the diverging colormap"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n/H+8Jbs1Xn2TXwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1077f6910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.pcolor(weights, cmap=\"seismic\")\n",
"plt.axis([0, 28, 0, 28])\n",
"plt.colorbar()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### IV. \n",
"\n",
"Discuss the results.\n",
"\n",
"__R/__ As is possible to see, there are several conclussions:\n",
"\n",
"* Not all the pixels are important to define the model\n",
"* The parts where are common parts have lower weight\n",
"* In this case we are calssifying the 8's and 9's, so the main difference is in the bottom-right of the image, this happens because in this part the 8's close the circle and the 9 remains as a stick."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (e).\n",
"\n",
"Upload to kaggle\n",
"\n",
"__R/__ We make the submission as __unal-ml__\n",
"\n",
"<img src=\"kaggle.jpg\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (a)\n",
"\n",
"Building the dataset of spanish and english words."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000 1000\n"
]
}
],
"source": [
"import csv\n",
"\n",
"# This is the size of the data for each language\n",
"n = 1000\n",
"\n",
"english = np.genfromtxt(\"english.txt\", delimiter=\",\", dtype=str)\n",
"english = english[:, 1]\n",
"english = [w.lower() for w in english if len(w) >= 4]\n",
"\n",
"spanish = []\n",
"with open('spanish.txt', 'rb') as f:\n",
" reader = csv.reader(f)\n",
" for row in reader:\n",
" if len(row[1]) >= 4:\n",
" spanish.append(row[1].lower())\n",
"\n",
"english, spanish = english[:n], spanish[:n]\n",
"print len(english), len(spanish)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (b)\n",
"\n",
"Function for the string kernel\n",
"\n",
"__R/__ The idea of this kernel is to find the longest contiguous matching subsequence, and returns a percentage of similarity between this values, so it's 1 if is the same string and 0 if there are totally different."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import difflib\n",
"\n",
"def string_kernel(s1, s2):\n",
" return difflib.SequenceMatcher(None, s1, s2).ratio()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (c) and (d)\n",
"\n",
"Train a SVM with precomputed kernel and do cross validation."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Preparing the dataset\n",
"\n",
"x = []\n",
"y = []\n",
"\n",
"for s in english:\n",
" x.append(s)\n",
" y.append(0)\n",
"\n",
"for s in spanish:\n",
" x.append(s)\n",
" y.append(1)\n",
"\n",
"x = np.array(x)\n",
"y = np.array(y)\n",
"\n",
"x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)\n",
"\n",
"train_kernel = [[string_kernel(s1, s2) for s1 in x_train] for s2 in x_train]\n",
"test_kernel = [[string_kernel(s1, s2) for s1 in x_train] for s2 in x_test]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training error [262, 255, 251, 288, 363, 419, 435, 451, 452, 454, 446, 454, 458, 449, 456, 451, 459, 457, 453, 454, 472]\n",
"Test error [140, 133, 133, 152, 175, 211, 216, 217, 231, 229, 229, 230, 229, 225, 225, 232, 238, 232, 229, 222, 217]\n",
"C parameters [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c4d6050>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Training the SVM\n",
"\n",
"reg = range(-5, 16)\n",
"test_error = []\n",
"train_error = []\n",
"\n",
"for i in reg:\n",
" val = 2**i\n",
" classifier = SVC(C=val, kernel='precomputed')\n",
" classifier.fit(train_kernel, y_train)\n",
" y_pred_train = classifier.predict(train_kernel)\n",
" y_pred_test = classifier.predict(test_kernel)\n",
" error_train = sum([1 if y_pred_train[i] != y_train[i] else 0 for i in xrange(len(y_pred_train))])\n",
" error_test = sum([1 if y_pred_test[i] != y_test[i] else 0 for i in xrange(len(y_pred_test))])\n",
" train_error.append(error_train)\n",
" test_error.append(error_test)\n",
"\n",
"print \"Training error\", train_error\n",
"print \"Test error\", test_error\n",
"print \"C parameters\", reg\n",
"plt.plot(reg, train_error, 'r')\n",
"plt.plot(reg, test_error, 'g')\n",
"plt.title('Train and test error')\n",
"plt.xlabel('C values')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part (e)\n",
"\n",
"#### I.\n",
"\n",
"Build the confussion matrix with the C parameter as 0.0625."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n8ugAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x108561cd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Train with the best value\n",
"classifier = SVC(C=2**-4, kernel='precomputed')\n",
"classifier.fit(train_kernel, y_train)\n",
"y_pred_test = classifier.predict(test_kernel)\n",
"\n",
"# Build confusion matrix\n",
"from sklearn.metrics import confusion_matrix\n",
"\n",
"names = [\"English\", \"Spanish\"]\n",
"\n",
"def plot_confusion_matrix(cm, title='Confusion matrix for test set', cmap=plt.cm.Blues):\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(names))\n",
" plt.xticks(tick_marks, names)\n",
" plt.yticks(tick_marks, names)\n",
" plt.tight_layout()\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')\n",
" \n",
"conf_mat = confusion_matrix(y_test, y_pred_test)\n",
"conf_mat = conf_mat.astype('float') / conf_mat.sum(axis=1)[:, np.newaxis]\n",
"plot_confusion_matrix(conf_mat)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"#### II."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['jack', 'importante', 'quise', 'value', 'imposible', 'duele', 'ancient', 'donde', 'gente', 'sere', 'sientes', 'camp', 'questions', 'plan', 'moral', 'sientate', 'muerte', 'estes', 'irme', 'coche', 'dormir', 'este', 'understood', 'stop', 'diferente', 'ayudarte', 'vere', 'dijiste', 'increible', 'usual', 'quien', 'dije', 'physical', 'conseguir', 'estare', 'linea', 'otras', 'deal', 'corte', 'tren', 'norte', 'reglas', 'grande', 'considerable', 'foto', 'marriage', 'clase', 'siempre', 'conversation', 'places', 'paid', 'llave', 'eres', 'irse', 'ladies', 'llegar', 'miren', 'caliente', 'dire', 'public', 'sentir', 'hotel', 'jesus', 'copy', 'stay', 'realmente', 'supone', 'curious', 'states', 'crimen', 'fall', 'simplemente', 'idea', 'crees', 'mision', 'seguridad', 'understand', 'darle', 'suerte', 'speak', 'creen', 'sale', 'carcel', 'seguir', 'indian', 'quieren', 'corre', 'real', 'bosque', 'tiene', 'came', 'occasion', 'meses', 'dare', 'suficiente', 'hiciste', 'madre', 'natural', 'perder', 'captain', 'probably', 'decirle', 'especially', 'road', 'hacen', 'paragraph', 'information', 'does', 'porque', 'pale', 'entonces', 'interesante', 'horrible', 'several', 'paper', 'iron', 'dicen', 'case', 'condition', 'ustedes', 'seis', 'tonto', 'pain', 'calmate', 'verte', 'dulce', 'esperen', 'ocurre', 'hice', 'problema', 'nombre', 'quedate', 'conocer']\n"
]
}
],
"source": [
"mistake_words = [x_test[i] for i in xrange(len(y_test)) if y_test[i] != y_pred_test[i]]\n",
"print mistake_words"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are two cases when there are missclasification:\n",
"\n",
"* When the words are really simmilar between spanish and english, and for that is really complex his classification.\n",
"* Because of the size of the training data is not big enough and a model has his errors, there some outliers words missclassified.\n",
"\n",
"This errors could be minimized choosing a better kernel function and training with a biggest training data."
]
}
],
"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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment