Created
April 29, 2024 04:06
-
-
Save jcboyd/a848c64c4c0f890cf3617a222795dfd7 to your computer and use it in GitHub Desktop.
Coding an SVM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "0cb0b55a", | |
"metadata": {}, | |
"source": [ | |
"# Coding an SVM\n", | |
"\n", | |
"A working SVM with a simplified version of the specialised SMO algorithm (see below). It is based on a tutorial from Stanford course CS229 (http://cs229.stanford.edu/materials/smo.pdf)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "8f62b640", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"\n", | |
"from sklearn.metrics.pairwise import rbf_kernel\n", | |
"\n", | |
"class SupportVectorMachine:\n", | |
"\n", | |
" def __init__(self, kernel='linear', gamma=0.01, d=2, r=0):\n", | |
"\n", | |
" \"\"\" Initialisation function for support vector machine\n", | |
"\n", | |
" Parameters:\n", | |
" -----------\n", | |
" kernel: {linear, rbf, polynomial} string\n", | |
" Indicates the kernel function to use\n", | |
" gamma: float\n", | |
" Variance of rbf kernel\n", | |
" d: float\n", | |
" Degree for polynomial kernel\n", | |
" r: float\n", | |
" Consant for polynomial kernel\n", | |
" \"\"\"\n", | |
" if kernel == 'linear':\n", | |
" self.kernel = lambda x, y : x.dot(y.T)\n", | |
" elif kernel == 'rbf':\n", | |
" self.kernel = lambda x, y : rbf_kernel(x, y, gamma=0.01)\n", | |
" elif kernel == 'polynomial':\n", | |
" self.kernel = lambda x, y : (x.dot(y.T) + r) ** d\n", | |
"\n", | |
" def delta_a(self, K, y, i, j, Ei, Ej):\n", | |
" # calculate denominator\n", | |
" eta = 2 * K[i, j] - K[i, i] - K[j, j]\n", | |
" # calculate delta_ai\n", | |
" delta_a = float(y[j] * (Ei - Ej)) / eta\n", | |
" return delta_a\n", | |
"\n", | |
" def predict(self, x):\n", | |
"\n", | |
" \"\"\" Prediction function for support vector machine\n", | |
"\n", | |
" Parameters:\n", | |
" -----------\n", | |
" x: (1, n_features) np.array\n", | |
" Test sample\n", | |
"\n", | |
" Return:\n", | |
" -------\n", | |
" prediction: {-1, 1}\n", | |
" Sign of output of linear score function\n", | |
" \"\"\"\n", | |
" # calculate kernel values for input x\n", | |
" kx = self.kernel(self.Xtr, x.reshape(1, -1))\n", | |
" return np.sign(self.a.dot(np.diag(ytr)).dot(kx) + self.b)\n", | |
"\n", | |
" def decision_function(self, Ki):\n", | |
"\n", | |
" \"\"\" Decision function for support vector machine\n", | |
"\n", | |
" Parameters:\n", | |
" -----------\n", | |
" x: (1, n_features) np.array\n", | |
" Test sample\n", | |
"\n", | |
" Return:\n", | |
" -------\n", | |
" prediction: float\n", | |
" Output of linear score function\n", | |
" \"\"\"\n", | |
"\n", | |
" return Ki.dot(np.diag(self.ytr)).dot(self.a) + self.b\n", | |
"\n", | |
" def fit(self, Xtr, ytr, C=0.01, tol=1e-5, max_iters=100):\n", | |
"\n", | |
" \"\"\" Training algorithm for support vector machine.\n", | |
" \n", | |
" SMO sequential minimal optimisation algorithm for training. \n", | |
" This is the simplified version (without heuristics) detailed in\n", | |
" cs229.stanford.edu/materials/smo.pdf\n", | |
"\n", | |
" Parameters:\n", | |
" -----------\n", | |
" Xtr: (n_samples, n_features) np.array\n", | |
" First data matrix.\n", | |
" ytr: (n_samples, 1) np.array\n", | |
" Second data matrix.\n", | |
" C: float\n", | |
" margin size\n", | |
" tol: float\n", | |
" precision on optimality (stopping condition)\n", | |
" max_iters: int\n", | |
" maximum number of optimisation passes\"\"\"\n", | |
"\n", | |
" self.Xtr = Xtr\n", | |
" self.ytr = ytr\n", | |
"\n", | |
" N = self.Xtr.shape[0]\n", | |
" K = self.kernel(self.Xtr, self.Xtr) # kernel matrix\n", | |
"\n", | |
" self.a = np.zeros(N) # support vector weights\n", | |
" self.b = 0 # bias term\n", | |
"\n", | |
" iters = 0\n", | |
"\n", | |
" while iters < max_iters:\n", | |
" num_changed = 0\n", | |
" # iterate over samples\n", | |
" for i in range(N):\n", | |
" # Calculate error\n", | |
" Ei = self.decision_function(K[i]) - self.ytr[i]\n", | |
" # Check optimality constraints\n", | |
" \n", | |
" if (self.ytr[i] * Ei < -tol and self.a[i] < C) or \\\n", | |
" (self.ytr[i] * Ei > +tol and self.a[i] > 0):\n", | |
"\n", | |
" # Pick random aj\n", | |
" j = np.random.choice(list(filter(lambda x : x != i, range(N))))\n", | |
" Ej = self.decision_function(K[j]) - self.ytr[j]\n", | |
"\n", | |
" # Record ai, aj\n", | |
" ai_old = self.a[i]\n", | |
" aj_old = self.a[j]\n", | |
"\n", | |
" # Set bounds\n", | |
" L = 0 ; H = 0\n", | |
" if self.ytr[i] != self.ytr[j]:\n", | |
" L = max(0, self.a[j] - self.a[i])\n", | |
" H = min(C, C + self.a[j] - self.a[i])\n", | |
" else:\n", | |
" L = max(0, self.a[i] + self.a[j] - C)\n", | |
" H = min(C, self.a[i] + self.a[j])\n", | |
"\n", | |
" if L == H:\n", | |
" continue\n", | |
" \n", | |
" # Update aj\n", | |
" self.a[j] -= self.delta_a(K, self.ytr, i, j, Ei, Ej)\n", | |
"\n", | |
" # Clip value\n", | |
" self.a[j] = max(min(self.a[j], H), L)\n", | |
"\n", | |
" # Check for change\n", | |
" if abs(self.a[j] - aj_old) < tol:\n", | |
" continue\n", | |
"\n", | |
" # Update ai\n", | |
" self.a[i] += self.ytr[i] * self.ytr[j] * (aj_old - self.a[j])\n", | |
"\n", | |
" # Set bias term\n", | |
" b1 = self.b - Ei - \\\n", | |
" self.ytr[i] * (self.a[i] - ai_old) * K[i, i] - \\\n", | |
" self.ytr[j] * (self.a[j] - aj_old) * K[i, j]\n", | |
"\n", | |
" b2 = self.b - Ej - \\\n", | |
" self.ytr[i] * (self.a[i] - ai_old) * K[i, j] - \\\n", | |
" self.ytr[j] * (self.a[j] - aj_old) * K[j, j]\n", | |
"\n", | |
" if 0 < self.a[i] and self.a[i] < C:\n", | |
" self.b = b1\n", | |
" elif 0 < self.a[j] and self.a[j] < C:\n", | |
" self.b = b2\n", | |
" else:\n", | |
" self.b = float(b1 + b2) / 2\n", | |
"\n", | |
" num_changed += 1\n", | |
"\n", | |
" iters = iters + 1 if num_changed == 0 else 0" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "da8fd60b", | |
"metadata": {}, | |
"source": [ | |
"## Linearly separable data\n", | |
"\n", | |
"We will now test our implementation on some toy data. We being by creating a random dataset sampled from two distinct Gaussians:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "c72af396", | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x12bd6f290>" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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uENEROSAQZKIiMgBg2QISktLcd9996G0tFT2UALB49NXlI8N4PHpToXjK6qNO0RERG5wJklEROSAQZKIiMgBgyQREZEDBkkiIiIHDJIhu/jiizF16lSUlZVh0qRJuOaaa9DV1SV7WL7YtWsXbrjhBkybNg0jR47E9OnTcd9996G/v1/20Hzz4IMPYvbs2Rg1ahSOO+442cMp2OOPP45p06ahrKwMM2fORGtrq+wh+WLjxo246KKLMHnyZMRiMbz00kuyh+SrhoYGnHvuuRgzZgxOOOEELFy4EB9++KHsYfnmiSeewIwZMwaLCMyaNQuvvvqqlLEwSIaspqYGL7zwAj788EOsX78eO3bsQF1dnexh+eKDDz7AwMAAnnzySbz//vt49NFH8dOf/hR333237KH5pr+/H5dddhluvvlm2UMp2PPPP4/6+nrcc8892Lp1K6qrqzF//ny0tbXJHlrBDh06hDPPPBP/9E//JHsogXj77bexZMkSvPPOO3jjjTdw5MgRzJs3D4cOHZI9NF8kEgk89NBD2LJlC7Zs2YK//uu/xoIFC/D++++HPxiDpHr55ZeNWCxm9Pf3yx5KIH784x8b06ZNkz0M361evdooLy+XPYyCfOUrXzEWL16ccdupp55q/P3f/72kEQUDgLFhwwbZwwjUp59+agAw3n77bdlDCczxxx9vPP3006E/LmeSEu3fvx/PPvssZs+ejWOOOUb2cALR09ODiooK2cOgLP39/Xjvvfcwb968jNvnzZuHTZs2SRoVedXT0wMAkfx/LZVK4bnnnsOhQ4cwa9as0B+fQVKCO++8E8ceeyzGjRuHtrY2vPzyy7KHFIgdO3bgsccew+LFi2UPhbLs3bsXqVQKEyZMyLh9woQJ+OSTTySNirwwDAPLli3DeeedhzPOOEP2cHyzfft2jB49GqWlpVi8eDE2bNiA0047LfRxMEj64P7770csFsv5tWXLlsH733777di6dStef/11xONxXHvttULNP2Vxe3wA0NXVhW984xu47LLLcOONN0oauRgvxxcV2S3jDMMItY0cFe573/sefve732Ht2rWyh+KrU045Bdu2bcM777yDm2++Gddddx3+8Ic/hD6OomqVFZTvfe97uPLKK3Pep6qqavC/KysrUVlZib/4i7/Al770JSSTSbzzzjtSlhJEuD2+rq4u1NTUYNasWXjqqacCHl3h3B5fFFRWViIejw+bNX766afDZpekrltuuQWvvPIKNm7cKLUNYBBGjBiBk046CQBwzjnnYPPmzVi1ahWefPLJUMfBIOkDK+h5Yc0g+/r6/BySr9wcX2dnJ2pqajBz5kysXr06b0NTFRTy+ulqxIgRmDlzJt544w1ccsklg7e/8cYbWLBggcSRkQjDMHDLLbdgw4YNaGlpwbRp02QPKXCGYUj5nGSQDNG7776Ld999F+eddx6OP/54fPzxx7j33nsxffp0ZWeRbnR1dWHOnDmYOnUqVqxYgT179gz+bOLEiRJH5p+2tjbs378fbW1tSKVS2LZtGwDgpJNOwujRo+UOzqVly5bhmmuuwTnnnDM4629ra4vENeSDBw/io48+Gvz3zp07sW3bNlRUVGDq1KkSR+aPJUuWoLGxES+//DLGjBkzuCJQXl6OkSNHSh5d4e6++27Mnz8fyWQSBw4cwHPPPYeWlha89tpr4Q8m9P20Rex3v/udUVNTY1RUVBilpaVGVVWVsXjxYqOjo0P20HyxevVqA4DtV1Rcd911tsfX3Nwse2ie/PM//7Nx4oknGiNGjDDOPvvsyKQQNDc3275O1113neyh+cLp/7PVq1fLHpovvvvd7w6+L8ePH2/MnTvXeP3116WMha2yiIiIHKh/wYiIiEgSBkkiIiIHDJJEREQOGCSJiIgcMEgSERE5YJAkIiJywCBJRETkgEGSiIjIAYMkUZHp7u7GVVddhVNOOQUlJSWor6+XPSQiZTFIEhWZvr4+jB8/Hvfccw/OPPNM2cMhUhqDJFHE7NmzBxMnTsQ//MM/DN7261//GiNGjMDrr7+OqqoqrFq1Ctdeey3Ky8sljpRIfewCQhQx48ePx89+9jMsXLgQ8+bNw6mnnopvf/vb+Lu/+zvMmzdP9vCItMIgSRRBf/M3f4ObbroJV199Nc4991yUlZXhoYcekj0sIu1wuZUoolasWIEjR47ghRdewLPPPouysjLZQyLSDoMkUUR9/PHH6OrqwsDAAP70pz/JHg6RlrjcShRB/f39uPrqq3HFFVfg1FNPxQ033IDt27djwoQJsodGpBUGSaIIuueee9DT04N//Md/xOjRo/Hqq6/ihhtuwH/8x38AALZt2wYAOHjwIPbs2YNt27ZhxIgROO200ySOmkg9McMwDNmDICL/tLS04MILL0RzczPOO+88AEBbWxtmzJiBhoYG3HzzzYjFYsN+78QTT8SuXbtCHi2R2hgkiYiIHHDjDhERkQMGSSIiIgcMkkRERA4YJImIiBwwSBIRETlgkCQiInLAIElEROSAQZKIiMgBgyQREZEDBkkiIiIHDJJEREQOGCSJiIgc/H/FwyIjUOc0eAAAAABJRU5ErkJggg==", | |
"text/plain": [ | |
"<Figure size 500x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"from numpy.random import multivariate_normal\n", | |
"\n", | |
"num_samples = 100\n", | |
"\n", | |
"X = np.concatenate((multivariate_normal(mean=np.array([1, 1]),\n", | |
" cov=np.array([[1, 0], [0, 1]]),\n", | |
" size=num_samples),\n", | |
" multivariate_normal(mean=np.array([-1, -1]),\n", | |
" cov=np.array([[1, 0], [0, 1]]),\n", | |
" size=num_samples)))\n", | |
"\n", | |
"y = np.array(num_samples * [1] + num_samples * [-1])\n", | |
"\n", | |
"# visualise mesh as contour plot\n", | |
"fig, ax = plt.subplots(figsize=(5, 5))\n", | |
"ax.set_xlabel('x1') ; ax.set_ylabel('x2')\n", | |
"\n", | |
"# plot training data\n", | |
"plt.scatter(X[:num_samples, 0], X[:num_samples, 1], color='orange')\n", | |
"plt.scatter(X[num_samples:, 0], X[num_samples:, 1], color='blue')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "67264ce1", | |
"metadata": {}, | |
"source": [ | |
"Now let's train our custom SVM with a linear kernel:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "d1e28922", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Accuracy (linear): 86%\n" | |
] | |
} | |
], | |
"source": [ | |
"# create train-test split\n", | |
"from sklearn.model_selection import train_test_split\n", | |
"Xtr, Xte, ytr, yte = train_test_split(X, y)\n", | |
"\n", | |
"# train linear SVM\n", | |
"clf = SupportVectorMachine(kernel='linear')\n", | |
"clf.fit(Xtr, ytr, C=0.5, max_iters=100)\n", | |
"\n", | |
"# calculate accuracy on test set\n", | |
"linear_pred = np.array([clf.predict(xte) for xte in Xte]).reshape(yte.shape[0])\n", | |
"acc = float(sum(linear_pred==yte)) / yte.shape[0]\n", | |
"print('Accuracy (linear): %.00f%%' % (100 * acc))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "479b15b0", | |
"metadata": {}, | |
"source": [ | |
"Visualise decision boundary:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "400ed674", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x12bef9850>" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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3X777Xjqqafw3HPPobS0dGT+tqysDMXFxS63zrtKS0vTgnDixImYNGmSLwISYEhSjti+fTvee+89vPfee2kXExwsSXXjjTeiu7sbP/jBD9DZ2Ym5c+di69atmDlzpttN86xHH30UABAOh1Nuf+KJJ7B69ersN4iyhsOtREREGriqgYiISANDkoiISANDkoiISANDkoiISANDkoiISANDkoiISANDkoiISANDkoiISANDkijPdHZ24ktf+hJmz56NgoICrFmzxu0mEXkWQ5IozwwODmLKlCm47777cMkll7jdHCJPY0gS5Ziuri6cc845+NGPfjRy2+uvv45x48Zh+/btCIVCaGxsxFe+8hWUlZW52FIi72OBc6IcM2XKFPz7v/876urqsGjRIsyZMwdf/vKX8c1vfhOLFi1yu3lEvsKQJMpBf/M3f4Ovf/3rWLVqFS6//HKMHz8eDzzwgNvNIvIdDrcS5ah169ZhaGgImzZtwq9+9SuMHz/e7SYR+Q5DkihHvf/+++jo6EA8Hk87HZ6IxHC4lSgHnTp1CqtWrcKNN96IOXPm4NZbb8W+ffswdepUt5tG5CsMSaIcdN9996G3txc//elPUVJSghdffBG33nornn/+eQDA3r17AQD9/f3o6urC3r17MW7cOFx44YUutprIewKSJEluN4KI7BOJRPC5z30OL7/8Mq666ioAwOHDhzFv3jysXbsW3/jGNxAIBNK+b+bMmYhGo1luLZG3MSSJiIg0cOEOERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRBoYkERGRhv8fmCs45oaVTYoAAAAASUVORK5CYII=", | |
"text/plain": [ | |
"<Figure size 500x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# create mesh coordinates\n", | |
"lim = 5\n", | |
"xx, yy = np.meshgrid(np.arange(-lim, +lim, 0.1),\n", | |
" np.arange(-lim, +lim, 0.1))\n", | |
"zz = np.zeros(xx.shape)\n", | |
"\n", | |
"# create mesh of predictions\n", | |
"for i in range(xx.shape[0]):\n", | |
" for j in range(xx.shape[1]):\n", | |
" zz[i, j] = clf.predict(np.array([xx[i, j], yy[i, j]]))\n", | |
"\n", | |
"# visualise mesh as contour plot\n", | |
"fig, ax = plt.subplots(figsize=(5, 5))\n", | |
"ax.set_xlabel('x1') ; ax.set_ylabel('x2')\n", | |
"ax.set_xlim([-lim, +lim-0.1]) ; ax.set_ylim([-lim, +lim-0.1])\n", | |
"ax.contourf(xx, yy, zz, alpha=0.5, colors=('blue', 'orange'))\n", | |
"\n", | |
"# plot training data\n", | |
"plt.scatter(X[:num_samples, 0], X[:num_samples, 1], color='orange')\n", | |
"plt.scatter(X[num_samples:, 0], X[num_samples:, 1], color='blue')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "d2a6dbfc", | |
"metadata": {}, | |
"source": [ | |
"No problem! Now for something a little more challenging...\n", | |
"\n", | |
"## Non-linear decision boundaries\n", | |
"\n", | |
"Now we will try data that is not linearly separable: a circle inside a square! We will see that our linear kernel is insufficient:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "1962f076", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x12c0446d0>" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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6U/IyclBhw4dcOGFFyrahzGG+fPno1u3bmjfvj1GjhyJL774wq9NY2Mj7rnnHiQnJ+OCCy7AhAkT8O2332rS51OnTqGgoAAulwsulwsFBQWor6+PuI/D4Qj5euKJJ3xtRo4cGfT5lClTTOnv7bffHtSX4cOH+7XR6xqr7e+5c+fwu9/9DgMHDsQFF1yAbt264bbbbsORI0f82ml5fZctW4aePXsiKSkJWVlZ2LJlS8T2n3zyCbKyspCUlIRLLrkEL7zwQlCb4uJi9OvXD06nE/369cPatWtj6lu8/S0pKcG1116LlJQUdOrUCdnZ2fjoo4/82qxatSrk/fzDDz+Y0ueysrKQ/fnyyy/92vFyjUM9Xw6HA/379/e10fMab968GTfeeCO6desGh8OBd999N+o+ht3DjDCEP/zhD+zJJ59k999/P3O5XIr2Wbx4MevYsSMrLi5me/bsYfn5+Sw9PZ01NDT42syePZt1796dbdy4ke3cuZONGjWKDRo0iDU3N8fd57Fjx7IBAwaw8vJyVl5ezgYMGMDGjx8fcZ/a2lq/18qVK5nD4WBfffWVr83VV1/NZs2a5deuvr7elP7OmDGDjR071q8vJ0+e9Guj1zVW29/6+no2ZswYtmbNGvbll1+yiooKNmzYMJaVleXXTqvr++abb7J27dqxl156ie3bt4/NmTOHXXDBBeybb74J2f7rr79mHTp0YHPmzGH79u1jL730EmvXrh175513fG3Ky8tZQkICe+yxx9j+/fvZY489xtq2bcu2bt2qun/x9nfOnDns8ccfZ5999hn797//zebOncvatWvHdu7c6Wvz8ssvs06dOgXd11qhts+lpaUMADtw4IBff1rfizxd4/r6er9+VldXs86dO7N58+b52uh5jdevX88efvhhVlxczACwtWvXRmxv5D1MwtdgXn75ZUXCt6WlhaWlpbHFixf7tv3www/M5XKxF154gTEm3djt2rVjb775pq9NTU0Na9OmDduwYUNc/dy3bx8D4HdDVVRUMADsyy+/VHyciRMnsmuuucZv29VXX83mzJkTV/8CibW/M2bMYBMnTgz7uV7XWKvr+9lnnzEAfoOfVtf3iiuuYLNnz/bb1qdPH/bQQw+FbP/b3/6W9enTx2/br371KzZ8+HDf/5MnT2Zjx471a3PdddexKVOmGN7fUPTr148tWLDA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", | |
"text/plain": [ | |
"<Figure size 500x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"from numpy.random import multivariate_normal\n", | |
"\n", | |
"num_samples = 200\n", | |
"\n", | |
"X = np.random.uniform(low=-1, high=1, size=(num_samples, 2))\n", | |
"y = np.array([1 if np.sqrt(np.dot(x, x.T)) < 1 / np.sqrt(2) else -1 for x in X])\n", | |
"\n", | |
"fig, ax = plt.subplots(figsize=(5, 5))\n", | |
"ax.set_xlabel('x1') ; ax.set_ylabel('x2')\n", | |
"\n", | |
"class_pos = list(filter(lambda i : y[i] == +1, np.arange(X.shape[0])))\n", | |
"class_neg = list(filter(lambda i : y[i] == -1, np.arange(X.shape[0])))\n", | |
"\n", | |
"# plot training data\n", | |
"plt.scatter(X[class_pos, 0], X[class_pos, 1], color='orange')\n", | |
"plt.scatter(X[class_neg, 0], X[class_neg, 1], color='blue')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "58d01a6e", | |
"metadata": {}, | |
"source": [ | |
"Uh oh! Polynomial kernels to the rescue!" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "4d23ea4e", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Accuracy (linear): 60%\n", | |
"Accuracy (quadratic): 100%\n" | |
] | |
} | |
], | |
"source": [ | |
"# create train-test split\n", | |
"Xtr, Xte, ytr, yte = train_test_split(X, y)\n", | |
"\n", | |
"# train linear SVM\n", | |
"clf_linear = SupportVectorMachine(kernel='linear')\n", | |
"clf_linear.fit(Xtr, ytr, C=0.1, max_iters=100)\n", | |
"\n", | |
"# calculate accuracy on test set\n", | |
"linear_pred = np.array([clf_linear.predict(xte) for xte in Xte]).reshape(yte.shape[0])\n", | |
"acc = float(sum(linear_pred==yte)) / yte.shape[0]\n", | |
"print('Accuracy (linear): %.00f%%' % (100 * acc))\n", | |
"\n", | |
"# train quadratic kernel SVM\n", | |
"clf_poly = SupportVectorMachine(kernel='polynomial')\n", | |
"clf_poly.fit(Xtr, ytr, C=0.5, max_iters=100)\n", | |
"\n", | |
"# calculate accuracy on test set\n", | |
"quad_pred = np.array([clf_poly.predict(xte) for xte in Xte]).reshape(yte.shape[0])\n", | |
"acc = float(sum(quad_pred==yte)) / yte.shape[0]\n", | |
"print('Accuracy (quadratic): %.00f%%' % (100 * acc))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "198acf84", | |
"metadata": {}, | |
"source": [ | |
"We plot the decision boundaries for the quadratic kernel:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "e21d1c78", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x12be62a50>" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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8vKwbt26oO3r1q3DsGHDIu4zdOjQsPZr167FzTffjJSUlJhtoh1TSrhS9bYQq5zNxm7XyqiIkBEKog9HimTUWnwvvcDTWeeiL7xdchKD7GygX6+TcN5SjeQk9c2YgehmhgcA06dPR3FxMW6++WYMHToUb731FmpqajB16lQArKnx+++/x//8z/8AAKZOnYrXX38d06dPx5QpU7B161YsXLgwyPuytLQUt956K55//nncfffd+Pjjj7F+/Xp88cUXipxTYKn6c+fYNbuePQ00syNiQ0H0hNbg6QXdcFl/6y2CBG/v3r345JNP0LFjRxQVFSE9Pd3/mtfrxbRp07Bo0SLJO8kxYcIEnDlzBs8++yxqa2uRm5uL1atXIyuLDWisra0Nism75pprsHr1ajz55JP429/+hm7duuHVV1/1hyQAwLBhw/DBBx/gj3/8I5555hlcd911WLp0KQYPHizbeYTClaonTAjFhBFag281+zr9jcp5C97atWvxi1/8Ar169cK5c+cwa9YsLFu2DKNGjQIA/PTTT1i8eLGsggcAjz32GB577LGIr1VUVIRtGzlyJHbt2hXzmOPHj8f48eOl6B5BCINiwggtwVWPYC4DnZ3A2Z3Bgy2dO/XwFryysjI89dRT+O///m8wDIMXX3wRd911Fz788EMUFMRx8TURPh+ZJwkBUBA9oRUieQont2eFz9rREE49vAXvwIEDePfddwGwbvz/9V//he7du2P8+PFYsmQJBg0aJFsn9UJVFfDZZwZNBB0K1RGTBr7mI7q2hJxE8xRuPgeccrGxrQZYQ+YteFarFQ0NDUHbHnjgASQlJWHixIl46aWXpO6b7oiUc5pLBG0or0uKGZMWigkj1MRE1SN4C17//v2xYcMG5OUFZzWfMGECfD4fSkpKJO+ckaisZL0xdW/epJgxeaCYMCIacltTTOQpzFvwHn30UWzatCniaw888AAA4K233pKmVwZE94mgAVONBFXBCEH0hLREsqYktQY6DZamNiBgKk9h3oJ377334t5778X69esxZsyYsNcfeOABUUmUzQSXCFq3ji0mGgkSBkYv68/RrCm+n9h1tR+2A91+kbhFxUSewoIDz++88048/vjjmDNnDlJT2TpIp06dwv/7f/8P//rXv/DrX/9a8k4ahfbtdV7h3EQjQcKg6GX9mY81pfknaZYRTOQp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", | |
"text/plain": [ | |
"<Figure size 1000x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# create mesh coordinates\n", | |
"lim = 1\n", | |
"xx, yy = np.meshgrid(np.arange(-lim, +lim, 0.1), np.arange(-lim, +lim, 0.1))\n", | |
"zz_poly = np.zeros(xx.shape)\n", | |
"\n", | |
"# create mesh of predictions\n", | |
"for i in range(xx.shape[0]):\n", | |
" for j in range(xx.shape[1]):\n", | |
" zz_poly[i, j] = clf_poly.predict(np.array([xx[i, j], yy[i, j]]))\n", | |
"\n", | |
"# visualise mesh as contour plot\n", | |
"fig = plt.figure(figsize=(10, 5))\n", | |
"\n", | |
"ax = fig.add_subplot(1, 2, 2)\n", | |
"ax.set_xlabel('x1') ; ax.set_ylabel('x2')\n", | |
"ax.set_xlim([-lim, +lim-0.1]) ; ax.set_ylim([-lim, +lim-0.1])\n", | |
"ax.contourf(xx, yy, zz_poly, alpha=0.5, colors=('blue', 'orange'))\n", | |
"\n", | |
"# plot training data\n", | |
"ax.scatter(X[class_pos, 0], X[class_pos, 1], color='orange')\n", | |
"ax.scatter(X[class_neg, 0], X[class_neg, 1], color='blue')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "12ec3de9", | |
"metadata": {}, | |
"source": [ | |
"The data is linearly separable in quadratic space!\n", | |
"\n", | |
"## Non-linear decision boundaries: learning XOR\n", | |
"\n", | |
"A classic challenge to the power of a classifier is data arranged in an XOR pattern. Let us begin by defining data approximating and XOR function." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "8fff04b0", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x12c0a6e10>" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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9TXLVOIOERGRH5xJEhERCTBIEhERCTBIEhERCTBIEhERCTBIGmxwcBDnnnsucrkcXn/9ddXD0VJXVxeuu+46zJ49G+PHj8ecOXOwYcMGHD16VPXQtPHAAw9g9uzZGDduHObNm4fOzk7VQ9JWc3Mzzj//fEycOBHTpk3DpZdeirffflv1sIzR3NyMXC6HpqYm1UORxiBpsFtuuQWnnXaa6mFo7a233sLQ0BAeeughvPnmm7jnnnvwne98B7fddpvqoWnhqaeeQlNTE9avX4+dO3eirq4Ol1xyCfbs2aN6aFratm0bVq1ahV/84hd44YUXcOzYMSxZsgR/+tOfVA9Nezt27MDmzZtxzjnnqB6KP0Uy0nPPPVecO3du8c033ywCKO7cuVP1kIzxL//yL8XZs2erHoYWLrjgguLKlStH3Dd37tzirbfeqmhEZjlw4EARQHHbtm2qh6K1w4cPF88444ziCy+8UPz4xz9eXL16teohSeNM0kD79+/HDTfcgMcffxwTJkxQPRzj9Pf345RTTlE9DOWOHj2KV199FUuWLBlx/5IlS7B9+3ZFozJLf38/APDfk4dVq1bh05/+NC6++GLVQ/EtUw3O06BYLOLqq6/GypUrcd5556Grq0v1kIzyzjvv4P7778fdd9+teijKHTx4EIVCAdOnTx9x//Tp07Fv3z5FozJHsVjE2rVrcdFFF+Hss89WPRxtPfnkk3jttdewY8cO1UMJhDNJTWzcuBG5XM7165VXXsH999+PgYEBrFu3TvWQlZJ9vUr19vbiU5/6FK644gpcf/31ikaun/Jj44rFolFHyaly00034de//jVaW1tVD0Vb3d3dWL16NZ544gmMGzdO9XACYVs6TRw8eBAHDx50vaa2thZXXnklfvzjH494EysUCqisrMRVV12Fxx57LO6hakH29bL/j9nb24tFixZh/vz5ePTRRz3PkMuCo0ePYsKECfjBD36Ayy67bPj+1atX4/XXX8e2bdsUjk5vN998M370ox/hpZdewuzZs1UPR1s/+tGPcNlll6GysnL4vkKhgFwuh4qKCgwODo74mY4YJA2zZ88eDAwMDH/f29uLT37yk9iyZQvmz59v9HmZcenp6cGiRYswb948PPHEE9r/nzJJ8+fPx7x58/DAAw8M33fWWWehvr4ezc3NCkemp2KxiJtvvhk//OEP0dHRgTPOOEP1kLR2+PBhvPvuuyPuu+aaazB37lx89atfNWKZmnuShjn99NNHfH/yyScDAObMmcMA6aC3txcLFy7E6aefjrvuugt9fX3DPzv11FMVjkwPa9euxec+9zmcd955uPDCC7F582bs2bMHK1euVD00La1atQotLS3YunUrJk6cOLx3W11djfHjxysenX4mTpw4KhCedNJJmDx5shEBEmCQpJR7/vnnsWvXLuzatWvUhwguogDLli3DoUOHcMcdd2Dv3r04++yz8dxzz2HWrFmqh6alBx98EACwcOHCEfd/73vfw9VXX538gCh2XG4lIiISYPYCERGRAIMkERGRAIMkERGRAIMkERGRAIMkERGRAIMkERGRAIMkERGRAIMkERGRAIMkUcbs3bsXK1aswIc+9CFUVFSgqalJ9ZCItMUgSZQxg4ODmDp1KtavX4+PfOQjqodDpDUGSaKU6evrw6mnnop/+qd/Gr7vl7/8JcaOHYvnn38etbW1uPfee/GP//iPqK6uVjhSIv2xwTlRykydOhWPPPIILr30UixZsgRz587FZz/7Wdx4441YsmSJ6uERGYVBkiiF/v7v/x433HADrrrqKpx//vkYN24cvvnNb6oeFpFxuNxKlFJ33XUXjh07hqeffhrf//73MW7cONVDIjIOgyRRSv3+979Hb28vhoaGRp0OT0RyuNxKlEJHjx7FVVddhWXLlmHu3Lm47rrr8MYbb2D69Omqh0ZkFAZJohRav349+vv7cd999+Hkk0/GT3/6U1x33XX4yU9+AgB4/fXXAQB//OMf0dfXh9dffx1jx47FWWedpXDURPrJFYvFoupBEFF0Ojo68IlPfALt7e246KKLAAB79uzBOeecg+bmZnzpS19CLpcb9XuzZs1CV1dXwqMl0huDJBERkQATd4iIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAQYJImIiAT+Pz5S8oM6cDTMAAAAAElFTkSuQmCC", | |
"text/plain": [ | |
"<Figure size 500x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"from numpy.random import multivariate_normal\n", | |
"\n", | |
"num_samples = 50\n", | |
"\n", | |
"X = np.concatenate((multivariate_normal(mean=np.array([2, 2]),\n", | |
" cov=np.array([[1, 0], [0, 1]]),\n", | |
" size=num_samples),\n", | |
" multivariate_normal(mean=np.array([-2, -2]),\n", | |
" cov=np.array([[1, 0], [0, 1]]),\n", | |
" size=num_samples),\n", | |
" multivariate_normal(mean=np.array([2, -2]),\n", | |
" cov=np.array([[1, 0], [0, 1]]),\n", | |
" size=num_samples),\n", | |
" multivariate_normal(mean=np.array([-2, 2]),\n", | |
" cov=np.array([[1, 0], [0, 1]]),\n", | |
" size=num_samples)))\n", | |
"\n", | |
"y = np.array(2 * num_samples * [1] + 2 * num_samples * [-1])\n", | |
"\n", | |
"fig, ax = plt.subplots(figsize=(5, 5))\n", | |
"ax.set_xlabel('x1') ; ax.set_ylabel('x2')\n", | |
"\n", | |
"class_pos = list(filter(lambda i : y[i] == +1, np.arange(X.shape[0])))\n", | |
"class_neg = list(filter(lambda i : y[i] == -1, np.arange(X.shape[0])))\n", | |
"\n", | |
"# plot training data\n", | |
"plt.scatter(X[class_pos, 0], X[class_pos, 1], color='orange')\n", | |
"plt.scatter(X[class_neg, 0], X[class_neg, 1], color='blue')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e47eb27e", | |
"metadata": {}, | |
"source": [ | |
"Now let's see how a linear kernel performs against an rbf kernel." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "e5584928", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Accuracy (linear): 70%\n", | |
"Accuracy (rbf): 94%\n" | |
] | |
} | |
], | |
"source": [ | |
"# create train-test split\n", | |
"Xtr, Xte, ytr, yte = train_test_split(X, y)\n", | |
"\n", | |
"# train linear SVM\n", | |
"clf_linear = SupportVectorMachine(kernel='linear')\n", | |
"clf_linear.fit(Xtr, ytr, C=0.1, max_iters=100)\n", | |
"\n", | |
"# calculate accuracy on test set\n", | |
"linear_pred = np.array([clf_linear.predict(xte) for xte in Xte]).reshape(yte.shape[0])\n", | |
"acc = float(sum(linear_pred==yte)) / yte.shape[0]\n", | |
"print('Accuracy (linear): %.00f%%' % (100 * acc))\n", | |
"\n", | |
"# train rbf svm\n", | |
"clf_rbf = SupportVectorMachine(kernel='rbf', gamma=2)\n", | |
"clf_rbf.fit(Xtr, ytr, C=1, max_iters=100)\n", | |
"\n", | |
"# calculate accuracy on test set\n", | |
"quad_pred = np.array([clf_rbf.predict(xte) for xte in Xte]).reshape(yte.shape[0])\n", | |
"acc = float(sum(quad_pred==yte)) / yte.shape[0]\n", | |
"print('Accuracy (rbf): %.00f%%' % (100 * acc))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "37cf9d06", | |
"metadata": {}, | |
"source": [ | |
"Finally, we visualise the rbf-SVM decision boundaries:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "c9d01764", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x12c1e3c90>" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<Figure size 1000x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"### create mesh coordinates\n", | |
"lim = 4\n", | |
"xx, yy = np.meshgrid(np.arange(-lim, +lim, 0.1), np.arange(-lim, +lim, 0.1))\n", | |
"zz_rbf = np.zeros(xx.shape)\n", | |
"\n", | |
"# create mesh of predictions\n", | |
"for i in range(xx.shape[0]):\n", | |
" for j in range(xx.shape[1]):\n", | |
" zz_rbf[i, j] = clf_rbf.predict(np.array([xx[i, j], yy[i, j]]))\n", | |
"\n", | |
"# visualise mesh as contour plot\n", | |
"fig = plt.figure(figsize=(10, 5))\n", | |
"\n", | |
"ax = fig.add_subplot(1, 2, 2)\n", | |
"ax.set_xlabel('x1') ; ax.set_ylabel('x2')\n", | |
"ax.set_xlim([-lim, +lim-0.1]) ; ax.set_ylim([-lim, +lim-0.1])\n", | |
"ax.contourf(xx, yy, zz_rbf, alpha=0.5, colors=('blue', 'orange'))\n", | |
"\n", | |
"# plot training data\n", | |
"ax.scatter(X[class_pos, 0], X[class_pos, 1], color='orange')\n", | |
"ax.scatter(X[class_neg, 0], X[class_neg, 1], color='blue')" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"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.11.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment