Last active
October 27, 2015 23:26
-
-
Save scturtle/8a42262dc8b3841a4a80 to your computer and use it in GitHub Desktop.
Logistic Regression with Stochastic Gradient Descent http://nbviewer.ipython.org/gist/scturtle/8a42262dc8b3841a4a80
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "", | |
"signature": "sha256:4d8700168e2746d878d9199c3698535ca17b50e7c6c9aceb46ab2842f147b909" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# load dataset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"%pylab inline" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Populating the interactive namespace from numpy and matplotlib\n" | |
] | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from sklearn.datasets import load_iris\n", | |
"from sklearn.preprocessing import scale\n", | |
"data = load_iris()\n", | |
"X0, y0 = data.data, data.target\n", | |
"y = y0[y0 != 0]\n", | |
"y[y == 1] = 0\n", | |
"y[y == 2] = 1\n", | |
"X = X0[y0 != 0, :]\n", | |
"X = scale(X[:, [2, 3]])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## logistic regression" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from sklearn.linear_model import LogisticRegression\n", | |
"lr = LogisticRegression()\n", | |
"lr.fit(X, y)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 3, | |
"text": [ | |
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", | |
" intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)" | |
] | |
} | |
], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def myplot(pred_func):\n", | |
" f1, f2 = X[:, 0], X[:, 1]\n", | |
" f1_min, f1_max = f1.min() - 1, f1.max() + 1\n", | |
" f2_min, f2_max = f2.min() - 1, f2.max() + 1\n", | |
"\n", | |
" step_size = 0.05\n", | |
" f1_te, f2_te = np.meshgrid(np.arange(f1_min, f1_max, step_size),\n", | |
" np.arange(f2_min, f2_max, step_size))\n", | |
" z = pred_func(np.c_[f1_te.ravel(), f2_te.ravel()])\n", | |
" z = z.reshape(f1_te.shape)\n", | |
"\n", | |
" plt.figure(1, figsize=(8, 6))\n", | |
" plt.pcolormesh(f1_te, f2_te, z, cmap=plt.cm.Paired)\n", | |
" plt.scatter(f1, f2, c=y, edgecolors='k', cmap=plt.cm.Paired)\n", | |
" plt.show()\n", | |
"\n", | |
"myplot(lr.predict)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nRU5ErkJggg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x1060b4ad0>" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## SGD\n", | |
"\n", | |
"Original gradient descent update step:\n", | |
"\n", | |
"$w \\leftarrow w - \\frac \\alpha n \\cdot (p(X)-y) \\cdot X$\n", | |
"\n", | |
"Stochastic gradient descent:\n", | |
"\n", | |
"$w \\leftarrow w - \\alpha \\cdot (p(X_i) - y_i) \\cdot X_i$\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def predict(w, x):\n", | |
" wTx = np.dot(w, np.append(x, 1))\n", | |
" return 1. / (1. + exp(- wTx ))\n", | |
"\n", | |
"def update(w, x, y, alpha):\n", | |
" p = predict(w, x)\n", | |
" w -= alpha * (p - y) * np.append(x, 1)\n", | |
" \n", | |
"def train(X, y, alpha, w=None):\n", | |
" n, m = X.shape\n", | |
" if w is None:\n", | |
" w = np.zeros(m + 1)\n", | |
" for i in xrange(n):\n", | |
" update(w, X[i,:], y[i], alpha)\n", | |
" return w" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# shuffle for SGD\n", | |
"indices = np.arange(X.shape[0])\n", | |
"np.random.shuffle(indices)\n", | |
"Xr, yr = X[indices,], y[indices,]\n", | |
"# train\n", | |
"w = train(Xr, yr, alpha=0.3)\n", | |
"print 'weight:', w\n", | |
"# predict\n", | |
"p = [predict(w, x) for x in Xr]\n", | |
"print np.mean(yr == map(round, p))\n", | |
"# plot\n", | |
"myplot(lambda X: np.array([round(predict(w, x)) for x in X]))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"weight: [ 1.87257167 2.2578766 -0.03898801]\n", | |
"0.95\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nA7BVRop+Nd2rAAAAAElFTkSuQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x107ce4510>" | |
] | |
} | |
], | |
"prompt_number": 6 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment