1
0
mirror of https://github.com/gsi-upm/sitc synced 2024-11-24 23:42:29 +00:00
sitc/ml3/2_4_2_Exercise_Optional.ipynb
Carlos A. Iglesias 842b6307f1 Updated notebooks
2019-03-06 17:46:12 +01:00

344 lines
56 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](images/EscUpmPolit_p.gif \"UPM\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Course Notes for Learning Intelligent Systems"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Department of Telematic Engineering Systems, Universidad Politécnica de Madrid, © Óscar Araque"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [Introduction to Machine Learning III](2_4_0_Intro_NN.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MultiLayer Perceptron (MLP) applied to Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this notebook we are going to apply a MLP to a simple regression task: learning the Fresnel functions.\n",
"\n",
"\n",
"Answer directly in your copy of the exercise and submit it as a moodle task."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load dataset"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:44:45.989818",
"start_time": "2017-03-27T19:44:45.624698"
},
"collapsed": true
},
"outputs": [],
"source": [
"# Show plots in the notebooks\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:44:47.582964",
"start_time": "2017-03-27T19:44:46.844267"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"sns.set(color_codes=True)\n",
"\n",
"# function generator\n",
"from scipy.special import fresnel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Change this variables to change the train and test dataset."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:44:49.811655",
"start_time": "2017-03-27T19:44:49.805379"
},
"collapsed": true
},
"outputs": [],
"source": [
"# variables to change\n",
"\n",
"n_examples = 500\n",
"x_min = 0\n",
"x_max = 3\n",
"\n",
"fresnel_func = 0 # can be 0,1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:45:21.738411",
"start_time": "2017-03-27T19:45:21.489043"
}
},
"outputs": [
{
"data": {
"image/png": "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\nEgleeuklxMXFDd73/vvv4/PPP4dMJsO0adPwk5/8xKoFExEROYMhe9CZmZmoqKhASkoKSktL8fLL\nLyMlJQVA/+5Df/nLX3Ds2DFIJBI88cQTyM3NxfTp061eOBERkSMb8hp0RkbG4M4/kZGR0Ov16Ojo\nAAAolUoolUq0t7fDYDCgu7vbolsEEhEROashA1qn08HPz2/wtq+vL3Q6HYD+gP7+978/uH3fjBkz\nEBERYb1qiYiInMSQAf3NS9SCIAxO2Ghvb8cf//hHHD58GEeOHEF2djauXLlinUqJiIicyJABrdFo\nBnvMAKDVagfXKl67dg3h4eHw9vaGQqFAQkICCgoK7vp83K6PiIhoaENOEktMTMRbb72FjRs3orCw\nEBqNZnCHoNDQUFy7dg29vb1QKBTIz8+/aavD25FIJGhoaLNM9Q5OrfZkW5mB7WQetpP52FbmYTuZ\nT632HPpB3zBkQMfHxyM2NhabNm2CTCbDzp07kZqaCk9PTyQnJ+OJJ57Atm3bIJfLER8fj9mzZ4+o\neCIiIvqKWeugLY3fuMzDb6fmYTuZh+1kPraVedhO5htJD5pbfRIREdkgBjQREZENYkATERHZIAY0\nERGRDWJAExER2SAGNBERkQ1iQBMREdkgBjQREZENYkATERHZIAY0ERGRDWJAExER2SAGNBERkQ1i\nQBMREdkgBjQREZENYkATERHZIAY0ERGRDWJAExER2SAGNBERkQ1iQBMREdkgBjQREZENYkATERHZ\nIAY0ERGRDWJAExER2SAGNBERkQ1iQBMREdkgBjQREZENYkATERHZIAY0ERGRDZKLXQAR3V13rwHZ\nJToUV7agrK4NLe096OoxQCmXwctdifBAD0wO88asKWr4eKjELpeILIQBTWSj6ps68cXZCpy/XI/e\nPhMAQC6Tws9TBR8PFXr7jGjSd6NG14FzhfV4/3Ax4iL9sW5+BKaE+4hcPRGNllkBvXv3buTk5EAi\nkeCll15CXFwcAKC+vh7PPfccJBIJBEFAVVUVnnvuOaxfv96qRRM5svauPnx6shRpOTUQBEDt44IF\nsUGYMSkA4YEekMu+ujJlEgQ0tHQhr7QR5wrrkVvaiNzSRsycFIAtyZMR4OMq4l9CRKMxZEBnZmai\noqICKSkpKC0txcsvv4yUlBQAgEajwXvvvQcAMBqN2L59O5YvX27diokc2KWrDXj3QBHaOvsQEuCO\n+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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fad88a8aa58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Generate dataset (do not change)\n",
"x = np.linspace(x_min, x_max, num=n_examples)\n",
"y = fresnel(x)[fresnel_func]\n",
"\n",
"X = x.reshape(-1,1)\n",
"\n",
"plt.plot(x, y)\n",
"plt.title('Fresnel S function')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Make the MLP learn"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:45:33.201217",
"start_time": "2017-03-27T19:45:33.184488"
},
"collapsed": true
},
"outputs": [],
"source": [
"# do not change\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import r2_score\n",
"from sklearn.neural_network import MLPRegressor\n",
"\n",
"# split the dataset\n",
"X_train, X_test, y_train, y_test = \\\n",
" train_test_split(X, y, test_size=0.3, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Change the parameters of the MLPRegressor to generate a network that learns the function."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:44:57.970215",
"start_time": "2017-03-27T19:44:57.916064"
}
},
"outputs": [
{
"data": {
"text/plain": [
"MLPRegressor(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,\n",
" beta_2=0.999, early_stopping=False, epsilon=1e-08,\n",
" hidden_layer_sizes=(100,), learning_rate='constant',\n",
" learning_rate_init=0.001, max_iter=200, momentum=0.9,\n",
" nesterovs_momentum=True, power_t=0.5, random_state=None,\n",
" shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,\n",
" verbose=False, warm_start=False)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# CHANGE THIS CODE TO MAKE THE MLP LEARN\n",
"\n",
"# train the network\n",
"mlp = MLPRegressor()\n",
"mlp.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this next cell, we can see how the network approximates the original function. \n",
"\n",
"The R score (a regression metric) must be between 0.95 and 1."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2017-03-27T19:45:44.523305",
"start_time": "2017-03-27T19:45:44.221047"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAFXCAYAAABk0q3rAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcU3e+P/7XSQIhQFgCIQoIIpsIuG+IS6tUW6utnbla\n2to7neu0M23n1+k4997pcqedO3d69d4Z25m5/c6d9rYznS5TrDPS6a7d1FqxooiKqAgoqyxhTwhb\ncn5/0KSAYQuB5CSv5+PRx6PhhOT96aF557O9P4IoiiKIiIhIEmSuDoCIiIjGjombiIhIQpi4iYiI\nJISJm4iISEKYuImIiCSEiZuIiEhCJpS4S0pKcNNNN+GNN9647tqxY8ewdetWZGdn4/e///1E3oaI\niIi+5nDiNplM+OUvf4mMjAy715955hk8//zzePPNN/Hll1+irKzM4SCJiIion8OJW6lU4qWXXkJE\nRMR116qqqhASEgKdTgdBELBmzRocP358QoESERHRBBK3TCaDr6+v3Wt6vR4ajcb2WKPRoKGhwdG3\nIiIioq9NyuK0oVVURVGEIAiT8VZEREReZVISt06nQ2Njo+1xfX09tFrtiL/DkulERESjU0zGi0ZF\nRcFoNKK2thYRERE4dOgQ9uzZM+LvCIKAxsaOyQjHLWi1arZPojy5bQDbJ3Vsn3RptWqHfs/hxH3+\n/Hns3r0btbW1UCgUOHDgANauXYvo6GhkZWXh6aefxs6dOwEAmzZtQmxsrKNvRURERF9zOHGnpqbi\ntddeG/b64sWLkZOT4+jLExERkR2snEZERCQhTNxEREQSwsRNREQkIUzcREREEsLETUREJCFM3ERE\nRBLCxE1ERCQhTNxEREQSwsRNREQkIUzcREREEsLETUREJCFM3ERERBLCxE1ERCQhTNxEREQSwsRN\nREQkIUzcREREEsLETUREJCFM3ERERBLCxE1ERCQhTNxEREQSwsRNREQkIUzcREREEsLETUREJCFM\n3ERERBLCxE1ERCQhTNxEREQSwsRNREQkIUzcREREEsLETUREJCEKVwdARERkZegxYm9JLvSmZoSp\nNPjhintdHZLbYeImIiKXM/QY8cbFfShqugiLaAEAVHZU46VTb2J7YraLo3MvTNxEROQy1h72habL\nMJlN112vNza5ICr3xsRNREQu88bFfTirLx72ui4gbAqjkQYuTiMiIpe53Hpl2GshymB8b9FdUxiN\n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\nykgiIpo6HConIiKSECZuIiIiCWHiJiIikhAmbiIiIglh4iYiIpIQJm4iIiIJYeImIiKSECZuIiIi\nCWHiJiIikhAmbiIiIglh4iYiIpIQJm4iIiIJYeImIiKSECZuIiIiCWHiJiIikhAmbiIiIglh4iYi\nIpIQJm4iIiIJYeImIiKSECZuIiIiCWHiJiIikhAmbiIiIglh4iYiIpIQJm4iIiIJYeImIiKSECZu\nIiIiCWHiJiIikhAmbiIiIglh4iYiIpIQJm4iIiIJYeImIiKSECZuIiIiCWHiJiIikhAmbiIiIglh\n4iYiIpIQJm4iIiIJYeImIiKSECZuIiIiCVE48kt9fX147LHHUFtbC7lcjl27diE6OnrQcz744AP8\n6U9/glwux7Jly/DjH//YKQETERF5M4d63O+99x6Cg4Pxl7/8BT/4wQ+wZ8+eQde7urqwZ88evPrq\nq8jJyUFeXh7KysqcEjAREZE3cyhx5+XlISsrCwCwYsUKFBQUDLru5+eHd999FyqVCgAQEhKC1tbW\nCYZKREREDiVuvV4PjUYDABAEATKZDH19fYOe4+/vDwAoKSlBbW0t5s+fP8FQiYiIaNQ57n379uGv\nf/0rBEEAAIiiiLNnzw56jsVisV0f6OrVq/jJT36CPXv2QC6XOylkIiIi7yWIoiiO95cef/xxbNq0\nCZmZmejr68O6detw+PDhQc+pq6vD/fffj1/96leYPXu20wImIiLyZg4NlWdmZuKjjz4CAHz22WdY\ntmzZdc958skn8fTTTzNpExEROZFDPW6LxYInn3wSFRUVUCqV2L17N3Q6HV588UUsW7YMwcHBuOOO\nO5Ceng5RFCEIAr773e/ixhtvnIw2EBEReQ2HEjcRERG5BiunERERSQgTNxERkYQwcRMREUmIQ7XK\nnWEs9c5TU1OxaNEi2wK3P//5z3b3i7uTXbt24cyZMxAEAU888QTS09Nt144dO4bnnnsOcrkcq1ev\nxkMPPeTCSB0zUvvWrl2LyMhICIIAQRDw61//GhERES6MdvxKSkrw8MMP47777sM999wz6Jon3L+R\n2ucJ9++///u/UVBQALPZjAceeAA33XST7ZrU799IbZP6vevq6sJjjz2GpqYm9PT04MEHH8QNN9xg\nuy71ezda+8Z9/0QXyc3NFX/xi1+IoiiKR48eFR999NHrnrN8+fKpDmtCTpw4IX7/+98XRVEUS0tL\nxTvvvHPQ9Y0bN4p1dXWixWIR7777brG0tNQVYTpstPatXbtWNJlMrgjNKTo7O8V7771X/NnPfia+\n/lA6vRkAAAQ+SURBVPrr112X+v0brX1Sv3/Hjx8XH3jgAVEURbGlpUW84YYbBl2X8v0brW1Sv3fv\nv/+++NJLL4miKIo1NTXi+vXrB12X8r0TxdHbN97757Kh8tHqnQP9VdqkZGCb4uPj0d7eDqPRCACo\nqqpCSEgIdDodBEHAmjVrcPz4cVeGO24jtQ/ov19Su2cDKZVKvPTSS3a/6XrC/RupfYD079/SpUvx\n29/+FgAQHBwMk8lka4/U799IbQOkf+82btyIHTt2AABqa2sxffp02zWp3ztg5PYB479/LhsqH67e\nuULxTUjd3d34l3/5F9TU1GD9+vW47777XBTt2Oj1eqSlpdkeh4aGQq/XIyAgYFB7AUCj0aCqqsoV\nYTpspPZZPf3006iursbixYuxc+dOV4TpMJlMBl9fX7vXPOH+jdQ+KynfP0EQ4OfnBwB46623sGbN\nGtvUmtTv30hts5LyvbPKzs5GQ0MD/vCHP9h+JvV7N5C99lmN5/5NSeJ2tN75Y489httuuw0AcM89\n92DJkiVITU2dipAdMvQbk/j13Pxo16RitDb86Ec/wqpVqxASEoKHHnoIBw8exPr166c6zEnhCfdv\nNJ5y/z755BPs378fL7/8su1nnnL/7LUN8Jx7l5OTg4sXL+Kf//mf8c477wDwnHsH2G8fMP77NyVD\n5Vu3bsXevXuRk5ODnJwc7N27F1u2bIFerwcA28liQw8iufPOO6FSqaBSqZCRkYGSkpKpCNdhOp3O\n1iYAaGhoQHh4uO1aY2Oj7Vp9fT20Wu2UxzgRI7UPAG6//XZoNBrIZDKsXr3a7e/XeHjC/RuNJ9y/\nL774Ai+++CJeeuklBAYG2n7uCfdvuLYB0r9358+fR11dHQBg9uzZMJvNaG5uBuAZ926k9gHjv38u\nm+Merd75lStX8JOf/ARAf2I/deoUEhISpjzO8cjMzMSBAwcAAMXFxdDpdLbjTaOiomA0GlFbW4u+\nvj4cOnQIK1eudGW44zZS+wwGA3bs2IHe3l4AQH5+PhITE10Wq7N5wv0biSfcP4PBgF/96lf4wx/+\nALVaPeia1O/fSG3zhHuXn5+PP/7xjwD6h8ZNJpNteFzq9w4YuX2O3D+XlTwdrd75vHnzsGfPHuTl\n5UEul2PdunV44IEHXBHquDz77LM4ceIE5HI5nnrqKRQXF0OtViMrKwsnT57Er3/9awDAzTff7PZz\n9vaM1L7XXnsNubm58PPzw5w5c/Bv//Zvrg53XM6fP4/du3ejtrYWCoUCOp0Oa9euRXR0tEfcv9Ha\nJ/X799Zbb+H555/HzJkzbcOpy5cvR1JSkuTv32htk/q96+7uxhNPPIG6ujp0d3fjhz/8IVpaWjzm\ns3O09o33/rFWORERkYSwchoREZGEMHETERFJCBM3ERGRhDBxExERSQgTNxERkYQwcRMREUkIEzcR\nEZGEMHETERFJyP8PEdpHW8QzFeMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fadb8f2ee80>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"R score: 0.226100740276\n"
]
}
],
"source": [
"# do not change\n",
"\n",
"# predict from test\n",
"preds = mlp.predict(X_test)\n",
"\n",
"plt.plot(x, y)\n",
"plt.scatter(X_test, preds, color='g')\n",
"plt.show()\n",
"\n",
"print('R score:',r2_score(y_test, preds))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* [MLP documentation](http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Licence"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The notebook is freely licensed under under the [Creative Commons Attribution Share-Alike license](https://creativecommons.org/licenses/by/2.0/). \n",
"\n",
"© Óscar Araque, Universidad Politécnica de Madrid."
]
}
],
"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.7.1"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
"nbformat_minor": 1
}