Skip to content

Instantly share code, notes, and snippets.

@vbarda
Created March 3, 2017 19:17
Show Gist options
  • Select an option

  • Save vbarda/22cd7fed2fd2c9ed819f1295d77be914 to your computer and use it in GitHub Desktop.

Select an option

Save vbarda/22cd7fed2fd2c9ed819f1295d77be914 to your computer and use it in GitHub Desktop.
Simple Gradient Descent
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"\n",
"from sklearn.datasets import load_boston\n",
"from sklearn.linear_model import LinearRegression, LassoCV\n",
"from sklearn.preprocessing import StandardScaler"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"boston = load_boston()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X = pd.DataFrame(boston.data, columns=boston.feature_names)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"scaled_X = pd.DataFrame(StandardScaler().fit_transform(X), columns=boston.feature_names)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"y = boston.target"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def cost_function(X, y, b):\n",
" '''calculate the values of (1/2m) * sum((h(x) - y) ** 2) '''\n",
" m = X.shape[0]\n",
" return np.power((X.dot(b) - y), 2).sum() / 2 / m"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def step(X, y, b, alpha=.005):\n",
" '''recalculate betas, one gradient descent step'''\n",
" b = b.copy()\n",
" m = X.shape[0]\n",
" b -= (alpha / m) * X.T.dot(X.dot(b) - y)\n",
" return b, cost_function(X, y, b)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def add_intercept(X):\n",
" '''add vector of 1s to X to hack the gradient descent matrix multiplication. \n",
" makes sure it goes into first column\n",
" '''\n",
" if not isinstance(X, pd.DataFrame):\n",
" try:\n",
" X = pd.DataFrame(X)\n",
" except:\n",
" raise ValueError('can\\'t convert X to a DataFrame, please change the format')\n",
"\n",
" if 'intercept' in X.columns:\n",
" raise ValueError('data already has intercept column')\n",
"\n",
" return X.assign(intercept=1)[['intercept'] + X.columns.tolist()]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from collections import namedtuple\n",
"\n",
"GradientDescentOutput = namedtuple('gradient_descent', ('coefficients', 'cost_history'))\n",
"\n",
"def gradient_descent(X, y, b=None, alpha=.005, precision=.001, max_iterations=1000):\n",
" '''takes X and y, returns cost function history by iteration and coefficients'''\n",
" X = X.pipe(add_intercept)\n",
"\n",
" if b is None:\n",
" b = np.zeros(X.shape[1])\n",
"\n",
" costs = [cost_function(X, y, b)]\n",
" \n",
" while True:\n",
" b, cost = step(X, y, b)\n",
" costs.append(cost)\n",
" if (len(costs) == max_iterations) or (costs[-2] - costs[-1] <= precision):\n",
" break\n",
" return GradientDescentOutput(coefficients=b, cost_history=pd.Series(costs))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 9.94 ms, sys: 706 µs, total: 10.6 ms\n",
"Wall time: 26 ms\n"
]
}
],
"source": [
"%%time\n",
"output = gradient_descent(X, y, max_iterations=5000)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"555984601.79421222"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cost_function(X.pipe(add_intercept), y, output.coefficients)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.11266403162055337,\n",
" 0.2526591271640316,\n",
" 1.666084980237154,\n",
" 1.1024118577075102,\n",
" 0.00983596837944664,\n",
" 0.060221619664031646,\n",
" 0.7304750750988144,\n",
" 7.238944071146246,\n",
" 0.45171812420948615,\n",
" 0.9233705533596842,\n",
" 42.36954150197628,\n",
" 2.028821442687746,\n",
" 41.58151684782609,\n",
" 1.1837861561264824]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output.coefficients.tolist()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# we can see that the gradient descent clearly fails to converge, given the value of cost function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Scikit-learn LinearRegression"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/vadimbarda/Desktop/PERSONAL/repos/venv/lib/python2.7/site-packages/scipy/linalg/basic.py:884: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n",
" warnings.warn(mesg, RuntimeWarning)\n"
]
}
],
"source": [
"lr = LinearRegression(fit_intercept=False).fit(X.pipe(add_intercept), y)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10.948889608843748"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cost_function(X.pipe(add_intercept), y, lr.coef_)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[36.49110328036134,\n",
" -0.10717055656035482,\n",
" 0.04639521952979796,\n",
" 0.02086023953217414,\n",
" 2.6885613993178947,\n",
" -17.795758660308966,\n",
" 3.8047524602579985,\n",
" 0.0007510617033174849,\n",
" -1.4757587965198158,\n",
" 0.30565503833910357,\n",
" -0.012329346305270031,\n",
" -0.9534635546905557,\n",
" 0.009392512722189219,\n",
" -0.5254666329007927]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr.coef_.tolist()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Scikit-learn Lasso"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"lasso = LassoCV(fit_intercept=False).fit(X.pipe(add_intercept), y)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.0,\n",
" -0.0,\n",
" 0.10985996434443338,\n",
" -0.0,\n",
" 0.0,\n",
" 0.0,\n",
" 0.0,\n",
" 0.07909893169352256,\n",
" 0.0,\n",
" -0.0,\n",
" 0.005565350191311895,\n",
" 0.0,\n",
" 0.05332194871858393,\n",
" -0.4812478463749813]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lasso.coef_.tolist()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"29.088916777159049"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cost_function(X.pipe(add_intercept), y, lasso.coef_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### custom gradient descent, scaled"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 6.48 s, sys: 76.2 ms, total: 6.55 s\n",
"Wall time: 7.05 s\n"
]
}
],
"source": [
"%%time\n",
"scaled_output = gradient_descent(scaled_X, y, precision=.000000001, max_iterations=5000)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10.964210175697147"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cost_function(scaled_X.pipe(add_intercept), y, scaled_output.coefficients)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Scikit-learn Linear Regression, scaled"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"scaled_lr = LinearRegression(fit_intercept=False).fit(scaled_X.pipe(add_intercept), y)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[22.532806323815297,\n",
" -0.883761093493384,\n",
" 1.0172596550427653,\n",
" -0.03004488858125703,\n",
" 0.7066577569563623,\n",
" -1.9962044484796129,\n",
" 2.7104067618681045,\n",
" -0.010702480663246507,\n",
" -3.089620926064473,\n",
" 2.216260562735198,\n",
" -1.5868583174281505,\n",
" -2.039509753916137,\n",
" 0.8553091049726022,\n",
" -3.7298708092836583]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scaled_output.coefficients.tolist()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10.94888960884375"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cost_function(scaled_X.pipe(add_intercept), y, scaled_lr.coef_)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1096c8050>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nflPWWWedlW2f+9wXGT58+Br322efr7Nw4f/ji1/8NCeccBzPPbeIceP+/WLHhoZ6Ghsb+djHtljZ\nVlVVxUc/+jFeeeWllW0bbbTxysfDhw9n7NiNVnne2lrQG5MlUtIuBNRqLF+6pNghlBR/XpKkclBV\n1ftSrb29jVQq03+rrWZw113zefTRh/nLX/7E+eefzeOP/w8nn3z6Kvt03foud6VHR0fHKuu9U6lV\nFwrkm+kuRxbNJWDKlKnM/X6xoygtqdQ2TJs2jaamvNeOSpKUWOPHj+fVV+tYsWLFytnlX/7yQl54\nIbMcorm5mZqazMrT119/jfHjNwXg17++hQkTJrH77l9g992/wIMP/o5zzjn934rmESPWpba2loUL\nF6y88K+trY0Y/84223xysF5mSbBoLgHV1dVMn751scMoKVVVlVRXV1s0S5LyGsy/TmaONaPX/bfZ\n5pNssMEGzJ17FgcccDBLlrzCvffO45RTzmDhwme44YZr2HPPr/DQQ3/g//4vriya33rrLe69dx4n\nnDCHdDrNQw89yOabfxSAmpoali9v5NVX69hoow+x777f4JprLmeDDTZk3Ljx3HTT9bS0tLDrrp8e\niB9BybJoliRJQ1ah/prb+/toz2DKlKl9GDfFOef8lJ/97DwOPvib1NZuwBFHHMMOO+zID3/4E668\n8lLuvPM2dtxxZ/bee1+WLWsA4NBDD6OpqYkTTjiO5ub32HLLrTjllDMA2GqrmWy88TgOOGA2l112\nDbNnf5Pm5mbmzj2L995rYsqUqVx88RWk0+sD/NtdOtZ0145yVtHZ6d3W+qmzoaHJe2YmTFVVJaNG\njcDcJJP5SS5zk1zmJtnMT3Jlc9PvSn/oreKWJEmS+siiWZIkScrDolmSJEnKw6JZkiRJysOiWZIk\nScrDolmSJEnKw6JZkiRJysOiWZIkScrDTwRUWWppaeGJJ57txScz5TdlylSqq6sLFJkkSSpFFs0q\nSwsXLuCEO+aQHl/br3Ea6+o5kzlMn751gSKTJCVJS0sLixYt6Pc4vf8Y7YGfjHnggfu49tqruP32\ne/jb357k6KO/x6OPPrHGfgB/+9uTbLjhhmyyyYfzHuPss08D4MQT5xQ09iQbskVzCCH3X/TbwD3A\nMTHG94oQkgosPb6W2gmjix2GJCnBFi1awEnzTuv3JEtvDcZkzK67fobtttsBgIqKCioqev4E6e79\n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\nD2foSqGwa1F9AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10965cd10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd.DataFrame({'scikit_learn': scaled_lr.coef_,\n",
" 'custom': scaled_output.coefficients},\n",
" index=X.pipe(add_intercept).columns).plot.barh(figsize=(8, 5))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x109859290>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n448/YvHiL/jkk48pKNgSgF//+rc89th0jj56GH379mPIkH04+OBhABx66GG8+OLzDBv2W/r3H8je\ne+/DgQceAsDixV8wfPgRGxyrX79fMHPmU837BpuJQrOINLmS5V/+7GsREWk6a9as5k9/Opf8/AIG\nD96b/fc/gC++WMTDDz8AQEHBFjzwwCO8887bvPnm6zz88H08/fTj3HXXA3Tv3oPp05/krbde5803\nX2fy5Nt54YXnufXWKeTk5JCRkbHBsSorK1vshaoKzSLSpPr27cf1F224LBLZnZ133pnVq/VR2iIi\nTe2DD95n+fLl3H//9PUh9z//eZOqS7reeut1vvtuKcOHH8meew7mlFNOZ9iwA/j8889YvPgLsrNz\nGDp0f/bZZyjz58/j7LNPpaioiM6duzJv3lyOOOKY9ceaN28uXbp0TcXbbHIKzSLSpGq6IDErK5Oc\nnByFZhFJa835V7P4sXat836xWIw+fQpZu3YNr7zyEn36FPLuu//hscem065dewAqK2PcdtvNFBRs\nyQ47GP/+979o2zaXzp27smDBPO699y4233xzttlmW55/fiZbbbU1m2++OccccxznnHMGhYU7seee\n8QsBX311FhMn3tbI7z4cMmIx3TiigWJFRat1+5+QycrKJD+/HapNOKk+4aXahJdqEy6lpaXMn//T\nJwI2x320+/at2ycCLl36LUcfPYx//vNJ/vWvp3nssemUlq6jZ8/eHHzwMK699moee+wZtthiS/7x\njwd45JF/sGLFcrp27ca5545gwIBdicViTJ58G889N5Pi4pX06VPIhRdeQu/eOwDw4ov/5q67JvPt\nt9/SpUtXTjvtTIYM2adJ3n99Jc6djOAtf55Cc8MpNIeQ/nMJN9UnvFSb8FJtwk31Ca/GCs36AHsR\nERERkQAKzSIiIiIiARSaRUREREQCKDSLiIiIiARQaBYRERERCaDQLCIiIiISQKFZRERERCSAQrOI\niIiISACFZhEREREJNHbsGMaOHVOvfZcu/ZYhQ3Zj6dKljdyr5pOV6g6ISOsze/b7RKO59OpVmOqu\niIjUSzp8jHbYZGQ0+EP5UqrVhmYzq/4v+nvgCeBCd1+Tgi6JiIhImpg/fy6jZowh2rmgWY5XvGQF\n1zCa/v0HNsvxZGOtNjQnHAa8BUSAzsAU4AbgnFR2SkRERMIv2rmAgp5bp7obmzR9+sP8858Psnz5\ncnr06Mn551/EL36xCx99NJ9bbpnIJ598zNZbd+S0085i6ND9AXjqqcd5+OH7+eabr2nXrh377bc/\nI0b8ucZR4ldemcWdd05i6dJv6NGjF3/84/nssssAAMrLy7nllht57rln2WyzzTj++JOb8603idYe\nmovcfVni+bdmNg64DYVmERERSWOffupMmvQ3xo4dT7duPZg+/UGuuOJS7r77QUaMOJcDDvgdl156\nBfPmzeGvf72Sbt26U1JSzM03j2f06Gvo3bsP7gsYM+Zydt11D/bee59q7X/C2LFX8uc//x99+hTy\n9ttvcMklFzBt2kNst932TJ06mTfffIPrr59IJJLFX/86OjXfiEbU2kNzdZqWIdIMysrKWLBg0c/O\n/Uv3uXsiIqn07bffkpGRQceOnejUqRNnnPFHBg/emxdffI4OHTpw4YUXA9C5cxdKSopZt+5HNtts\nMy699AqGDNkHgE6dOrHDDvezaNHCjULzww/fz6GHHs7Qob8B4IgjjuGDD97n8ccf5ZxzLuDpp5/g\nvPPiI9sA5513ESNHjmi2998UFJoTzGxL4DzgvlT3RaSly87O5ra3p21yLqDm7omINMweewyiR49e\nnHjiMfTubQwZ8isOOeQwXn75RXr3tg22Pfro49Y/z8lpw9Spk1m06HM+//wzvv76K/bYY8+N2l+8\n+AtmzXqRxx9/dP2yiopy9thjT3744Qd++KGIXr16r1+34459icViTfBOm09rD83PJi4IzAA2A/4H\nnFXXRiIR3bkvbKpqotqEU2ZmRuBcwEgkk6ws1a+56dwJL9UmXFJRh7r8XMzK2oy7776P2bPf5/XX\nX+XZZ5/m8ccfZciQvcnMzKixnbfffpORIy/moIMO5pe//CVnnnkW118/dv32GRnxO2BkZWVSWVnB\nCSecxEEHHbxBG23atCErKyPR35+Ok5ubk+hXzcduSo1Vq9Yemk8D3iEemrcEzgXeMLN+7v6/2jYS\njeY2UfekoVSbcGrfvm3gNtFoLvn57ZqhN1ITnTvhpdqEQyrqUJefi//97395++23Oeussxg6dG8u\nvfTPDB48mC5dtufJJ5/coJ0RI0aw00478eGHH3LUUUdy+eWXA/GL+b755mvats0mP78dbdpkA5Cf\n345evXqyfPkydtrpp1Hr66+/nh49enDkkUey5ZZbsnjxZ+y6684AfPLJPDIyMujQYbO0/dne2kPz\n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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1097ecc10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd.DataFrame({'unscaled': lr.coef_,\n",
" 'scaled': scaled_lr.coef_,\n",
" 'lasso': lasso.coef_},\n",
" index=X.pipe(add_intercept).columns).plot.barh(figsize=(8, 5))"
]
}
],
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment