Skip to content

Instantly share code, notes, and snippets.

@shv07
Created April 9, 2019 18:01
Show Gist options
  • Save shv07/4dfaae488610ac1317519d47c17bf67f to your computer and use it in GitHub Desktop.
Save shv07/4dfaae488610ac1317519d47c17bf67f to your computer and use it in GitHub Desktop.
SVM implementation from scratch -- Shivji Bhagat -- 16110149
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. (a) Implementing Hard Margin SVM classifiers primal and dual forms from scratch"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [],
"source": [
"#references\n",
"#https://www.cvxpy.org/examples/machine_learning/ridge_regression.html\n",
"#https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python/#2.-Bubble-plot-with-Encircling\n",
"#(for encircle code)"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import cvxpy as cp\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn import datasets\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"plt.style.use('seaborn-whitegrid')\n",
"from scipy.spatial import ConvexHull as ConvexHull"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [],
"source": [
"data=datasets.load_iris()"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['sepal length (cm)',\n",
" 'sepal width (cm)',\n",
" 'petal length (cm)',\n",
" 'petal width (cm)']"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X=np.array(data.data)\n",
"y=np.array(data.target)\n",
"data.feature_names"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [],
"source": [
"X=np.delete(X, np.array([1,2]), axis = 1)"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((150, 2), (150,))"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.shape, y.shape"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['setosa', 'versicolor', 'virginica'], dtype='<U10')"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.target_names"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y[:10]"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_=[]\n",
"for i in y:\n",
" if i==0:\n",
" y_.append(1)\n",
" else:\n",
" y_.append(-1)\n",
"y=np.array(y_)\n",
"y[:10]"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f8c7a654da0>"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(X[:,0], X[:,1], c=y, cmap ='cividis')"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [],
"source": [
"class SVM_hard:\n",
" def objective_fn(self, w):\n",
" return cp.norm(w)**2/2\n",
" def fit(self, X, y):\n",
" w = cp.Variable(2)\n",
" b = cp.Variable()\n",
" self.constraint = [( y[i]*(w.T@X[i] + b) - 1 ) >= 0 for i in range(len(X))]\n",
" problem = cp.Problem(cp.Minimize(self.objective_fn(w)), self.constraint)\n",
" problem.solve()\n",
" print(problem.status)\n",
" self.w = w.value\n",
" self.b = b.value\n",
" self.support_vectors = []\n",
" for x in X:\n",
" tmp = self.w @ x.T + self.b\n",
" if 1-tmp<10**(-8) and 1-tmp>-10**(-8):\n",
" self.support_vectors.append(x)\n",
" if -1-tmp<10**(-8) and -1-tmp>-10**(-8):\n",
" self.support_vectors.append(x) \n",
" self.support_vectors = np.unique(self.support_vectors, axis = 0)\n",
" def predict(self, X):\n",
" y=[]\n",
" for x in X:\n",
" tmp = self.w @ x.T + self.b\n",
" if tmp >=0:\n",
" y.append(1)\n",
" else:\n",
" y.append(-1)\n",
" return np.array(y)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"optimal\n"
]
}
],
"source": [
"svm = SVM_hard()\n",
"svm.fit(X,y)"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy : 100.0\n"
]
}
],
"source": [
"y_=svm.predict(X)\n",
"correct = 150-np.count_nonzero(y_-y)\n",
"print(\"Accuracy : \", correct*100/150)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dual Values "
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[8.74348766e-11 8.52309823e-11 8.33896574e-11 8.25728155e-11\n",
" 8.62804461e-11 1.96133611e-10 1.08710314e-10 8.62804461e-11\n",
" 8.10906662e-11 6.85243120e-11 9.17143719e-11 8.42717450e-11\n",
" 6.78734298e-11 6.50713946e-11 1.00437415e-10 2.49088320e-10\n",
" 1.96133611e-10 1.16626633e-10 1.38798869e-10 1.16626633e-10\n",
" 9.17143719e-11 1.75034617e-10 8.25728155e-11 3.44651818e-10\n",
" 8.42717450e-11 8.62804461e-11 1.70715031e-10 8.87112843e-11\n",
" 8.87112843e-11 8.33896574e-11 8.42717450e-11 1.96133611e-10\n",
" 7.07675412e-11 9.34948539e-11 8.52309823e-11 8.62804461e-11\n",
" 9.34948539e-11 6.85243120e-11 8.10906662e-11 8.74348766e-11\n",
" 1.14602943e-10 1.07619272e-10 8.10906662e-11 1.24999981e+01\n",
" 1.75034617e-10 1.11291679e-10 8.74348766e-11 8.25728155e-11\n",
" 9.01297321e-11 8.62804461e-11 7.70992356e-11 6.21694899e-11\n",
" 6.14689663e-11 1.05723030e-10 6.19880908e-11 1.04538925e-10\n",
" 5.23798167e-11 6.98478319e+00 1.03936512e-10 8.25141984e-11\n",
" 2.26454539e+00 6.34462917e-11 1.79817560e-01 7.79237827e-11\n",
" 1.05066914e-10 7.70798978e-11 6.45674085e-11 2.19635382e-01\n",
" 6.26020272e-11 3.23874994e-10 4.06187297e-11 1.03478106e-10\n",
" 6.23737104e-11 1.58047811e-10 1.03555320e-10 7.71329835e-11\n",
" 7.70575300e-11 4.45713634e-11 6.31366954e-11 2.48075229e-01\n",
" 3.17378983e-10 3.38595983e-01 1.55992099e-10 5.30828187e-11\n",
" 6.54991169e-11 5.30828187e-11 6.16892156e-11 1.03459108e-10\n",
" 1.05066914e-10 1.05723030e-10 1.56152103e-10 7.79237827e-11\n",
" 1.55992099e-10 2.26454539e+00 1.05066914e-10 1.55757797e-10\n",
" 1.04538925e-10 1.03431634e-10 3.10810720e-10 1.04538925e-10\n",
" 2.20240692e-11 3.65102450e-11 2.86866179e-11 3.98706660e-11\n",
" 2.69827306e-11 2.82768797e-11 4.93454955e-11 3.85592741e-11\n",
" 3.92600521e-11 2.13798753e-11 3.20387144e-11 3.55255947e-11\n",
" 2.89708074e-11 3.31978534e-11 2.39829616e-11 2.51159632e-11\n",
" 3.95495536e-11 2.59853817e-11 2.41048750e-11 6.31366954e-11\n",
" 2.46794175e-11 3.33699320e-11 3.08644329e-11 3.98706660e-11\n",
" 2.90725319e-11 3.86599870e-11 4.00438916e-11 4.02260441e-11\n",
" 2.94003425e-11 5.10759780e-11 3.43723645e-11 3.07204867e-11\n",
" 2.70849029e-11 6.23737104e-11 7.79237827e-11 2.41048750e-11\n",
" 2.35073851e-11 3.97060008e-11 4.04175163e-11 2.88726536e-11\n",
" 2.31739459e-11 2.46794175e-11 3.65102450e-11 2.47615173e-11\n",
" 2.17183077e-11 2.48461378e-11 3.56723240e-11 3.20387144e-11\n",
" 2.53100810e-11 4.06187297e-11]\n"
]
}
],
"source": [
"dual = [i.dual_value for i in svm.constraint]\n",
"print(np.array(dual))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"what do they mean? - They correspond to the support vector points if their values tend to zero else they correspond to other points in the dataset\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotting the decision boundary"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([-3.08375107e-10, -5.00000000e+00]), array(4.))"
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"svm.w, svm.b"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[4.9, 1. ],\n",
" [5. , 0.6],\n",
" [5. , 1. ],\n",
" [5.5, 1. ],\n",
" [5.7, 1. ],\n",
" [5.8, 1. ],\n",
" [6. , 1. ]])"
]
},
"execution_count": 144,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"svm.support_vectors"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def encircle(x,y, ax=None, **kw):\n",
" if not ax: ax=plt.gca()\n",
" p = np.c_[x,y]\n",
" hull = ConvexHull(p)\n",
" poly = plt.Polygon(p[hull.vertices,:], **kw)\n",
" ax.add_patch(poly)\n",
"\n",
"\n",
"plt.scatter(X[:,0], X[:,1], c=y, cmap ='viridis')\n",
"x_plot = np.random.choice(X[:,0], 100)\n",
"y_plot = [-1*(svm.w[0]*i + svm.b)/svm.w[1] for i in x_plot]\n",
"y_plot1 = [-1*(svm.w[0]*i + svm.b+1)/svm.w[1] for i in x_plot]\n",
"y_plot2 = [-1*(svm.w[0]*i + svm.b-1)/svm.w[1] for i in x_plot]\n",
"plt.plot(x_plot, y_plot, color = 'black')\n",
"plt.plot(x_plot, y_plot1, color = 'red', ls='--')\n",
"plt.plot(x_plot, y_plot2, ls = '--', color = 'green')\n",
"\n",
" \n",
"x_ = [i[0] for i in svm.support_vectors]\n",
"y_ = [i[1] for i in svm.support_vectors]\n",
"encircle(x_,y_, ec=\"blue\", fc=\"none\", linewidth=1.5)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The support vectors are encircled by the blue polygon"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [],
"source": [
"a=np.unique(np.array([1,2,2,5]))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Using SKlearn's SVM"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.svm import SVC as svmC"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [],
"source": [
"svm_sk=svmC(kernel='linear')"
]
},
{
"cell_type": "code",
"execution_count": 149,
"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": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"svm_sk.fit(X,y)"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [],
"source": [
"sv = svm_sk.support_vectors_"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([7, 7], dtype=int32)"
]
},
"execution_count": 151,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n=svm_sk.n_support_\n",
"n"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [],
"source": [
"sv1 = sv[:n[0]]\n",
"sv2 = sv[n[0]:]"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[4.9, 1. ],\n",
" [5. , 1. ],\n",
" [6. , 1. ],\n",
" [5.8, 1. ],\n",
" [5.7, 1. ],\n",
" [5.5, 1. ],\n",
" [5. , 1. ]])"
]
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sv1"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[5.4, 0.4],\n",
" [5.7, 0.4],\n",
" [5.4, 0.4],\n",
" [5.1, 0.5],\n",
" [5.4, 0.4],\n",
" [5. , 0.6],\n",
" [5.1, 0.4]])"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sv2"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"w = svm_sk.coef_[0]\n",
"b = svm_sk.intercept_[0]\n",
"\n",
"\n",
"plt.scatter(X[:,0], X[:,1], c=y, cmap ='viridis')\n",
"x_plot = np.random.choice(X[:,0], 100)\n",
"y_plot = [-1*(w[0]*i + b)/w[1] for i in x_plot]\n",
"y_plot1 = [-1*(w[0]*i + b+1)/w[1] for i in x_plot]\n",
"y_plot2 = [-1*(w[0]*i + b-1)/w[1] for i in x_plot]\n",
"plt.plot(x_plot, y_plot, color = 'black')\n",
"plt.plot(x_plot, y_plot1, color = 'red', ls='--')\n",
"plt.plot(x_plot, y_plot2, ls = '--', color = 'red')\n",
"\n",
"\n",
" \n",
"x_ = [i[0] for i in sv]\n",
"y_ = [i[1] for i in sv]\n",
"encircle(x_,y_, ec=\"blue\", fc=\"none\", linewidth=1.5)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((7, 2), (7,))"
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"X_new.shape, y_new.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Decision Boundary while training with only support vectors"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [],
"source": [
"X_new = svm.support_vectors\n",
"y_new = svm.predict(X_new)"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"optimal\n"
]
}
],
"source": [
"svm_new = SVM_hard()\n",
"svm_new.fit(X_new, y_new)\n"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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3brTIlKj0Wg0AwwZuN98800++eQTnn32WdasWcOaNWui7KtXr2bt2rVs3ryZN954g/379582sRqNRqNJIXDv2rWLm25ShZLOP/98Ojo66O7uBuDAgQMUFhYyevRohBBcd9117Nql6yZrNBrN6WTINe7W1lbGjx8feVxcXExLSwsFBQW0tLRQXFwcZTtwIH7u8r59+9Ig99Tw+/0ZnX84ZItWrTO9aJ3pJdd1DvvDSSkTdHQZgosuSn9BolTZt29fRucfDtmiVetML1pneskVne+8E6e9IikslZSXl9PaOrAD7+jRo5SVlcW1HTlyhPLy2Cp+Go1Go0kfhhziFrq5uZm1a9eyceNGPvjgA1avXs3mzZsj9ltuuYXHH3+ciooKqqurqa+v57zzzosaI9Grhkaj0WiSc8UVV8QcGzJwA9TX1/P2229jGAYrVqzgz3/+M16vl2nTpvHWW29RX18PwPTp06mtrU2/co1Go9FESClwazQajcY6WLJWiUaj0WgSY9kt7/8Mfr+fW2+9lUWLFjF79uzI8crKSioqKrCF+1LW19czatSoM66vqamJe+65hwsuuACAcePGcf/990fsjY2NPPzww9hsNqZOnUpdXd0Z15iKTqv4E6ChoYEnnngCu93O4sWLuf766yM2q/hzKJ1W8eeWLVtoaGiIPH7//fd59913I48bGhp46qmnEEIwd+5c7rgjXqPp089QOsePH8/EiRMjj5988smIb88kPp+PpUuX0tHRQV9fH3V1dVx77bUR+yn5U+YgDz/8sJw9e7Z84YUXoo7fcMMNsru7O0OqBti9e7e8++67E9pnzpwpDx06JEOhkKypqZF/+9vfzqC6AYbSaRV/trW1yenTp8uuri555MgRuXz58ii7Vfw5lE6r+HMwTU1NcuXKlZHHPp9PTp8+XXZ2dsqenh55yy23yOPHj2dQoeJknVJK+fnPfz5DaqLZtGmTrK+vl1JKefjwYTljxoyI7VT9mXNLJR999BH79++PupPJJvRu1OGza9currrqKgoKCigvL2fVqlURm5X8mUynVVm3bh2LFi2KPN6zZw+XXHIJXq8Xl8vFxIkTaW5uzqBCxck6rURRURHt7e0AdHZ2UlRUFLGdqj9zLnD/5Cc/4b774lfqA1ixYgU1NTXU19ef8maidLB//34WLlxITU0Nb7zxRuR4vN2oLS1p6pZzCiTS2Y8V/Hnw4EH8fj8LFy7kzjvvjArMVvJnMp39WMGf/ezdu5fRo0dH9m2A2kltFX/2E08nQCAQYMmSJcybN4+NGzdmSJ1KmT506BDTpk1j/vz5LF26NGI7VX/m1Br3tm3buPzyyzn77LPj2hcvXsy1115LYWEhdXV1vPrqq9x8881nWCWce+65fPvb32bmzJkcOHCABQsW8Nprr+FwxOmmk0GG0mkVfwK0t7fz6KOPcujQIRYsWMCOHTss2eE+mU4r+RPg+eef57bbbkt6TqZfXCCxzu9///t86UtfwjAM5s+fz6RJk7jkkkvOuL6XXnqJMWPGsGHDBj788EOWLVvG1q1b456bqj9z6o57586dbN++nblz57JlyxYee+wxGhsbI/ZZs2ZRUlKC3W5n6tSp/PWvf82IzlGjRlFVVYVhGIwdO5bS0lKOHFH9K620GzWZTrCOP0tKSpgwYQJ2u52xY8fi8Xhoa1NNpa3kz2Q6wTr+7KepqYkJEyZEHYu3kzrTu6Xj6QSoqanB4/GQn5/P5MmTM+bP5uZmpkyZAsCFF17I0aNHCYVUE/FT9WdOBe5HHnmEF154geeee4477riDRYsWcfXVVwPQ1dVFbW0tgUAAgLfeeiuSLXGmaWhoYMOGDYB6K3/s2LFI9sBZZ51Fd3c3Bw8eJBgMsmPHDq655hrL6bSSP6dMmcLu3bsxTZPjx49z4sSJyDqilfyZTKeV/AnqBc7j8cS8C7zssst477336OzsxOfz0dzczKRJkzKkMrHOjz/+mCVLliClJBgM0tzcnDF/nnPOOezZsweATz/9FI/HE8luOVV/5tRSSTy2bt0a2eU5depUqqurcTqdXHzxxRl7G1pZWcm9997L9u3b6evrY+XKlbz88ssRnStXrmTJkiUAVFVVxZQQsIpOq/hz1KhRzJgxg7lz5wKwfPlytm3bZjl/DqXTKv6E2M8G1q9fz5VXXsmECRNYsmQJtbW1GIZBXV0dXm+8ZtWZ11lRUcGcOXMQQlBZWcmll16aEY3V1dUsW7aM+fPnEwwGWbly5T/tT71zUqPRaLKMnFoq0Wg0ms8COnBrNBpNlqEDt0aj0WQZOnBrNBpNlqEDt0aj0WQZOnBrNBpNlqEDt0aj0WQZOnBrNBpNlvH/rIsAaEZCnxAAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"plt.scatter(X[:,0], X[:,1], c=y, cmap ='viridis')\n",
"x_plot = np.random.choice(X[:,0], 100)\n",
"y_plot = [-1*(svm_new.w[0]*i + svm_new.b)/svm_new.w[1] for i in x_plot]\n",
"y_plot1 = [-1*(svm_new.w[0]*i + svm_new.b+1)/svm_new.w[1] for i in x_plot]\n",
"y_plot2 = [-1*(svm_new.w[0]*i + svm_new.b-1)/svm_new.w[1] for i in x_plot]\n",
"plt.plot(x_plot, y_plot, color = 'black')\n",
"plt.plot(x_plot, y_plot1, color = 'red', ls='--')\n",
"plt.plot(x_plot, y_plot2, ls = '--', color = 'red')\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The decision boundary comes out to be exactly same even after throwing all the points except the support vextors. This is because the suppport vectors are the points which decide the seperating boundary."
]
},
{
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment