2020-06-23 21:53:50 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Support Vector Machines"
]
},
{
"cell_type": "code",
2020-07-02 11:58:47 +02:00
"execution_count": 1,
2020-06-23 21:53:50 +02:00
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.svm import SVC"
]
},
{
"cell_type": "code",
2020-07-02 11:58:47 +02:00
"execution_count": 2,
2020-06-23 21:53:50 +02:00
"metadata": {},
"outputs": [],
"source": [
"X = np.array([[ 0.46613554, 0.92048757],\n",
" [-0.92129195, 0.06723639],\n",
" [-0.15836636, 0.00430243],\n",
" [-0.24055905, -0.87032292],\n",
" [ 0.06245105, -0.53698416],\n",
" [-0.2265037 , -0.43835751],\n",
" [-0.00480479, -0.17372081],\n",
" [-0.1525277 , -0.34399658],\n",
" [-0.27360329, 0.35339202],\n",
" [-0.77464508, -0.48715511],\n",
" [-0.58724291, 0.74419972],\n",
" [-0.97596949, -0.72172963],\n",
" [ 0.42376225, -0.72655597],\n",
" [ 0.96383922, -0.23371331],\n",
" [ 0.16264643, -0.46949742],\n",
" [-0.74294705, -0.42576417],\n",
" [ 0.05089437, -0.20522071],\n",
" [-0.19442744, 0.09617478],\n",
" [-0.97102743, 0.79663992],\n",
" [ 0.0596995 , -0.70129219],\n",
" [-0.83934851, -0.95616033],\n",
" [-0.38249705, 0.4973605 ],\n",
" [ 0.3474666 , 0.70664397],\n",
" [ 0.35871444, 0.88679345],\n",
" [-0.05914582, 0.23124686],\n",
" [-0.52156643, 0.32986941],\n",
" [-0.53579646, 0.67530208],\n",
" [ 0.13683914, -0.96158184],\n",
" [ 0.65904541, -0.12015303],\n",
" [-0.69078363, 0.5615536 ],\n",
" [ 0.47738323, -0.70919275],\n",
" [ 0.93069669, 0.44019132],\n",
" [ 0.19750088, -0.68869404],\n",
" [-0.75048675, -0.18170522],\n",
" [-0.45288395, -0.25894991],\n",
" [-0.74644547, 0.87781953],\n",
" [ 0.14620452, 0.56864508],\n",
" [ 0.25719272, -0.58405476],\n",
" [ 0.87149524, 0.01384224],\n",
" [-0.71473576, 0.31568314],\n",
" [-0.252637 , -0.67418371],\n",
" [ 0.24718308, 0.95191416],\n",
" [-0.38149953, -0.64066291],\n",
" [-0.23112698, 0.04678807],\n",
" [ 0.72631766, 0.7390158 ],\n",
" [-0.91748062, -0.15131021],\n",
" [ 0.74957917, 0.66966866],\n",
" [ 0.76771849, 0.06662777],\n",
" [-0.04233756, -0.91320835],\n",
" [ 0.63840333, 0.06277738],\n",
" [-0.78887281, -0.90311183],\n",
" [-0.73099834, -0.69587363],\n",
" [-0.50947652, -0.99144951],\n",
" [ 0.14294609, 0.5474932 ],\n",
" [ 0.4367906 , 0.31953258],\n",
" [-0.13970851, 0.81817884],\n",
" [ 0.6440873 , 0.79118775],\n",
" [ 0.41714043, -0.66672029],\n",
" [ 0.59283022, -0.71836746],\n",
" [ 0.55379696, 0.98846202],\n",
" [-0.91819517, 0.34203895],\n",
" [ 0.02020188, 0.83696694],\n",
" [ 0.6182918 , 0.04254014],\n",
" [-0.09354765, -0.30050483],\n",
" [-0.08489545, 0.06431463],\n",
" [-0.11886358, -0.68738895],\n",
" [ 0.44428375, 0.18273761],\n",
" [ 0.26486362, -0.98398013],\n",
" [ 0.13222452, 0.91495035],\n",
" [-0.11101656, 0.00541343],\n",
" [-0.07696178, -0.92720555],\n",
" [ 0.22602214, 0.56040092],\n",
" [ 0.74227542, 0.32930104],\n",
" [ 0.43524657, 0.35332933],\n",
" [-0.89277607, -0.59996171],\n",
" [-0.94836212, 0.78777302],\n",
" [ 0.1783319 , -0.2142071 ],\n",
" [-0.07832238, -0.25046584],\n",
" [ 0.17611799, -0.96927832],\n",
" [-0.95938454, -0.26504646],\n",
" [ 0.58666766, -0.94620881],\n",
" [-0.77336565, 0.46735057],\n",
" [-0.94414054, 0.39044333],\n",
" [ 0.61524645, 0.15907662],\n",
" [-0.09855302, 0.9816656 ],\n",
" [ 0.53937097, 0.34487634]])"
]
},
{
"cell_type": "code",
2020-07-02 11:58:47 +02:00
"execution_count": 3,
2020-06-23 21:53:50 +02:00
"metadata": {},
"outputs": [],
"source": [
"y = [\"red\" if x + y > 0.3 else \"green\" for [x,y] in X]\n"
]
},
{
"cell_type": "code",
2020-07-02 11:58:47 +02:00
"execution_count": 4,
2020-06-23 21:53:50 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2020-07-02 11:58:47 +02:00
"<matplotlib.collections.PathCollection at 0x7f75285b5b90>"
2020-06-23 21:53:50 +02:00
]
},
2020-07-02 11:58:47 +02:00
"execution_count": 4,
2020-06-23 21:53:50 +02:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2020-07-02 11:58:47 +02:00
"image/png": "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
2020-06-23 21:53:50 +02:00
"text/plain": [
2020-07-02 11:58:47 +02:00
"<Figure size 432x288 with 1 Axes>"
2020-06-23 21:53:50 +02:00
]
},
2020-07-02 11:58:47 +02:00
"metadata": {
"needs_background": "light"
},
2020-06-23 21:53:50 +02:00
"output_type": "display_data"
}
],
"source": [
"plt.scatter(X[:,0], X[:,1], c=y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise\n",
"\n",
"- import the support vector machine classifier from scikit-learn (the SVC class) and train a classifier for the examples above using a linear kernel;\n",
"- read the documentation to find out how to obtain the support vectors and the associated (dual) weights; use this information to analyze the learnt model: \n",
" - how many support vectors have been learnt? \n",
" - are them in the position you would have expected [[1](#note1)]? \n",
" - is there any margin error?\n",
" - is there any classification error (check it using the classifier predictions)?\n",
"- learn a new SVC model using custom C values:\n",
" - how the answers to the questions above change when you use a very high C value (e.g., 1000)?\n",
" - how the answers to the questions above change when you use a very low C value (e.g., 0.3)?\n",
"- learn a new SVC model using a rbf kernel:\n",
" - is the new kernel able to capture the linear model?\n",
" - are you surprised by the above answer? Regarless to whether you are surprised or not: why?\n",
" \n",
"<a name=\"note1\">[1]</a> If you make two plots one after the other (in the same cell), the plots will be merged into a single one. You may want to use this feature to plot the support vectors on top of the scatter plot for the dataset."
]
},
2020-07-02 11:58:47 +02:00
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def ex(clf, X, y):\n",
" sv = clf.support_vectors_\n",
" weights = clf.dual_coef_\n",
"\n",
" # plot support vector\n",
" p = plt.scatter(X[:,0], X[:,1], c=y)\n",
"\n",
" ax = plt.gca()\n",
" xlim = ax.get_xlim()\n",
" ylim = ax.get_ylim()\n",
"\n",
" xx = np.linspace(xlim[0], xlim[1], 30)\n",
" yy = np.linspace(ylim[0], ylim[1], 30)\n",
" YY, XX = np.meshgrid(yy, xx)\n",
" xy = np.vstack([XX.ravel(), YY.ravel()]).T\n",
" Z = clf.decision_function(xy).reshape(XX.shape)\n",
"\n",
" ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,\n",
" linestyles=['--', '-', '--'])\n",
"\n",
" ax.scatter(sv[:, 0], sv[:, 1], s=100,\n",
" linewidth=1, facecolors='none', edgecolors='k')\n",
" plt.show()\n",
"\n",
" print(f\"Support vectors: ⊕:{clf.n_support_[0]} ⊖:{clf.n_support_[1]}\")\n",
" print(f\"Numero totale di support vectors:{len(sv)}\")\n",
"\n",
" ev = clf.decision_function(sv)\n",
" merr = []\n",
" for i, ep in enumerate(ev):\n",
" ep = round(-1-ep if ep < 0 else 1-ep, 3)\n",
" if ep: merr.append(f\"\\tMargin error ⊖: {ep}\\n\")\n",
" print(f\"Margin error totali: {len(merr)}\")\n",
" print(''.join(merr))\n",
"\n",
" y_predicted = clf.predict(X)\n",
" classification_error = len(list(filter(lambda ic: ic[1] != y[ic[0]], enumerate(y_predicted))))\n",
" if not classification_error:\n",
" print(\"Nessun errore di classificazione\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Support vectors: ⊕:8 ⊖:9\n",
"Numero totale di support vectors:17\n",
"Margin error totali: 15\n",
"\tMargin error ⊖: -0.085\n",
"\tMargin error ⊖: -0.028\n",
"\tMargin error ⊖: -0.083\n",
"\tMargin error ⊖: -0.441\n",
"\tMargin error ⊖: -0.027\n",
"\tMargin error ⊖: -0.258\n",
"\tMargin error ⊖: -0.001\n",
"\tMargin error ⊖: -0.156\n",
"\tMargin error ⊖: 0.238\n",
"\tMargin error ⊖: 0.222\n",
"\tMargin error ⊖: 0.277\n",
"\tMargin error ⊖: 0.507\n",
"\tMargin error ⊖: 0.2\n",
"\tMargin error ⊖: 0.007\n",
"\tMargin error ⊖: 0.029\n",
"\n",
"Nessun errore di classificazione\n",
"\n"
]
}
],
"source": [
"clf = SVC(kernel=\"linear\")\n",
"clf.fit(X,y)\n",
"ex(clf, X, y)\n",
"print()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Support vectors: ⊕:1 ⊖:2\n",
"Numero totale di support vectors:3\n",
"Margin error totali: 1\n",
"\tMargin error ⊖: -0.001\n",
"\n",
"Nessun errore di classificazione\n"
]
}
],
"source": [
"svc = SVC(kernel = 'linear', C = 1000)\n",
"ex(svc.fit(X, y), X, y)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Support vectors: ⊕:17 ⊖:16\n",
"Numero totale di support vectors:33\n",
"Margin error totali: 30\n",
"\tMargin error ⊖: -0.281\n",
"\tMargin error ⊖: -0.251\n",
"\tMargin error ⊖: -0.011\n",
"\tMargin error ⊖: -0.066\n",
"\tMargin error ⊖: -0.035\n",
"\tMargin error ⊖: -0.284\n",
"\tMargin error ⊖: -0.534\n",
"\tMargin error ⊖: -0.248\n",
"\tMargin error ⊖: -0.151\n",
"\tMargin error ⊖: -0.132\n",
"\tMargin error ⊖: -0.093\n",
"\tMargin error ⊖: -0.378\n",
"\tMargin error ⊖: -0.213\n",
"\tMargin error ⊖: -0.064\n",
"\tMargin error ⊖: -0.318\n",
"\tMargin error ⊖: 0.071\n",
"\tMargin error ⊖: 0.526\n",
"\tMargin error ⊖: 0.496\n",
"\tMargin error ⊖: 0.277\n",
"\tMargin error ⊖: 0.537\n",
"\tMargin error ⊖: 0.287\n",
"\tMargin error ⊖: 0.695\n",
"\tMargin error ⊖: 0.331\n",
"\tMargin error ⊖: 0.351\n",
"\tMargin error ⊖: 0.491\n",
"\tMargin error ⊖: 0.343\n",
"\tMargin error ⊖: 0.237\n",
"\tMargin error ⊖: 0.171\n",
"\tMargin error ⊖: 0.347\n",
"\tMargin error ⊖: 0.032\n",
"\n",
"Nessun errore di classificazione\n"
]
}
],
"source": [
"svc = SVC(kernel = 'linear', C = 0.3)\n",
"ex(svc.fit(X, y), X, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Notiamo che maggiore l'indice di regolarizzazione, minore il numero di errori*\n",
"\n",
"Il tempo necessario al training non subisce in aumento sensibile"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAD4CAYAAADsKpHdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd1xUV/r/32dm6CCKgIodrNgVsYst2LFgAxXFQkxispvNN7+U3c2m7Caa3U03G3sDG2qiJoq994q9BRtYQClKnWHm/P64aFRAEQdm0Pv2xUvm3HvP/cwA9znnPM95HiGlREVFRUVFRWNpASoqKioq1oFqEFRUVFRUANUgqKioqKjkoRoEFRUVFRVANQgqKioqKnnoLC2gOLi7u8tatWpZWoYKYDKZSE5OxsXFBTs7O0vLKVFMJhN3797FwcHhhX+vLyomk4nExETs7e0pV64cGs3LNSY+fPjwbSmlR2HHy6RBqFWrFocOHbK0DBUgNzeXmTNnkp6ezuuvv46Tk5OlJZUY2dnZTJkyhZ49e9KuXTtLy1EpBrm5uWzfvp3du3fj6OhIv379aNCggaVllRpCiCtPOv5ymUcVs6PT6QgODiYnJ4dVq1bxIu9rsbW1BSAnJ8fCSlSKi06no3v37kycOBFnZ2eWLFlCdHQ0ubm5lpZmFagGQeW58fT0pEePHpw/f57Dhw9bWk6JodFosLW1VQ3CC0CVKlWYOHEi3bp1Q6PRoNVqLS3JKlANgopZaNOmDT4+Pqxfv57bt29bWk6JYWdnpxqEFwStVkvnzp0ZPHgwQgju3LlDTEwMBoPB0tIshmoQVMyCEIKBAwei0+lYvXp1mVw6un37Nt9++y1//vOf+fDDD9m7d2++9+Hq6vrSOSJfdIQQAMTFxbFv3z6mT5/OjRs3LKzKMpjlN1sIMUcIkSiEOFnIcSGE+E4IcVEIcVwI0fKhY2OEEBfyvsaYQ4+KZXBxcaFnz55cvXq1TC0dGY1G3nvvPerWrcuRI0eoWbMmNjY2hIWF0bp1ay5evPjg3AkTJtCvXz8Lqn1JMZng8GHYtw9KaATfunVrwsLC0Ov1zJw5k127dmEymUrkXtaKuYY684BeTzjeG6ib9xUB/A9ACOEG/ANoA/gD/xBCVDCTJhUL0KxZM2rXrs3GjRtJTU21tJwi8dZbb7Fv3z7Onz7N/KAg3r5wgU/s7Di3dSvjx4+nS5cuXLt2zdIyX16OHoUaNaBLFwgMhEqVICamRG7l7e3Na6+9RsOGDdm0aRP79u0rkftYK8JcU3shRC3gVyll4wKOTQe2SSkX570+B3S5/yWlfLWg8wrDz89PqmGn1ktycjLTp0/Hw8OD8PBwq3bYnThxgp49e3L26FHK9esHZ89CejrY2YFOB2vW8MGGDaSkpPDTTz9x8eJFtmzZwpgxY9S9CKVBVhZUrQopKY+2OzrCuXNQrVqJ3FZKyZkzZ6hbty42NjYYDAZsbGxK5F6liRDisJTSr7DjpbUYWhV4eIgVn9dWWHs+hBARQohDQohDSUlJJSZU5flxc3MjKCiI+Ph4Nm3aZGk5T2T69OlERERQbsECOHVKMQYAOTmQkQEhIbz5xhssXbqUe/fuYWNjw/Xr1/n9998tK/xl4ddfoaCQUKMR5s8vsdsKIfD19cXGxoacnBx++uknNm7ciNFoLLF7WgNlxjsmpZwhpfSTUvp5eBS60U7FSmjUqBH+/v7s3buXs2fPWlpOocTGxtK1a1eIilJGo4+TkYFXcjLVq1cnLi6O6tWr4+DgwPnz50tfbHGRErZuhUmTYPJkZR2+rHD7dsEGIScHbt0qFQkajQZvb292797N3Llzy8xSaHEoLYOQAFR/6HW1vLbC2s3C3bt3iY+P5+bNm9y5c4e7d++SnZ1tru5VnkJgYCBVqlThl19+sdo/Iq1Wq2xKsrcv+ASTCezsMBgMaDQaNBoNderU4fz582XH4fjaa9C/P8yYAf/7H3TvDh99ZGlVRaNLl4LbnZ0Vf0IpYGNjQ9++fRk6dChJSUn89NNPnDt3rlTuXdqUVuqK1cBkIcQSFAdympTyhhBiPfD5Q47kQOCDonaam5tLamoqycnJpKSkkJycjMFgICgoCIBVq1blm9pXrFiRN998E4CoqChu3LiBjY3Ngy8vLy/69u0L8MKsG1oKnU7H0KFDmT59OtHR0YwbN87q/AkdOnRgzZo1dH/1VTh5Ulkmuo8QUK0a51H8IvXq1QOgfv36nDhxgvj4eGrUqGEZ4UVl/35YuBAyM5XXUirf//vfMGYM+PhYVt/TaNgQQkJg6dI/fjaOjtCqFfTuXapSGjVqhJeXF8uWLWPXrl3Uq1fvQcjqi4JZDIIQYjGKg9hdCBGPEjlkAyCl/AlYC/QBLgKZQHjesWQhxGfAwbyuPpVSJhf1vmvXruXIkSMPXtva2uLu7o6UEiEEAQEBtGnTBqPRiMFgyPeA9/HxwdXV9cExvV7/SNz5//73P4xGI1WqVKFKlSp4eXnh5eX1QufrMTdubm4MGDCAZcuWsWnTJnr27GlpSY/w6quv0qJFC955+22qDxgAP/+sHNDpwN4e+fPP/OvzzwkPD3/gRK5Tpw4NGjSwOuNWIGvWFLwUJiX89hu89Vbp6snMVD7jGzegfXto104xvE9i1ixlNjBzprJUNGoUhIeDBT7/ChUqMH78eHJychBCkJWVhclkemGeCWaLMipNWrZsKY8cOcKVK1dITU3Fzc0NNzc3HB0dzWaxpZTs3buX69evc+PGDe7cuXP/3gQFBSGlfDBK8PT0fOFGCuZm7dq1HDhwgBEjRlhdMrH//ve/TJ8+nUWLFuFnbw+7dkHlyqS2b88//vUvtm3bxo4dO3B1dS1dYUlJ8MEHygPU1hbGjlWWehwcit7H55/Dxx/nj913coKvv4aJE82p+MmcPAkBAaDXKw92W1vo2FExWmV0Jr506VISEhIYNmwY1Uoo4smcPC3KqEwaBEuEnebk5HDz5k3s7OyoXLkyqampfPvtt0gpcXd3p1GjRjRq1AgPD48iGYfs7GwuXLiAyWTCx8cHZ2fnUngXliM3N5c5c+Zw584dxo0bR6VKlSwt6RHmzp3Lxx9/TOXKlWnWrBmpqals3LiRfv368d1331GhQv7tMampqeTk5JTMe8nKAl9fSEj442Fubw/+/rBt29NH1feJi4PGjfPPEhwc4No1qFjRrLILRUpo0AAed8Y7OsIXX5T+TMVM3Lhxg2XLlnH37l369etHixYtLC3piagGoQTJyMjgzJkznDp1isuXLyOlZOTIkdStWxeTyVRgioPU1FQ+//xz5s2bh7u7O1qtloSEBEaMGMHf/vY3vLy8LPBOSoe7d+8yc+ZMNBoNEyZMwMXFxdKSHsFoNLJp0yYuXbqEk5MTgYGBhT7spZR8//33ODg4MGHCBPPPEOfNUyKCHvZpgDKy37QJ2rZ9tr5ee01ZBhNCCdlctAgGDHh2XXo9JCeDu7vSX1EpzDABNGkCx48/uxYrISsri+XLl/P777/j7+9Pz549rXY50Vr2IbyQODk54efnx5gxY3jnnXfo27cv9wv37Ny5k2nTprFt2zbu75u4c+cOHTt25M6dO+zZs4efd/zM4s2LiT0ei7OzM23btuXSpUsWfEclS7ly5QgNDSUrK4vFixej1+stLekRtFotPXv2ZNKkSYwePfqJI38hBB07diQhIaFkIk72789vDECJejp27Nn6GjsW4uNh+nRlHf7GjWc3BiaTsvRUsSLUrq0YhK+/Vkb+RcFoLHxWU8Zj+x0cHBg5ciTt27fn7NmzZTqSsUwWyLFGnJ2dad269YPX7u7uODk5sX37drZt24anpyfLly8nMDCQce+Po/fS3ly/dx2N0OBi68LSN5bi5eXFyJEj2bNnjwXfSclSpUoVgoODWbJkCT///DPDhg0rs/6X5s2bs3v3brZs2UK9evXMm/SuQQNlOeV+dNB9dDrw9n72/ipWhNDQ4uuZMkWJTLqvJzsb/vY3cHWFceOefn2dOuDpCZcvP9ru4KBEO5VxNBoNgYGBdOr
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Support vectors: ⊕:9 ⊖:7\n",
"Numero totale di support vectors:16\n",
"Margin error totali: 10\n",
"\tMargin error ⊖: -0.015\n",
"\tMargin error ⊖: -0.429\n",
"\tMargin error ⊖: -0.184\n",
"\tMargin error ⊖: -0.197\n",
"\tMargin error ⊖: 0.122\n",
"\tMargin error ⊖: 0.216\n",
"\tMargin error ⊖: 0.001\n",
"\tMargin error ⊖: 0.052\n",
"\tMargin error ⊖: 0.449\n",
"\tMargin error ⊖: 0.132\n",
"\n",
"Nessun errore di classificazione\n"
]
}
],
"source": [
"rbf = SVC(kernel=\"rbf\")\n",
"rbf.fit(X,y)\n",
"ex(rbf, X, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*come atteso, il rilsultato è lo stesso nonostante le classi vengano mappate su uno spazio ad infinite dimensioni.*\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Support vectors: ⊕:5 ⊖:5\n",
"Numero totale di support vectors:10\n",
"Margin error totali: 1\n",
"\tMargin error ⊖: 0.001\n",
"\n",
"Nessun errore di classificazione\n"
]
}
],
"source": [
"rbf = SVC(kernel=\"rbf\", C=100)\n",
"rbf.fit(X,y)\n",
"ex(rbf, X, y)"
]
},
2020-06-23 21:53:50 +02:00
{
"cell_type": "code",
"execution_count": null,
2020-07-02 11:58:47 +02:00
"metadata": {},
2020-06-23 21:53:50 +02:00
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"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",
2020-07-02 11:58:47 +02:00
"version": "3.7.7"
2020-06-23 21:53:50 +02:00
}
},
"nbformat": 4,
"nbformat_minor": 1
}