618 lines
145 KiB
Text
618 lines
145 KiB
Text
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Support Vector Machines"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"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",
|
||
|
"execution_count": 2,
|
||
|
"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",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"y = [\"red\" if x + y > 0.3 else \"green\" for [x,y] in X]\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.collections.PathCollection at 0x1f2117ed748>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"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."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 110,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
|
||
|
" decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
|
||
|
" kernel='linear', max_iter=-1, probability=False, random_state=None,\n",
|
||
|
" shrinking=True, tol=0.001, verbose=False)"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 110,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#Creazione SVC\n",
|
||
|
"svc = SVC(kernel = 'linear')\n",
|
||
|
"svc.fit(X, y)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 111,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Number of support vectors learnt: 17\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.collections.PathCollection at 0x1f213591408>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 111,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"print(\"Number of support vectors learnt:\", sum(svc.n_support_))\n",
|
||
|
"plt.scatter(X[:,0], X[:,1], c=y)\n",
|
||
|
"plt.scatter(svc.support_vectors_[:,0], svc.support_vectors_[:,1], c='b')"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Sono nelle posizioni che mi aspettavo ma sono un numero più elevato di quello atteso"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"C'è margin error perchè i support vector sono a distanze diverse dal margine geometrico"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 112,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Classification errors: 0\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"predicted = svc.predict(X)\n",
|
||
|
"errors = sum([y[i] != predicted[i] for i in range(len(y))])\n",
|
||
|
"print(\"Classification errors:\", errors)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# C = 1000"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 93,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"SVC(C=1000, cache_size=200, class_weight=None, coef0=0.0,\n",
|
||
|
" decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
|
||
|
" kernel='linear', max_iter=-1, probability=False, random_state=None,\n",
|
||
|
" shrinking=True, tol=0.001, verbose=False)"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 93,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"svc = SVC(kernel = 'linear', C = 1000)\n",
|
||
|
"svc.fit(X, y)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 97,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Number of support vectors learnt: 3\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.collections.PathCollection at 0x1f213384908>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 97,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"print(\"Number of support vectors learnt:\", sum(svc.n_support_))\n",
|
||
|
"plt.scatter(X[:,0], X[:,1], c=y)\n",
|
||
|
"plt.scatter(svc.support_vectors_[:,0], svc.support_vectors_[:,1], c='b')"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Sono i support vector che mi aspettavo"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Non c'è margin error"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 98,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Classification errors: 0\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"predicted = svc.predict(X)\n",
|
||
|
"errors = sum([y[i] != predicted[i] for i in range(len(y))])\n",
|
||
|
"print(\"Classification errors:\", errors)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# C = 0.3"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 100,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"SVC(C=0.3, cache_size=200, class_weight=None, coef0=0.0,\n",
|
||
|
" decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
|
||
|
" kernel='linear', max_iter=-1, probability=False, random_state=None,\n",
|
||
|
" shrinking=True, tol=0.001, verbose=False)"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 100,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"svc = SVC(kernel = 'linear', C = 0.3)\n",
|
||
|
"svc.fit(X, y)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 101,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Number of support vectors learnt: 33\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.collections.PathCollection at 0x1f213543a88>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 101,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"print(\"Number of support vectors learnt:\", sum(svc.n_support_))\n",
|
||
|
"plt.scatter(X[:,0], X[:,1], c=y)\n",
|
||
|
"plt.scatter(svc.support_vectors_[:,0], svc.support_vectors_[:,1], c='b')"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Sono molti più support vector di quelli che mi aspettavo"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"C'è un margin error molto elevato"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 103,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Classification errors: 0\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"predicted = svc.predict(X)\n",
|
||
|
"errors = sum([y[i] != predicted[i] for i in range(len(y))])\n",
|
||
|
"print(\"Classification errors:\", errors)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Kernel = RBF"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 107,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"C:\\Users\\galat\\.conda\\envs\\aaut\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
|
||
|
" \"avoid this warning.\", FutureWarning)\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
|
||
|
" decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
|
||
|
" kernel='rbf', max_iter=-1, probability=False, random_state=None,\n",
|
||
|
" shrinking=True, tol=0.001, verbose=False)"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 107,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"svc = SVC(kernel = 'rbf')\n",
|
||
|
"svc.fit(X, y)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 108,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Number of support vectors learnt: 22\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"<matplotlib.collections.PathCollection at 0x1f21313c508>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 108,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"print(\"Number of support vectors learnt:\", sum(svc.n_support_))\n",
|
||
|
"plt.scatter(X[:,0], X[:,1], c=y)\n",
|
||
|
"plt.scatter(svc.support_vectors_[:,0], svc.support_vectors_[:,1], c='b')"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 109,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Classification errors: 0\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"predicted = svc.predict(X)\n",
|
||
|
"errors = sum([y[i] != predicted[i] for i in range(len(y))])\n",
|
||
|
"print(\"Classification errors:\", errors)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Me lo aspettavo perchè le classi possono continuare ad essere separabili anche se proiettate in uno spazio vettoriale diverso"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"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",
|
||
|
"version": "3.7.5"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 1
|
||
|
}
|