{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# SVMの実装" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 数値例のデータセットの読み込み" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('sample_perceptron.csv')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tx0x1x2
011-1.235948-2.599843
111-2.021262-0.759107
211-1.132442-3.977278
\n", "
" ], "text/plain": [ " t x0 x1 x2\n", "0 1 1 -1.235948 -2.599843\n", "1 1 1 -2.021262 -0.759107\n", "2 1 1 -1.132442 -3.977278" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(3)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "t = df[['t']].values\n", "X = df.iloc[:, 1:].values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "プロット用に各カテゴリのデータも抽出しておきましょう。" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "x_1 = df[df['t'] == 1].iloc[:, 2:].values\n", "x_2 = df[df['t'] == -1].iloc[:, 2:].values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## データの可視化\n", "\n", "パラメータ$w$の調整に入る前に、現状どの程度の識別の結果が得られているのか確認できるような可視化の関数を作成しておきましょう。\n", "\n", "パーセプトロンでは識別の境界線を入力が二次元の場合、以下のように定式化しています。\n", "\n", "$w_{1}x_{1} + w_{2}x_{2} + w{0} = 0$\n", "\n", "縦軸$x2$に関して整理すると以下のようになります。\n", "\n", "$x_{2} = - \\dfrac{w_{1}x_{1} + w_{0}}{w_{2}}$" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0]\n", " [-1]\n", " [ 1]]\n" ] } ], "source": [ "w = np.array([[0], [-1], [1]])\n", "print(w)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "def plot_result(w, x_1, x_2):\n", "\n", " x1 = np.linspace(-4, 4)\n", " x2 = - (w[1] * x1 + w[0]) / w[2]\n", "\n", " plt.plot(x1, x2, label='wx+b=0')\n", " plt.scatter(x_1[:, 0], x_1[:, 1], label='x1')\n", " plt.scatter(x_2[:, 0], x_2[:, 1], label='x2')\n", " plt.legend()\n", " plt.xlim([-5, 5])\n", " plt.ylim([-5, 5])" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_result(w, x_1, x_2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 損失関数\n", "\n", "$\\mathcal{L} = \\dfrac{1}{2} \\alpha^{T}H \\alpha - 1^{T}\\alpha,\\ H = (tt^{T}) \\circ (XX^{T})$\n", "\n", "s.t. $t^{T} \\alpha = 0,\\ -{\\rm diag}(1)^{T} \\alpha \\leq 0$\n", "\n", "$\\displaystyle w = \\sum_{n=1}^{N} \\alpha_{n} t_{n} x_{n}$" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [], "source": [ "N, M = X.shape" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "200" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "T = np.dot(t, t.T)" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(200, 200)" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T.shape" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [], "source": [ "XX = np.dot(X, X.T)" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(200, 200)" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "XX.shape" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [], "source": [ "H = T * XX" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [], "source": [ "from cvxopt import matrix, solvers" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "q = matrix(-np.ones(N))\n", "P = matrix(H)\n", "G = matrix(np.diag(-np.ones(N)))\n", "h = matrix(np.zeros(N))\n", "A = matrix(t.T, tc='d')\n", "b = matrix(0.0)" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " pcost dcost gap pres dres\n", " 0: -1.0309e+01 -1.6549e+01 5e+02 2e+01 2e+00\n", " 1: -6.7867e+00 -1.2387e+00 4e+01 2e+00 2e-01\n", " 2: -1.0048e-01 -2.2208e-01 5e-01 2e-02 1e-03\n", " 3: -8.5655e-02 -1.4525e-01 8e-02 1e-03 8e-05\n", " 4: -1.2179e-01 -1.3758e-01 2e-02 2e-04 1e-05\n", " 5: -1.3355e-01 -1.3730e-01 4e-03 1e-05 9e-07\n", " 6: -1.3705e-01 -1.3711e-01 6e-05 2e-07 1e-08\n", " 7: -1.3711e-01 -1.3711e-01 6e-07 2e-09 1e-10\n", " 8: -1.3711e-01 -1.3711e-01 6e-09 2e-11 1e-12\n", "Optimal solution found.\n" ] } ], "source": [ "sol = solvers.qp(P, q, G, h, A, b)" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'dual infeasibility': 1.2538396639065762e-12,\n", " 'dual objective': -0.13711169851634578,\n", " 'dual slack': 7.055007988875721e-10,\n", " 'gap': 6.456624835283598e-09,\n", " 'iterations': 8,\n", " 'primal infeasibility': 1.6018880680528198e-11,\n", " 'primal objective': -0.13711169231335898,\n", " 'primal slack': 1.6159189474970968e-11,\n", " 'relative gap': 4.7090257047717296e-08,\n", " 's': <200x1 matrix, tc='d'>,\n", " 'status': 'optimal',\n", " 'x': <200x1 matrix, tc='d'>,\n", " 'y': <1x1 matrix, tc='d'>,\n", " 'z': <200x1 matrix, tc='d'>}" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [], "source": [ "alpha = np.array(sol['x'])" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [], "source": [ "w = np.zeros((1, 3))\n", "for n in range(N):\n", " w += t[n] * alpha[n] * X[n]" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 5.82438262e-17, -3.09349177e-01, -4.22523944e-01]])" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_result(w.T, x_1, x_2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }