{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "055fd268-51ad-4030-a720-85b8d153c611", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Kernel Support Vector Machine\n", "\n", "from scipy.optimize import minimize\n", "import numpy as np\n", "import random\n", "from math import sin, cos\n", "import matplotlib.pyplot as plt\n", "from skimage import measure\n", "\n", "from sklearn.svm import SVC\n", "\n", "plt.axes(aspect=\"equal\")\n", "\n", "m1 = 100\n", "class1 = [ np.array([\n", " random.normalvariate(1., 1.5), random.normalvariate(1., 0.5)\n", "]) for i in range(m1) ]\n", "\n", "m2 = m1\n", "angle1 = -np.pi*2/3\n", "angle2 = np.pi*2/3\n", "ex = np.array([1., 0.]); ey = np.array([0., 1.])\n", "class2 = []\n", "for i in range(m2):\n", " phi = random.normalvariate(0., 1.)\n", " r = random.normalvariate(5., 0.5)\n", " p = ex*cos(phi)*r + ey*sin(phi)*r\n", " class2.append(p.copy())\n", " \n", "x = class1 + class2\n", "x = np.array(x)\n", "y = [1.]*len(class1) + [-1.]*len(class2)\n", "y = np.array(y)\n", "m = len(x)\n", "perm = np.random.permutation(m)\n", "x = x[perm]\n", "y = y[perm]\n", "\n", "plt.scatter(\n", " [c[0] for c in x], [c[1] for c in x],\n", " color=[ \"r\" if yy > 0. else \"g\" for yy in y ]\n", ")\n", "\n", "degree = 3\n", "C = 2. # Hyperparameter\n", "\n", "# classifier = SVC(C=C, kernel=\"poly\", degree=degree)\n", "classifier = SVC(C=C, kernel=\"rbf\")\n", "classifier.fit(x, y)\n", "\n", "def classifierValue(x):\n", " xx = np.array([ [x[0], x[1]] ])\n", " # return classifier.predict(xx)\n", " return classifier.decision_function(xx)\n", "\n", "# Draw the separating line\n", "xmin = min([xx[0] for xx in x]) - 1.\n", "xmax = max([xx[0] for xx in x]) + 1.\n", "ymin = min([xx[1] for xx in x]) - 1.\n", "ymax = max([xx[1] for xx in x]) + 1.\n", "steps = 100\n", "\n", "def xcoord(j):\n", " dx = (xmax - xmin)/steps\n", " return xmin + j*dx\n", "def ycoord(i):\n", " dy = (ymax - ymin)/steps\n", " return ymin + i*dy\n", "\n", "# a is a matrix of dimension (steps, steps)\n", "a = np.array([[0.]*steps for iy in range(steps)])\n", "for i in range(steps):\n", " for j in range(steps):\n", " xx = np.array([xcoord(j), ycoord(i)])\n", " a[i, j] = classifierValue(xx)\n", "nullContours = measure.find_contours(a, 0.)\n", "for c in nullContours:\n", " plt.plot(\n", " [xcoord(cc[1]) for cc in c], \n", " [ycoord(cc[0]) for cc in c],\n", " color=\"blue\"\n", " )\n", "\n", "# Uncomment the following line for a standalone application\n", "# plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "330cef2f-c674-4816-b61a-72bedd5e9493", "metadata": {}, "outputs": [], "source": [] } ], "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.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }