Skip to content

Instantly share code, notes, and snippets.

@samorajp
Created October 2, 2015 19:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samorajp/4a42113e3e007583c9a1 to your computer and use it in GitHub Desktop.
Save samorajp/4a42113e3e007583c9a1 to your computer and use it in GitHub Desktop.
linear regression
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f9ffc189910>]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n/8zeveMlUmzU05eCmjQplhY0i2JnzzwTxctKS2P/mjXRWx8xAgYOhPvuq3j+yJFwzDHw+usVH7q6\n4w644gpopv/CRSrQQK7Ui88/z1z64Jxzosed3rMfOxZ++1t49VW4/PKYZnnnndHLP+KI6PV/5Svx\nF0GXLvFQ1dq1cPHF8MYbsHIl9Oy57fVsRRqjug7kKugLECmWHXbIT5CcMwdOOSVmy1QucdCpU/T2\nK9eh/+lPI+ivXg3z5sXgK0SvftCgmHb56KPxVOz06bHvrLPiS+DTT2H77aPejkhTo4ezJCeuuQaG\nD8/PtZ9/Ht57D95+u+L2ZctiRk56jj7lzjujh3/vveUBH6I3n6plX3mg9o47osbO6NHws5/l/vcQ\naQo0kCtApEK+/DI/154+HVq1ivnyXbtW3H744ZkLnG2/fea1aE8+OVI+//gHlJXF55R27eDmm+Mv\niw4dcv97iDQFCvoCRK/7gw/yc+0XX4wHoJ59NtaYTfn3vyNHXxMtW8IFF0QdnZtvhhaV/gseNKjO\nzRVp0pTTF9wjl79lC6xbF4OkubJsWZQzLi2FffaJHH1qVaoePSIdc8ghNbvmokXlM3ZatcpdW0Ua\nA+X0pc4++igC/e67x7TJXHrxRejVK1IvbdrEsoIQXy6LFsEBB9T8ml26xBiBAr5IzSnoC8uWQceO\nsP/+kQ/PpRdfjLw9wLHHlternzEDDjoo0jW1ofn3IrWjfzpCWVkE/f32i5RJLk2fHj19iJRMKujX\nJp8vInWnoC8sWxazXXLd0//000gXfe978bl3b3jppZglpKAvUhgK+lKhpz9nztYFz2pr1qz4Itl+\n+/jcunVUvHz++dh32GG5+Tkikj0FfflPT79duwj4K1fm5rrpqZ2UY4+F3/8+Bo01ECtS/7IK+mZ2\nv5mtMrO5adt2NrPJZva2mU0ys9Zp+641s4VmtsDM+uSj4ZI7qYFcs9rn9deuhb/8pWKJ49TMnXTH\nHAOTJyu1I1Io2fb0RwF9K20bAkx29z2BZ5OfMbNuwFlAt+Q5w81Mf1E0YGVl5U+w1jSvv2kT3H13\nPGn7r3/BkUfG071btkT+vnLQ79Ur0j0K+iKFkVUwdvcXgI8rbe4HjE6+Hw2kHojvD4x1943uvhhY\nBPSse1MlH9wrBv1se/ruMHFizLMfNy5KIk+dCpddFoH/8cejdk7lla623x5uuw2OPz73v4uIbFtd\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f9ffc17c710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"N = 100\n",
"X = np.arange(N)\n",
"Y = 2 + 3 * X + 10 * np.random.randn(N)\n",
"plt.plot(X, Y)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def gradient_and_cost(w0, w1):\n",
" w0_diff, w1_diff, cost = 0, 0, 0\n",
" for i in range(N):\n",
" diff = w0 + w1 * X[i] - Y[i]\n",
" w0_diff += 2 * diff\n",
" w1_diff += 2 * diff * X[i]\n",
" cost += diff ** 2\n",
" return w0_diff / N, w1_diff / N, cost ** 0.5 / N"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def fit(alpha, iters):\n",
" w0, w1 = 0, 0\n",
" for i in range(iters):\n",
" dw0, dw1, _ = gradient_and_cost(w0, w1)\n",
" w0 -= alpha * dw0\n",
" w1 -= alpha * dw1\n",
" return w0, w1"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"b: 0.132653680725, a: 3.02425865551\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f9ffc144310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ipywidgets import interact\n",
"\n",
"@interact(iters=(0, 1000, 1))\n",
"def run(iters):\n",
" b, a = fit(0.0001, iters)\n",
" x1, x2 = 0, N - 1\n",
" y1, y2 = b, a * x2 + b\n",
" plt.plot(X, Y)\n",
" plt.plot((x1, x2), (y1, y2))\n",
" print \"b: {}, a: {}\".format(b, a)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment