Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Rudimentary gradient boosting implementation
{
"cells": [
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"ExecuteTime": {
"end_time": "2018-12-14T17:50:57.899610Z",
"start_time": "2018-12-14T17:50:57.413580Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
" return f(*args, **kwds)\n"
]
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import sklearn\n",
"import numpy as np\n",
"\n",
"from matplotlib import pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"from sklearn.datasets import load_boston\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"sns.set_style('whitegrid')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2018-12-14T17:17:42.223105Z",
"start_time": "2018-12-14T17:17:42.201222Z"
}
},
"outputs": [],
"source": [
"X, y = load_boston(return_X_y=True)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2018-12-14T17:23:00.513640Z",
"start_time": "2018-12-14T17:23:00.510682Z"
}
},
"outputs": [],
"source": [
"Xtr, Xva, ytr, yva = train_test_split(X, y, shuffle=True)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"ExecuteTime": {
"end_time": "2018-12-14T17:52:31.154041Z",
"start_time": "2018-12-14T17:52:30.748367Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"training error: 3.6169919985473085, validation error: 3.427774414300282\n",
"training error: 3.437473381069593, validation error: 3.283142998540601\n",
"training error: 3.2966024536971537, validation error: 3.1165568978890414\n",
"training error: 3.1745053542671613, validation error: 3.0358176913602417\n",
"training error: 3.0857294341961863, validation error: 2.986051743700792\n",
"training error: 2.999329472290439, validation error: 2.957290250447813\n",
"training error: 2.882186181820627, validation error: 2.8746081712305167\n",
"training error: 2.8063923402350803, validation error: 2.8251690876229225\n",
"training error: 2.736645773184829, validation error: 2.7620495526348456\n",
"training error: 2.6893168155776266, validation error: 2.74786626500932\n",
"training error: 2.638483401365664, validation error: 2.7074412772316476\n",
"training error: 2.5752811050050695, validation error: 2.7072364329187093\n",
"training error: 2.532863688672846, validation error: 2.6654546469255114\n",
"training error: 2.487691746758752, validation error: 2.598433269419633\n",
"training error: 2.4502562704394713, validation error: 2.5823110741677233\n",
"training error: 2.424117394075903, validation error: 2.572325823079397\n",
"training error: 2.3693262279170666, validation error: 2.5764610672139816\n",
"training error: 2.3299296692724676, validation error: 2.5303812361207645\n",
"training error: 2.318145568444735, validation error: 2.5081049039613785\n",
"training error: 2.29930669258853, validation error: 2.5030551751635453\n",
"training error: 2.268517849179368, validation error: 2.53032115428774\n",
"training error: 2.2327052248919874, validation error: 2.4958354091831856\n",
"training error: 2.1874937765962588, validation error: 2.390920244323716\n",
"training error: 2.162674744707452, validation error: 2.4045534830839257\n",
"training error: 2.1403718292334837, validation error: 2.3844962395133\n",
"training error: 2.1166959357294024, validation error: 2.3374881856300176\n",
"training error: 2.0621734350630163, validation error: 2.2934806820526394\n",
"training error: 2.0191819686138426, validation error: 2.2641269304791276\n",
"training error: 1.9979117785635163, validation error: 2.2881993125066327\n",
"training error: 1.9809382573805503, validation error: 2.276268558770349\n",
"training error: 1.9644733486237462, validation error: 2.280191093226087\n",
"training error: 1.9460011592859268, validation error: 2.274070491323888\n",
"training error: 1.9440175186703252, validation error: 2.2652124825528848\n",
"training error: 1.934972399637474, validation error: 2.2582536400967954\n",
"training error: 1.9031421072182115, validation error: 2.2565122485910605\n",
"training error: 1.8917280647828105, validation error: 2.253759461668231\n",
"training error: 1.881677215291586, validation error: 2.2682340571794284\n",
"training error: 1.8766225706510775, validation error: 2.2762361057038505\n",
"training error: 1.8741978586723076, validation error: 2.2755248256462273\n",
"training error: 1.8621479525004294, validation error: 2.2816697186916217\n",
"training error: 1.8672649830648682, validation error: 2.2571918001705673\n",
"training error: 1.864834374746944, validation error: 2.256741243411143\n",
"training error: 1.8595305458136444, validation error: 2.240776892801123\n",
"training error: 1.8506407569585972, validation error: 2.243913153310932\n",
"training error: 1.8513385007493868, validation error: 2.2429651490930267\n",
"training error: 1.8384112367723204, validation error: 2.238054341117014\n",
"training error: 1.8401247298282075, validation error: 2.2477990026652597\n",
"training error: 1.838168099161834, validation error: 2.2453340899829577\n",
"training error: 1.8447774741333036, validation error: 2.2470494145014035\n",
"training error: 1.8383351272860273, validation error: 2.2701797541271214\n",
"training error: 1.8421212557620035, validation error: 2.2705507063392214\n",
"training error: 1.8394423612006054, validation error: 2.286565776378999\n",
"training error: 1.8386151278239433, validation error: 2.2542960998275547\n",
"training error: 1.8344890407159178, validation error: 2.2862224786488348\n",
"training error: 1.8263682478427425, validation error: 2.271022722660843\n",
"training error: 1.8300549117017424, validation error: 2.2863213270051075\n",
"training error: 1.8263086350754598, validation error: 2.2622594731098773\n",
"training error: 1.826811584859291, validation error: 2.294528893346604\n",
"training error: 1.8215035000652031, validation error: 2.271523021967785\n",
"training error: 1.8184934368716257, validation error: 2.2802986558217837\n",
"training error: 1.811514611036606, validation error: 2.2781931004123352\n",
"training error: 1.8111238169371666, validation error: 2.2887793190147305\n",
"training error: 1.8056171441941469, validation error: 2.2864271201581663\n",
"training error: 1.8019722412038914, validation error: 2.2932454282604278\n",
"training error: 1.795942164304901, validation error: 2.286514540656936\n",
"training error: 1.7948972770160978, validation error: 2.2935416294797895\n",
"training error: 1.793801616063041, validation error: 2.290869935577842\n",
"training error: 1.7922772368721724, validation error: 2.298653685233061\n",
"training error: 1.7891383395011262, validation error: 2.2914435889266045\n",
"training error: 1.7936219844339187, validation error: 2.2988738780226297\n",
"training error: 1.7891771085679216, validation error: 2.306881489133373\n",
"training error: 1.7941634958888952, validation error: 2.309059349690789\n",
"training error: 1.7861014819408203, validation error: 2.2985642273213647\n",
"training error: 1.7897666960774827, validation error: 2.3047942578272713\n",
"training error: 1.7799495936649212, validation error: 2.29424035790227\n",
"training error: 1.7882268204271539, validation error: 2.3011007073455825\n",
"training error: 1.7770980974342805, validation error: 2.298793765998986\n",
"training error: 1.7826822687405626, validation error: 2.297130125223488\n",
"training error: 1.771852018058977, validation error: 2.2948051260691824\n",
"training error: 1.7771377170539713, validation error: 2.2931595431013934\n",
"training error: 1.7666059386836743, validation error: 2.2908164861393776\n",
"training error: 1.7742807533830383, validation error: 2.2891889609792986\n",
"training error: 1.7640556033655381, validation error: 2.2862504183880517\n",
"training error: 1.776857735057365, validation error: 2.2890705072573514\n",
"training error: 1.75762004258738, validation error: 2.282254705970336\n",
"training error: 1.7721510401493437, validation error: 2.286566228686343\n",
"training error: 1.7561512372693502, validation error: 2.285166725244666\n",
"training error: 1.759369080042321, validation error: 2.2842093960974346\n",
"training error: 1.7433995756855942, validation error: 2.2960494695552964\n",
"training error: 1.7386799337903938, validation error: 2.304393054643692\n",
"training error: 1.7410928563632402, validation error: 2.3642789081745286\n",
"training error: 1.7339417405005375, validation error: 2.3466732336503155\n",
"training error: 1.7115800618128205, validation error: 2.311050791901233\n",
"training error: 1.7238002064544768, validation error: 2.337623486791562\n",
"training error: 1.7213688118673223, validation error: 2.3195592074995854\n",
"training error: 1.7219268501766516, validation error: 2.358501030198476\n",
"training error: 1.718052427642273, validation error: 2.327717239102149\n",
"training error: 1.720693331288454, validation error: 2.34113998273646\n",
"training error: 1.7180859573246214, validation error: 2.386594474070223\n"
]
}
],
"source": [
"T = 100 # boosting iterations\n",
"D = 2 # max depth\n",
"alpha = 0.1 # learning rate\n",
"\n",
"def abs_pseudo_residual(yhat, y):\n",
" pr = -((yhat - y) / np.abs(yhat - y))\n",
" pr[np.isnan(pr)] = 0 # fill in nans\n",
" return pr\n",
"\n",
"training_errors = []\n",
"validation_errors = []\n",
"\n",
"learners = []\n",
"learners.append(DecisionTreeRegressor(max_depth=D).fit(Xtr, ytr))\n",
"\n",
"# boost...\n",
"for t in range(T - 1):\n",
" # compute training and validation error\n",
" t_prd = np.zeros_like(ytr)\n",
" v_prd = np.zeros_like(yva)\n",
" for rgr in learners:\n",
" t_prd += rgr.predict(Xtr)\n",
" v_prd += rgr.predict(Xva)\n",
" t_err = (t_prd - ytr)\n",
" v_err = (v_prd - yva)\n",
" \n",
" training_errors.append(np.abs(t_err).mean())\n",
" validation_errors.append(np.abs(v_err).mean())\n",
" print(\"training error: {}, validation error: {}\".format(\n",
" np.abs(t_err).mean(),\n",
" np.abs(v_err).mean()\n",
" ))\n",
" \n",
" #print(\"training error: {}\".format(np.abs(t_err).mean()))\n",
" \n",
" pr = abs_pseudo_residual(t_prd, ytr)\n",
" \n",
" rgr = DecisionTreeRegressor(max_depth=D)\n",
" rgr.fit(Xtr, pr)\n",
" learners.append(rgr)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"ExecuteTime": {
"end_time": "2018-12-14T17:54:26.440798Z",
"start_time": "2018-12-14T17:54:26.179539Z"
}
},
"outputs": [
{
"data": {
"image/png": "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BKq/d+7cub5///7Nqm5Zx4vr+Ph4srKyQn7fnJycsNxXwkP9HXnU55FF/R1Z1N+RJVD9nZ2d/Zu/bTUtREREREQkQFRci4iIiIgEiIprEREREZEAqdNzrkVERETqksLCQnJzc8nPzw93lIhQWFhITk6O3+0TEhJo1aoVsbGxNb6nimsRERGREMnNzSU5OZl27drh8XjCHafe27VrF4mJiX61LSkpYcOGDeTm5tK+ffsa31PTQkRERERCJD8/n7S0NBXWtZDH4yEtLe2g/18FFdciIiIiIaTCuvYKRN9oWoiIiIhIhBg/fjw//fQTeXl55Ofn07p1axo3bswTTzxR5bk5OTlMnTqVq6++utzjM2bMYPXq1Zx55pk1ztejRw/69u2732cPPfQQGRkZNb5mqKm4FhEREYkQt9xyCwBvv/02y5Yt48Ybb/T73KysrEo3ZDniiCMOOl+jRo149dVXD/o64aTiWkRERCQM3srO5b/frwjoNccOaM3p/VtV+7zZs2fz0EMPERsby9ixY0lISOD111/fd/zxxx9n8eLFvPHGGzz66KMcd9xx9OvXj+XLl5OWlsaTTz7Ju+++y7JlyzjrrLO44YYbaN68OStWrKBnz57cfffdbNy4kRtvvJHdu3fTvn17vv32Wz777DO/8j355JPMnTuXnTt3ct9993HdddeRmprKEUccwdChQ7nnnnuIjo4mPj6ee+65h+LiYq688kqSk5MZPnw4l156abV/JzWl4lpEREREKCgoYPLkyQA888wzTJw4kcTERO68805mzpy539SMFStW8PLLL9OiRQvOOussFixYsN+1fv31V55//nkSExM55phjyMvL47nnnuPoo4/m3HPP5euvv+brr78+IMOWLVs4//zz971PT0/n4YcfBqBDhw7cfvvt5ObmkpeXx1tvvUVcXByjR4/mvvvuIysri88//5zx48dz0003kZeXx+uvv05KSkowfl0VUnEtIiIiEgan929Vo1HmYCm9/FxaWho333wzDRs2ZNmyZfTp02e/to0bN6ZFixYAtGjRgoKCgv2Ot2nThqSkJACaNWtGQUEBS5cuZdSoUQAMGDCg3AyVTQspna9Vq1bExcUBsG7dun3TVQYOHLivGD/Y9aprSsW1iIiIiBAV5V1Ebtu2bTzxxBNMnz4dgAsvvJCSkpL92la1qkZ5x7t06cLcuXPJyspi3rx5Nc5X9nV6ejq//PILXbt25bvvvqNdu3YHtAklFdciIiIisk9SUhL9+vVj1KhRNGjQgJSUFNatW0erVgc3yn7ppZdy0003MWXKFNLT04mJObAMLTstBOD666+v9Lr33nsv99xzDyUlJURHR3P//fcfVM6D5Sn7l0hdkpOTU1LZU6tBvG+lT8tK/aL+jjzq88ii/o4s4e7vcN8/nL788ksaN25Mr169+Oabb3jmmWd45ZVXgnrP6uzQuFd5fZSdnZ3dv3//8ueylKGRaxEREREJulatWnHbbbcRHR1NcXExf/nLX8IdKShUXNdAXR7tFxEREQmHjh078p///CfcMYJO259X08QZS7npk9XhjiEiIiIitZCK62rKLyzmp7X57Nq9J9xRRERERKSWUXFdTZ3TkygBlqzbHu4oIiIiIlLLqLiups4ZyQAsXrctzElEREREpLZRcV1N7dIaEBMFi9Zq5FpERETqlnPPPZdZs2bt99m99967b9vzsnJzcxk7diwAf/7zn9m9e/d+x2fMmMEtt9xS4f1Kb6n+9ttvM3Xq1Bpnz83NpV+/fpx//vn7/ezZU7um6mq1kGqKiY6iVUosi9dq5FpERETqlrFjx/Luu+8yePBgAHbv3s20adOq3KgF4NFHH632/fLy8pg8eTJjxoxh9OjR1T6/rE6dOlW4PXptoeK6BtqkxrFYc65FRETkYMz7N8x9LbDX7Hse9Dm7wsMnnHACjz322L7NVaZOncrQoUNp0KABc+bM4amnngIgPz+fv//978TGxu4796ijjmLKlCnk5uZy2223kZiYSGJiIo0aNQLgtdde49NPP6WoqIjk5GSefPJJnnnmGZYsWcJTTz1FSUkJTZs25eyzz2b8+PFkZ2cDcPLJJzNu3DhuueUW4uLiWLlyJevWrWP8+PF0797dr699yy23sHnzZjZv3szFF1/MxIkTiY2NZdSoUWRmZvLYY48RHx9Pamoq999/Pzk5OTz00EPExsYyduxYTjvttJr+xg+gaSE10DY1jhWbdmrFEBEREalT4uPjOfroo/nss88A71SNM888E4DFixfz4IMP8sorr3DUUUfx8ccfl3uNxx9/nD/96U+89NJL9O3bF4Di4mI2b97MSy+9xKRJkygqKmLBggVcccUVdOrUiauvvnrf+dOmTSM3N5f//ve/TJo0iQ8+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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb1d7690710>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 8))\n",
"plt.plot(range(T-1), training_errors)\n",
"plt.plot(range(T-1), validation_errors)\n",
"plt.legend(['Training Error', 'Validation Error'])\n",
"plt.title('Training vs. Validation Error')\n",
"plt.ylabel('Mean Absolute Error (MAE)')\n",
"plt.xlabel('# Gradient Boosting Iterations')\n",
"\n",
"plt.savefig('gradient_boosting_validation_error.png')"
]
},
{
"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.6.7"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.