Skip to content

Instantly share code, notes, and snippets.

@gcr
Created May 29, 2014 17:18
Show Gist options
  • Save gcr/dc9d432f11ae210f6716 to your computer and use it in GitHub Desktop.
Save gcr/dc9d432f11ae210f6716 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "",
"signature": "sha256:78d15dad8876f550bbf2e9f489381146f98b271e5ec4e609219ad11ddaa39658"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"source": [
"Implementing a simple linear SVM in Theano"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# First, let's build a simple dataset:\n",
"from sklearn.datasets import make_blobs\n",
"n=100\n",
"X,y = make_blobs(n, centers=2, n_features=2)\n",
"X -= np.mean(X, axis=0)"
],
"language": "python",
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Showing it:\n",
"scatter(*X.T, c=np.array([\"b\",\"r\"])[y])"
],
"language": "python",
"outputs": [
{
"output_type": "pyout",
"prompt_number": 17,
"text": [
"<matplotlib.collections.PathCollection at 0x579ec90>"
]
},
{
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x57cc750>"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Here's a function that plots the dataset along with the decision\n",
"# boundary when given the line length, and the normal+bias of the\n",
"# hyperplane\n",
"def plot_dataset(scale,w,b):\n",
" # v is a vector that is perpendicular to the decision line\n",
" v = np.array([w[1],-w[0]])\n",
"\n",
" # p is a point on the line, which we take as either the X or the Y\n",
" # intercept\n",
" if abs(w[0])>abs(w[1]):\n",
" p = np.array([-b/w[0], 0])\n",
" else:\n",
" p = np.array([0, -b/w[1]])\n",
" tt = np.arange(-scale,scale,0.1)\n",
" points = np.array([t*v + p for t in tt])\n",
" fig,ax=subplots()\n",
" ax.plot(*points.T,color='black',linestyle='--')\n",
" ax.scatter(*X.T, c=np.array([\"b\",\"r\"])[y])\n"
],
"language": "python",
"outputs": [],
"prompt_number": 197
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Liblinear's approximation:\n",
"\n",
"from sklearn.svm import LinearSVC\n",
"cls = LinearSVC().fit(X,y)\n",
"[w],b = cls.coef_, cls.intercept_"
],
"language": "python",
"outputs": [],
"prompt_number": 252
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plot_dataset(10,w,b)"
],
"language": "python",
"outputs": [
{
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x56c9990>"
]
}
],
"prompt_number": 253
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Theano version, trained with simple gradient descent:\n",
"\n",
"import theano\n",
"from theano import tensor as T\n",
"# Inputs\n",
"Tx = T.dmatrix('Tx')\n",
"Ty = T.lvector('Ty')\n",
"\n",
"# Parameters\n",
"W_values = np.random.uniform(size=(1,2))\n",
"B_values = np.random.uniform(size=1,)\n",
"W = theano.shared(W_values)\n",
"b = theano.shared(B_values)\n",
"\n",
"f = Tx.dot(W.T) + b\n",
"\n",
"# The loss function. W*W controls the size of the margin, and the\n",
"# second term is hinge max of the misclassification error (essentially y*f)\n",
"loss = (W*W).sum() + T.maximum(0,(2*Ty-1)*f[:,0]).sum()\n",
"\n",
"# The train function. This updates the weights and bias according to the\n",
"# gradient of the loss function.\n",
"train = theano.function([Tx,Ty], loss,\n",
" updates = [(W, W - 0.001*T.grad(loss,wrt=W)),\n",
" (b, b - 0.001*T.grad(loss,wrt=b))])"
],
"language": "python",
"outputs": [],
"prompt_number": 254
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Each time the 'train' function is called, it updates the 'W' and 'b'\n",
"# variables according to the rule you specify. Here, I've opted for just\n",
"# simple gradient descent with a learning rate of 0.001.\n",
"for i in xrange(5000):\n",
" train(X,y)"
],
"language": "python",
"outputs": [],
"prompt_number": 262
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# The result looks quite similar to LibSVM's learned weight and bias:\n",
"plot_dataset(2500,W.get_value()[0],b.get_value()[0]) "
],
"language": "python",
"outputs": [
{
"output_type": "display_data",
"png": "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\nGR7cjDFmM1/kDdSSqtHb9AAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x83e6950>"
]
}
],
"prompt_number": 263
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment