diff --git a/.#todo.org b/.#todo.org new file mode 120000 index 0000000..a4bcf93 --- /dev/null +++ b/.#todo.org @@ -0,0 +1 @@ +user@thinkgentoo.29142:1592891722 \ No newline at end of file diff --git a/anno3/apprendimento_automatico/esercizi/1/.ipynb_checkpoints/coverage_plots-checkpoint.ipynb b/anno3/apprendimento_automatico/esercizi/1/.ipynb_checkpoints/coverage_plots-checkpoint.ipynb new file mode 100644 index 0000000..0d2cab8 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/1/.ipynb_checkpoints/coverage_plots-checkpoint.ipynb @@ -0,0 +1,317 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Coverage plots" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us consider the following function which applies a linear model to the given data. \n", + "Specifically, given a \"model\" vector containing the model coefficients $(a,b)$ and a $n \\times 2$ \"data\" matrix containing the data points to be classified, the function outputs a vector $\\mathbf{z}$, $|\\mathbf{z}| = n$ of booleans where $z_i$ is `True` if $a \\cdot x_{i,1} + b \\cdot x_{i,2} \\geq 0$, it is `False` otherwise." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def apply_linear_model(model, data):\n", + " return np.dot(data, np.transpose(model)) > 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us define `data` by generating $1000$ points drawn uniformly from $\\mathcal{X} = [-100,100]^2$." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/user/.local/lib/python3.7/site-packages/ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(-100, 100 + 1) instead\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[-35, -99],\n", + " [ 46, -79],\n", + " [-42, -4],\n", + " ...,\n", + " [-15, 66],\n", + " [-79, -33],\n", + " [-61, 50]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = np.random.random_integers(-100,100,[1000,2])\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and let target_labels be the labeling output by applying `apply_linear_model` with our target model: $4x -y > 0$" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "target_model = [4.,-1.]\n", + "target_labels = apply_linear_model(target_model, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By using matplotlib.pyplot module it is easy to plot the generated points onto a 2D plot:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "colors = ['r' if l else 'b' for l in target_labels]\n", + "plt.scatter(data[:,0], data[:,1], color=colors)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally let us now generate at random 100 linear models with coefficients in $[-5,5]$:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-2.39430024, 4.82135902],\n", + " [ 1.05475945, 0.56506096],\n", + " [ 4.33381523, -2.79295785],\n", + " [ 1.40967652, 0.23582632],\n", + " [-1.86874245, -1.94575582],\n", + " [ 3.49504802, 4.46631455],\n", + " [ 3.73910681, -1.20697797],\n", + " [-0.03709135, -2.10326967],\n", + " [ 3.45305859, -4.34793504],\n", + " [ 3.03208277, 3.74285745],\n", + " [ 1.5465798 , 3.50062332],\n", + " [ 2.2422928 , 1.0046194 ],\n", + " [ 3.03217811, -0.82377688],\n", + " [-4.53947789, 3.70865422],\n", + " [-3.25118429, -1.72249205],\n", + " [ 2.26245853, -4.28364219],\n", + " [ 4.94378489, 4.28009147],\n", + " [-4.69232032, -0.58696177],\n", + " [-4.89189465, 0.39817474],\n", + " [ 3.76075994, 0.31297542],\n", + " [-3.16975246, 4.25281293],\n", + " [ 1.17872066, -1.09249838],\n", + " [-1.95646119, 2.20465081],\n", + " [ 4.27728295, 1.53512327],\n", + " [ 0.05835676, 1.70723529],\n", + " [ 2.60309217, -0.45217353],\n", + " [-0.17392586, -0.27012307],\n", + " [-2.05830803, -2.06266253],\n", + " [ 3.9529746 , 3.42138605],\n", + " [-3.79939733, -0.21979507],\n", + " [-2.29925996, -3.34504866],\n", + " [ 2.82327177, 3.36741078],\n", + " [-4.36398037, 4.90756469],\n", + " [ 0.42676851, -0.06020275],\n", + " [ 3.17293673, 4.77796787],\n", + " [-2.94774218, 3.9356928 ],\n", + " [ 2.59485714, -4.80307843],\n", + " [ 2.36994981, -0.95851792],\n", + " [ 4.88820476, -1.35503075],\n", + " [ 0.94150698, 3.12143851],\n", + " [ 0.33869197, -4.67364091],\n", + " [-2.72092697, -0.16985042],\n", + " [-1.95475038, 4.82283169],\n", + " [ 2.45764492, 4.77215002],\n", + " [ 0.05377156, -2.35640137],\n", + " [ 4.35117408, 1.90279533],\n", + " [ 4.51945998, -3.4003176 ],\n", + " [ 1.8446393 , -3.17348665],\n", + " [-3.39891706, -4.60282665],\n", + " [-2.73001814, -2.3755611 ],\n", + " [ 3.70599397, -4.46493656],\n", + " [ 2.21630505, 4.14085098],\n", + " [-3.41340833, 3.44627966],\n", + " [-4.60977981, 3.96608819],\n", + " [-3.12045006, -2.6109695 ],\n", + " [-1.09736041, -1.80670439],\n", + " [-0.01733633, -1.72932242],\n", + " [-3.8893666 , -0.23795606],\n", + " [ 4.32262985, -2.60558145],\n", + " [-4.94835985, 4.9499789 ],\n", + " [ 4.83372946, 3.18143365],\n", + " [-2.97234861, 3.43734029],\n", + " [ 4.13213153, -4.01988738],\n", + " [ 2.50430662, -3.55060295],\n", + " [-1.13021843, -2.66490227],\n", + " [-3.52868187, 3.08060977],\n", + " [-4.60059847, 0.07549374],\n", + " [ 3.02082047, 4.1033937 ],\n", + " [ 3.17455034, -3.3296469 ],\n", + " [ 1.5874334 , -3.8626682 ],\n", + " [-4.83005533, 1.64085882],\n", + " [-3.67705824, -3.7420375 ],\n", + " [ 3.37141151, 4.31804914],\n", + " [-2.32695571, -1.65021845],\n", + " [-4.93262416, 0.30335477],\n", + " [ 3.09178415, -3.5606033 ],\n", + " [-0.99362255, 4.12845851],\n", + " [-4.93026694, 2.8832776 ],\n", + " [ 4.76078721, 4.52391074],\n", + " [-4.02330413, -3.919773 ],\n", + " [-1.2605584 , 2.07658856],\n", + " [ 4.76819758, -1.74330259],\n", + " [-3.27001856, 0.52159983],\n", + " [ 4.28932043, -3.4243422 ],\n", + " [-0.29372312, -1.51538405],\n", + " [ 2.46437149, -3.73790856],\n", + " [ 3.25584766, 4.32526613],\n", + " [ 4.41084634, -2.65951582],\n", + " [ 2.05089111, -2.77049322],\n", + " [-4.64295989, 1.17909785],\n", + " [ 0.73985808, 1.09177819],\n", + " [-3.08619219, -2.23259432],\n", + " [-2.21523998, -4.29746264],\n", + " [ 2.93142476, -3.074807 ],\n", + " [-2.23827727, 4.12204265],\n", + " [-2.88171529, -0.87372322],\n", + " [ 1.48659654, 3.79868869],\n", + " [-2.57574569, 3.29476101],\n", + " [-2.86541983, 4.08032984],\n", + " [-0.36862476, 3.67346937]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "models = (np.random.rand(100,2) - 0.5) * 10\n", + "models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Write a function that, taken two list of labellings build the corresponding confusion matrix [[1](#hint1)];\n", + "1. For each model in `models` plot the [FP,TP] pairs on a scatter plot;\n", + "1. Just looking at the plot: which is the best model in the pool?\n", + "1. Find the model with the best accuracy [[2](#hint2)] and compare it with the target model, is it close? Is it the model you would have picked up visually from the scatter plot?\n", + "1. If everything is ok, you should have found a pretty good model for our data. It fits the data quite well and it is quite close to the target model. Did you expect this? If so, why? If not so, why not?\n", + "\n", + "Hint 1: it may be helpful to have a way to map TRUE to 0, FALSE to 1 and to use these values as indices in the confusion matrix. \n", + "\n", + "Hint 2: one way to proceed is to build a function `accuracy`, use the `map` function to calculate the accuracies of all the models, and then apply the `numpy.argmax` to retrieve the index of the best model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/1/coverage_plots.ipynb b/anno3/apprendimento_automatico/esercizi/1/coverage_plots.ipynb index 48c0a49..0d2cab8 100644 --- a/anno3/apprendimento_automatico/esercizi/1/coverage_plots.ipynb +++ b/anno3/apprendimento_automatico/esercizi/1/coverage_plots.ipynb @@ -10,9 +10,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -31,9 +29,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def apply_linear_model(model, data):\n", @@ -50,20 +46,26 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/user/.local/lib/python3.7/site-packages/ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(-100, 100 + 1) instead\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, { "data": { "text/plain": [ - "array([[-49, 30],\n", - " [-72, 67],\n", - " [-19, 37],\n", - " ..., \n", - " [ 51, 68],\n", - " [ 18, -98],\n", - " [ 35, -65]])" + "array([[-35, -99],\n", + " [ 46, -79],\n", + " [-42, -4],\n", + " ...,\n", + " [-15, 66],\n", + " [-79, -33],\n", + " [-61, 50]])" ] }, "execution_count": 3, @@ -86,9 +88,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "target_model = [4.,-1.]\n", @@ -105,36 +105,28 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/site-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", - " if self._edgecolors == str('face'):\n" - ] - }, { "data": { - "image/png": "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\n8P09AAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -153,113 +145,111 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 2.42065006, -1.51408433],\n", - " [-4.65413701, -4.75333564],\n", - " [-0.19447508, 3.05241949],\n", - " [-2.48775025, 2.85338914],\n", - " [ 2.1362176 , 1.08304026],\n", - " [ 2.00429234, 3.42847837],\n", - " [ 0.88481654, 3.8669342 ],\n", - " [ 4.44211929, -3.83888206],\n", - " [-3.66822357, -4.28716487],\n", - " [-3.91824496, 3.06436092],\n", - " [-0.3920509 , 0.5227957 ],\n", - " [-0.94013027, 0.46786464],\n", - " [-4.57795069, 1.779259 ],\n", - " [ 0.36808181, -0.5344856 ],\n", - " [-4.93262404, -1.90698095],\n", - " [-0.33777705, -1.63020961],\n", - " [ 4.47799157, -1.31602341],\n", - " [-2.65965489, -3.18664523],\n", - " [ 3.1002499 , 3.88230724],\n", - " [ 1.2543389 , -3.92972403],\n", - " [-2.08471236, 0.19273355],\n", - " [ 4.04972983, -1.80477782],\n", - " [-3.04213845, -3.86273346],\n", - " [ 3.23897921, 2.35710368],\n", - " [ 0.82709134, 1.97296822],\n", - " [-2.41348448, 3.52387581],\n", - " [ 3.272664 , -4.01131236],\n", - " [-2.78192199, 1.20800436],\n", - " [ 2.15143713, 0.46205732],\n", - " [-0.27395696, -3.71015376],\n", - " [-3.49595585, 3.35236591],\n", - " [ 3.87269394, -2.38906937],\n", - " [ 3.54731272, 3.61539208],\n", - " [-4.24188741, 2.32108886],\n", - " [ 0.64768018, 2.67719383],\n", - " [-1.46035943, 3.40867468],\n", - " [ 2.09576921, 3.21825488],\n", - " [-2.61612374, -0.37691585],\n", - " [-3.44960902, -4.20342928],\n", - " [-4.74685223, 3.45572264],\n", - " [ 0.47240822, -4.01583302],\n", - " [ 2.999604 , 4.75639895],\n", - " [ 4.92750221, 1.78622421],\n", - " [-4.77167292, -2.26895667],\n", - " [ 4.33833673, 3.21539957],\n", - " [ 4.30829825, 1.92057033],\n", - " [ 1.14997347, -0.40697769],\n", - " [-0.52503915, -2.00002841],\n", - " [-0.80040233, 1.70290673],\n", - " [-2.97302617, -2.98759477],\n", - " [ 3.38727939, -4.75730242],\n", - " [ 4.30885635, -2.52883579],\n", - " [-3.23360834, 2.7252995 ],\n", - " [-4.98056317, -3.07687503],\n", - " [-0.62752698, -1.84668032],\n", - " [-4.46693483, 2.39512863],\n", - " [-4.53139418, 4.8182652 ],\n", - " [ 2.90990641, -0.81200988],\n", - " [ 0.81473891, -0.51190201],\n", - " [-1.70213346, 1.50323875],\n", - " [-3.42105141, -2.30779652],\n", - " [ 2.17377044, 3.57951352],\n", - " [ 2.46715515, -2.61123393],\n", - " [ 2.6401855 , -3.66495187],\n", - " [-3.62372777, 1.95002019],\n", - " [ 1.57178844, -1.57386143],\n", - " [ 0.97628317, -3.22374322],\n", - " [-2.62901857, -2.3521806 ],\n", - " [-2.07241213, -0.06618532],\n", - " [-1.35874934, 3.67684431],\n", - " [ 0.72182233, 1.16568076],\n", - " [ 4.18505486, -3.53601869],\n", - " [-1.37070263, -0.16277551],\n", - " [ 0.08486058, -2.78638763],\n", - " [ 2.32323512, 4.79326219],\n", - " [-3.17893632, -1.62899238],\n", - " [-0.16249256, -1.38160519],\n", - " [ 1.63573918, -2.67334439],\n", - " [ 3.89370811, 4.07947346],\n", - " [ 1.54299994, 2.40618785],\n", - " [-1.30578765, 1.82646402],\n", - " [ 2.61456717, -0.23854833],\n", - " [ 1.32655801, -1.09311069],\n", - " [-3.64407544, 4.17780474],\n", - " [-0.48365564, -0.31774477],\n", - " [-1.57456997, -2.64578667],\n", - " [-4.49431739, -4.50338848],\n", - " [ 1.21613128, -4.34637332],\n", - " [ 4.31502574, 0.22312125],\n", - " [ 0.85531139, 1.77814044],\n", - " [ 1.36949581, -1.56175179],\n", - " [ 0.07691984, 3.0667515 ],\n", - " [ 1.38754742, -3.26294532],\n", - " [-3.14312877, -3.88441664],\n", - " [ 3.08398027, -0.02962741],\n", - " [ 1.68912828, 2.02588202],\n", - " [-1.69812072, 4.41390119],\n", - " [ 4.47082376, -3.15265638],\n", - " [ 2.23288076, -3.36156815],\n", - " [-4.44213493, 3.2528898 ]])" + "array([[-2.39430024, 4.82135902],\n", + " [ 1.05475945, 0.56506096],\n", + " [ 4.33381523, -2.79295785],\n", + " [ 1.40967652, 0.23582632],\n", + " [-1.86874245, -1.94575582],\n", + " [ 3.49504802, 4.46631455],\n", + " [ 3.73910681, -1.20697797],\n", + " [-0.03709135, -2.10326967],\n", + " [ 3.45305859, -4.34793504],\n", + " [ 3.03208277, 3.74285745],\n", + " [ 1.5465798 , 3.50062332],\n", + " [ 2.2422928 , 1.0046194 ],\n", + " [ 3.03217811, -0.82377688],\n", + " [-4.53947789, 3.70865422],\n", + " [-3.25118429, -1.72249205],\n", + " [ 2.26245853, -4.28364219],\n", + " [ 4.94378489, 4.28009147],\n", + " [-4.69232032, -0.58696177],\n", + " [-4.89189465, 0.39817474],\n", + " [ 3.76075994, 0.31297542],\n", + " [-3.16975246, 4.25281293],\n", + " [ 1.17872066, -1.09249838],\n", + " [-1.95646119, 2.20465081],\n", + " [ 4.27728295, 1.53512327],\n", + " [ 0.05835676, 1.70723529],\n", + " [ 2.60309217, -0.45217353],\n", + " [-0.17392586, -0.27012307],\n", + " [-2.05830803, -2.06266253],\n", + " [ 3.9529746 , 3.42138605],\n", + " [-3.79939733, -0.21979507],\n", + " [-2.29925996, -3.34504866],\n", + " [ 2.82327177, 3.36741078],\n", + " [-4.36398037, 4.90756469],\n", + " [ 0.42676851, -0.06020275],\n", + " [ 3.17293673, 4.77796787],\n", + " [-2.94774218, 3.9356928 ],\n", + " [ 2.59485714, -4.80307843],\n", + " [ 2.36994981, -0.95851792],\n", + " [ 4.88820476, -1.35503075],\n", + " [ 0.94150698, 3.12143851],\n", + " [ 0.33869197, -4.67364091],\n", + " [-2.72092697, -0.16985042],\n", + " [-1.95475038, 4.82283169],\n", + " [ 2.45764492, 4.77215002],\n", + " [ 0.05377156, -2.35640137],\n", + " [ 4.35117408, 1.90279533],\n", + " [ 4.51945998, -3.4003176 ],\n", + " [ 1.8446393 , -3.17348665],\n", + " [-3.39891706, -4.60282665],\n", + " [-2.73001814, -2.3755611 ],\n", + " [ 3.70599397, -4.46493656],\n", + " [ 2.21630505, 4.14085098],\n", + " [-3.41340833, 3.44627966],\n", + " [-4.60977981, 3.96608819],\n", + " [-3.12045006, -2.6109695 ],\n", + " [-1.09736041, -1.80670439],\n", + " [-0.01733633, -1.72932242],\n", + " [-3.8893666 , -0.23795606],\n", + " [ 4.32262985, -2.60558145],\n", + " [-4.94835985, 4.9499789 ],\n", + " [ 4.83372946, 3.18143365],\n", + " [-2.97234861, 3.43734029],\n", + " [ 4.13213153, -4.01988738],\n", + " [ 2.50430662, -3.55060295],\n", + " [-1.13021843, -2.66490227],\n", + " [-3.52868187, 3.08060977],\n", + " [-4.60059847, 0.07549374],\n", + " [ 3.02082047, 4.1033937 ],\n", + " [ 3.17455034, -3.3296469 ],\n", + " [ 1.5874334 , -3.8626682 ],\n", + " [-4.83005533, 1.64085882],\n", + " [-3.67705824, -3.7420375 ],\n", + " [ 3.37141151, 4.31804914],\n", + " [-2.32695571, -1.65021845],\n", + " [-4.93262416, 0.30335477],\n", + " [ 3.09178415, -3.5606033 ],\n", + " [-0.99362255, 4.12845851],\n", + " [-4.93026694, 2.8832776 ],\n", + " [ 4.76078721, 4.52391074],\n", + " [-4.02330413, -3.919773 ],\n", + " [-1.2605584 , 2.07658856],\n", + " [ 4.76819758, -1.74330259],\n", + " [-3.27001856, 0.52159983],\n", + " [ 4.28932043, -3.4243422 ],\n", + " [-0.29372312, -1.51538405],\n", + " [ 2.46437149, -3.73790856],\n", + " [ 3.25584766, 4.32526613],\n", + " [ 4.41084634, -2.65951582],\n", + " [ 2.05089111, -2.77049322],\n", + " [-4.64295989, 1.17909785],\n", + " [ 0.73985808, 1.09177819],\n", + " [-3.08619219, -2.23259432],\n", + " [-2.21523998, -4.29746264],\n", + " [ 2.93142476, -3.074807 ],\n", + " [-2.23827727, 4.12204265],\n", + " [-2.88171529, -0.87372322],\n", + " [ 1.48659654, 3.79868869],\n", + " [-2.57574569, 3.29476101],\n", + " [-2.86541983, 4.08032984],\n", + " [-0.36862476, 3.67346937]])" ] }, "execution_count": 6, @@ -297,9 +287,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } @@ -307,21 +295,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [aaaid]", + "display_name": "Python 3", "language": "python", - "name": "Python [aaaid]" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.7.7" } }, "nbformat": 4, diff --git a/anno3/apprendimento_automatico/esercizi/1/ex1.org b/anno3/apprendimento_automatico/esercizi/1/ex1.org new file mode 100644 index 0000000..2400777 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/1/ex1.org @@ -0,0 +1,21 @@ +Modify the given Jupyter notebook on decision trees on Iris data and +perform the following tasks: + +1. get an artificial inflation of some class in the training set by + a given factor: 10 (weigh more the classes virginica e versicolor + which are more difficult to discriminate). Learn the tree in these + conditions. +2. modify the weight of some classes (set to 10 the weights for + misclassification between virginica into versicolor and vice versa) + and learn the tree in these conditions. You should obtain similar + results as for step 1. +3. learn trees but avoid overfitting (by improving the error on the + test set) tuning the parameters on: the minimum number of samples + per leaf, max depth of the tree, min_impurity_decrease parameters, + max leaf nodes, etc. +4. build the confusion matrix of the created tree models on the + test set and show them. +5. build the ROC curves (or coverage curves in coverage space) and + plot them for each tree model you have created: for each model you + have to build three curves, one for each class, considered in turn + as the positive class. diff --git a/anno3/apprendimento_automatico/esercizi/4/least_squares.ipynb b/anno3/apprendimento_automatico/esercizi/4/least_squares.ipynb new file mode 100644 index 0000000..a23b382 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/4/least_squares.ipynb @@ -0,0 +1,258 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experimenting with least squares and its variants" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from sklearn import datasets\n", + "from scipy.optimize import fmin_bfgs\n", + "import numpy as np\n", + "from numpy.linalg import norm\n", + "from numpy.linalg import inv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data preparation" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 6.32000000e-03, 1.80000000e+01, 2.31000000e+00, ...,\n", + " 1.53000000e+01, 3.96900000e+02, 4.98000000e+00],\n", + " [ 2.73100000e-02, 0.00000000e+00, 7.07000000e+00, ...,\n", + " 1.78000000e+01, 3.96900000e+02, 9.14000000e+00],\n", + " [ 2.72900000e-02, 0.00000000e+00, 7.07000000e+00, ...,\n", + " 1.78000000e+01, 3.92830000e+02, 4.03000000e+00],\n", + " ..., \n", + " [ 6.07600000e-02, 0.00000000e+00, 1.19300000e+01, ...,\n", + " 2.10000000e+01, 3.96900000e+02, 5.64000000e+00],\n", + " [ 1.09590000e-01, 0.00000000e+00, 1.19300000e+01, ...,\n", + " 2.10000000e+01, 3.93450000e+02, 6.48000000e+00],\n", + " [ 4.74100000e-02, 0.00000000e+00, 1.19300000e+01, ...,\n", + " 2.10000000e+01, 3.96900000e+02, 7.88000000e+00]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boston = datasets.load_boston()\n", + "data = np.array(boston.data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The boston dataset is one of the standard regression problems used to experiment with learning algorithms. Below you can find the dataset description" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Boston House Prices dataset\n", + "\n", + "Notes\n", + "------\n", + "Data Set Characteristics: \n", + "\n", + " :Number of Instances: 506 \n", + "\n", + " :Number of Attributes: 13 numeric/categorical predictive\n", + " \n", + " :Median Value (attribute 14) is usually the target\n", + "\n", + " :Attribute Information (in order):\n", + " - CRIM per capita crime rate by town\n", + " - ZN proportion of residential land zoned for lots over 25,000 sq.ft.\n", + " - INDUS proportion of non-retail business acres per town\n", + " - CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", + " - NOX nitric oxides concentration (parts per 10 million)\n", + " - RM average number of rooms per dwelling\n", + " - AGE proportion of owner-occupied units built prior to 1940\n", + " - DIS weighted distances to five Boston employment centres\n", + " - RAD index of accessibility to radial highways\n", + " - TAX full-value property-tax rate per $10,000\n", + " - PTRATIO pupil-teacher ratio by town\n", + " - B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n", + " - LSTAT % lower status of the population\n", + " - MEDV Median value of owner-occupied homes in $1000's\n", + "\n", + " :Missing Attribute Values: None\n", + "\n", + " :Creator: Harrison, D. and Rubinfeld, D.L.\n", + "\n", + "This is a copy of UCI ML housing dataset.\n", + "http://archive.ics.uci.edu/ml/datasets/Housing\n", + "\n", + "\n", + "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n", + "\n", + "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n", + "prices and the demand for clean air', J. Environ. Economics & Management,\n", + "vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n", + "...', Wiley, 1980. N.B. Various transformations are used in the table on\n", + "pages 244-261 of the latter.\n", + "\n", + "The Boston house-price data has been used in many machine learning papers that address regression\n", + "problems. \n", + " \n", + "**References**\n", + "\n", + " - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n", + " - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", + " - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)\n", + "\n" + ] + } + ], + "source": [ + "print(boston.DESCR)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First step to apply the formulae we learnt during the lectures is to rewrite the dataset in homogeneous coordinates (i.e., we append a column of 1 to the matrix containing the examples):" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "t = np.ones(len(data)).reshape(len(data),1)\n", + "data = np.append(data, t, 1)\n", + "target = np.array(boston.target)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now divide the data into a training set $X$ and a test set $X_\\textrm{test}$." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X,y = data[0:400,:], target[0:400]\n", + "X_test, y_test = data[400:,:], target[400:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Calculate the least square solution (to the regression problem outlined above) and evaluate its performances on the training set and on the test set.\n", + "1. Calculate the ridge regression solution (set lambda to 0.01) and evaluate its performances on the training set and on test set.\n", + "1. Calculate the lasso regression solution and evaluate its performances on the training set and on the test set." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Notes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Here it follows a list of functions you may want to use (the required packages are already imported at the beginning of this notebook) along with a very brief explanation of their purpose (`help(nomefun)` will provide you more information about function `nomefun`):\n", + " - `transpose`: matrix transposition (e.g., `transpose(X)`)\n", + " - `dot`: matrix multiplication (e.g., `X.dot(X2)`) \n", + " - `inv`: matrix inversion (e.g., `inv(X)`)\n", + "- to solve the lasso problem you will need to perform a numerical minimization of the associated loss function (as you know, a closed form solution does not exist). There are many numerical optimization algorithms available in the scipy package. My suggestion is to use `fmin_bfgs`. Here it follows an example of how to use it:\n", + " ```python\n", + " def f(w):\n", + " return w[0]**2 + w[1]**2 + w[0] + w[1]\n", + " \n", + " w = fmin_bfgs(f, [0,0])\n", + " ```\n", + " note that the function may (and should) reference your data variables (i.e., $X$ and $y$).\n", + "- to evaluate the performances of your solutions use the $S$ statistic:\n", + " $$\n", + " S = \\sqrt{ \\frac{1}{n} \\sum_{i=1}^n (y_i' - y_i)^2 }\n", + " $$\n", + " where $y'_i$ is your model prediction for the i-th example, and $n$ is the number of examples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/4/svm.ipynb b/anno3/apprendimento_automatico/esercizi/4/svm.ipynb new file mode 100644 index 0000000..d00b7ae --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/4/svm.ipynb @@ -0,0 +1,209 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Support Vector Machines" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.svm import SVC" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "X = np.array([[ 0.46613554, 0.92048757],\n", + " [-0.92129195, 0.06723639],\n", + " [-0.15836636, 0.00430243],\n", + " [-0.24055905, -0.87032292],\n", + " [ 0.06245105, -0.53698416],\n", + " [-0.2265037 , -0.43835751],\n", + " [-0.00480479, -0.17372081],\n", + " [-0.1525277 , -0.34399658],\n", + " [-0.27360329, 0.35339202],\n", + " [-0.77464508, -0.48715511],\n", + " [-0.58724291, 0.74419972],\n", + " [-0.97596949, -0.72172963],\n", + " [ 0.42376225, -0.72655597],\n", + " [ 0.96383922, -0.23371331],\n", + " [ 0.16264643, -0.46949742],\n", + " [-0.74294705, -0.42576417],\n", + " [ 0.05089437, -0.20522071],\n", + " [-0.19442744, 0.09617478],\n", + " [-0.97102743, 0.79663992],\n", + " [ 0.0596995 , -0.70129219],\n", + " [-0.83934851, -0.95616033],\n", + " [-0.38249705, 0.4973605 ],\n", + " [ 0.3474666 , 0.70664397],\n", + " [ 0.35871444, 0.88679345],\n", + " [-0.05914582, 0.23124686],\n", + " [-0.52156643, 0.32986941],\n", + " [-0.53579646, 0.67530208],\n", + " [ 0.13683914, -0.96158184],\n", + " [ 0.65904541, -0.12015303],\n", + " [-0.69078363, 0.5615536 ],\n", + " [ 0.47738323, -0.70919275],\n", + " [ 0.93069669, 0.44019132],\n", + " [ 0.19750088, -0.68869404],\n", + " [-0.75048675, -0.18170522],\n", + " [-0.45288395, -0.25894991],\n", + " [-0.74644547, 0.87781953],\n", + " [ 0.14620452, 0.56864508],\n", + " [ 0.25719272, -0.58405476],\n", + " [ 0.87149524, 0.01384224],\n", + " [-0.71473576, 0.31568314],\n", + " [-0.252637 , -0.67418371],\n", + " [ 0.24718308, 0.95191416],\n", + " [-0.38149953, -0.64066291],\n", + " [-0.23112698, 0.04678807],\n", + " [ 0.72631766, 0.7390158 ],\n", + " [-0.91748062, -0.15131021],\n", + " [ 0.74957917, 0.66966866],\n", + " [ 0.76771849, 0.06662777],\n", + " [-0.04233756, -0.91320835],\n", + " [ 0.63840333, 0.06277738],\n", + " [-0.78887281, -0.90311183],\n", + " [-0.73099834, -0.69587363],\n", + " [-0.50947652, -0.99144951],\n", + " [ 0.14294609, 0.5474932 ],\n", + " [ 0.4367906 , 0.31953258],\n", + " [-0.13970851, 0.81817884],\n", + " [ 0.6440873 , 0.79118775],\n", + " [ 0.41714043, -0.66672029],\n", + " [ 0.59283022, -0.71836746],\n", + " [ 0.55379696, 0.98846202],\n", + " [-0.91819517, 0.34203895],\n", + " [ 0.02020188, 0.83696694],\n", + " [ 0.6182918 , 0.04254014],\n", + " [-0.09354765, -0.30050483],\n", + " [-0.08489545, 0.06431463],\n", + " [-0.11886358, -0.68738895],\n", + " [ 0.44428375, 0.18273761],\n", + " [ 0.26486362, -0.98398013],\n", + " [ 0.13222452, 0.91495035],\n", + " [-0.11101656, 0.00541343],\n", + " [-0.07696178, -0.92720555],\n", + " [ 0.22602214, 0.56040092],\n", + " [ 0.74227542, 0.32930104],\n", + " [ 0.43524657, 0.35332933],\n", + " [-0.89277607, -0.59996171],\n", + " [-0.94836212, 0.78777302],\n", + " [ 0.1783319 , -0.2142071 ],\n", + " [-0.07832238, -0.25046584],\n", + " [ 0.17611799, -0.96927832],\n", + " [-0.95938454, -0.26504646],\n", + " [ 0.58666766, -0.94620881],\n", + " [-0.77336565, 0.46735057],\n", + " [-0.94414054, 0.39044333],\n", + " [ 0.61524645, 0.15907662],\n", + " [-0.09855302, 0.9816656 ],\n", + " [ 0.53937097, 0.34487634]])" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "y = [\"red\" if x + y > 0.3 else \"green\" for [x,y] in X]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n7MNCppGOpEC65JJLeO2115gwYQLp6enExBTOri4xMTFYx7pzXmTsA3LK7UMQHZ35v5CEW/Pmzflx\n049MnjyZzZs3Ex8fT+/evQHo2q0rX07/8td1L69xOR++/yEeT9bfkzp27Ij/fj+sAhoFFjpgVhji\na8dToUKFMJ9N6Blj1EdCIs7ktNnWGFMWuCib1bZYa9MybNMHeDG7uzmMMVWBTUA9a+3qDMsXAyut\ntUOy2KYBsKJVq1a/uQ2sZ8+e9OzZM5tQRX7r559/5oorrsDf2A+dcNvuUsE7xUuHRh2YO2dupEOU\nDKy1fPnll3z//fdcdtlltGvXDq83c0/gs/Xt25dJkydh6hhsWYt3oxe7y/LB+x/QuXPnfIpcJP/M\nmDGDGTNmnLXs0KFDLFmyBKChtXZlsMfIcTKRp53nPJkwwHZghLX2hcCykriXOW611r6ZxTYNgBUr\nVqygQYMGmV8WybORI0cyZMgQfBf5cEo7mG2GMheV4fOln4ftrgXJP47jMHbsWMa+MpadO3fSJKEJ\nD/3fQ7Ro0SLSoYnkm5UrV9KwYUMoyMmEMaYKbitGN+ABoCXuJYuN1tqjgXWSgX9aa2cFng8F/gnc\nCmwFhgFXAnWstaeyOIaSCQmbr7/+mokTJ7Jnzx4SEhLo378/ZcuWjXRYIiIhEepkIlwjYD6Je2sn\nuDdwrQr8bovb3x8gHnd0Ancla/9tjCkBvII7aNVS4OqsEgmRcGvcuDGNGzeOdBgiIoVCWJIJa20f\noE826/ymh5S19nHg8XDEJCIiIuFRUG4NFRERkUJKyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgE\nRcmEiIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARF\nyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJ\nhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgERcmE\niIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARFyYSIiIgERcmEiIiIBEXJhIiIiARFyYSI\niIgERcmEiIiIBEXJhIiIiARFyUQRM2PGjEiHUCip3HJPZZY3KrfcU5lFXliSCWPMw8aYL4wxx4wx\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X[:,0], X[:,1], c=y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise\n", + "\n", + "- import the support vector machine classifier from scikit-learn (the SVC class) and train a classifier for the examples above using a linear kernel;\n", + "- read the documentation to find out how to obtain the support vectors and the associated (dual) weights; use this information to analyze the learnt model: \n", + " - how many support vectors have been learnt? \n", + " - are them in the position you would have expected [[1](#note1)]? \n", + " - is there any margin error?\n", + " - is there any classification error (check it using the classifier predictions)?\n", + "- learn a new SVC model using custom C values:\n", + " - how the answers to the questions above change when you use a very high C value (e.g., 1000)?\n", + " - how the answers to the questions above change when you use a very low C value (e.g., 0.3)?\n", + "- learn a new SVC model using a rbf kernel:\n", + " - is the new kernel able to capture the linear model?\n", + " - are you surprised by the above answer? Regarless to whether you are surprised or not: why?\n", + " \n", + "[1] If you make two plots one after the other (in the same cell), the plots will be merged into a single one. You may want to use this feature to plot the support vectors on top of the scatter plot for the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/classification_iris_aa_19_20-Copy1-checkpoint.ipynb b/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/classification_iris_aa_19_20-Copy1-checkpoint.ipynb new file mode 100644 index 0000000..9e5fe00 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/classification_iris_aa_19_20-Copy1-checkpoint.ipynb @@ -0,0 +1,893 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# # Classifiers introduction\n", + "\n", + "In the following program we introduce the basic steps of classification of a dataset in a matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the package for learning and modeling trees" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "from sklearn import tree " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define the matrix containing the data (one example per row)\n", + "and the vector containing the corresponding target value" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = [[0, 0, 0], [1, 1, 1], [0, 1, 0], [0, 0, 1], [1, 1, 0], [1, 0, 1]]\n", + "Y = [1, 0, 0, 0, 1, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Declare the classification model you want to use and then fit the model to the data" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "clf = tree.DecisionTreeClassifier()\n", + "clf = clf.fit(X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Predict the target value (and print it) for the passed data, using the fitted model currently in clf" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0]\n" + ] + } + ], + "source": [ + "print(clf.predict([[0, 1, 1]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0]\n" + ] + } + ], + "source": [ + "print(clf.predict([[1, 0, 1],[0, 0, 1]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "0\n", + "\n", + "X[1] <= 0.5\n", + "gini = 0.5\n", + "samples = 6\n", + "value = [3, 3]\n", + "\n", + "\n", + "1\n", + "\n", + "X[0] <= 0.5\n", + "gini = 0.444\n", + "samples = 3\n", + "value = [1, 2]\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "6\n", + "\n", + "X[2] <= 0.5\n", + "gini = 0.444\n", + "samples = 3\n", + "value = [2, 1]\n", + "\n", + "\n", + "0->6\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "2\n", + "\n", + "X[2] <= 0.5\n", + "gini = 0.5\n", + "samples = 2\n", + "value = [1, 1]\n", + "\n", + "\n", + "1->2\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "1->5\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "2->3\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "2->4\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "X[0] <= 0.5\n", + "gini = 0.5\n", + "samples = 2\n", + "value = [1, 1]\n", + "\n", + "\n", + "6->7\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "6->10\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "7->8\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "7->9\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import graphviz \n", + "dot_data = tree.export_graphviz(clf, out_file=None) \n", + "graph = graphviz.Source(dot_data) \n", + "graph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the following we start using a dataset (from UCI Machine Learning repository)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_iris\n", + "iris = load_iris()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Declare the type of prediction model and the working criteria for the model induction algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "clf = tree.DecisionTreeClassifier(criterion=\"entropy\",\n", + " random_state=300,\n", + " min_samples_leaf=5,\n", + " class_weight={0:1,1:10,2:10}) # setosa, versicolor, verginica" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Split the dataset in training and test set" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a random permutation of the indices of examples that will be later used \n", + "# for the training and the test set\n", + "import numpy as np\n", + "np.random.seed(0)\n", + "indices = np.random.permutation(len(iris.data))\n", + "\n", + "# We now decide to keep the last 10 indices for test set, the remaining for the training set\n", + "indices_training=indices[:-10]\n", + "indices_test=indices[-10:]\n", + "\n", + "iris_X_train = iris.data[indices_training] # keep for training all the matrix elements with the exception of the last 10 \n", + "iris_y_train = iris.target[indices_training]\n", + "iris_X_test = iris.data[indices_test] # keep the last 10 elements for test set\n", + "iris_y_test = iris.target[indices_test]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fit the learning model on training set" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# fit the model to the training data\n", + "clf = clf.fit(iris_X_train, iris_y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Obtain predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predictions:\n", + "[1 2 1 0 0 0 2 1 2 0]\n", + "True classes:\n", + "[1 1 1 0 0 0 2 1 2 0]\n", + "['setosa' 'versicolor' 'virginica']\n" + ] + } + ], + "source": [ + "# apply fitted model \"clf\" to the test set \n", + "predicted_y_test = clf.predict(iris_X_test)\n", + "\n", + "# print the predictions (class numbers associated to classes names in target names)\n", + "print(\"Predictions:\")\n", + "print(predicted_y_test)\n", + "print(\"True classes:\")\n", + "print(iris_y_test) \n", + "print(iris.target_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Print the index of the test instances and the corresponding predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Instance # 88: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 70: \n", + "Predicted: virginica\t True: versicolor\n", + "\n", + "Instance # 87: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 36: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 21: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 9: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 103: \n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # 67: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 117: \n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # 47: \n", + "Predicted: setosa\t True: setosa\n", + "\n" + ] + } + ], + "source": [ + "# print the corresponding instances indexes and class names \n", + "for i in range(len(iris_y_test)): \n", + " print(\"Instance # \"+str(indices_test[i])+\": \")\n", + " print(\"Predicted: \"+iris.target_names[predicted_y_test[i]]+\"\\t True: \"+iris.target_names[iris_y_test[i]]+\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Look at the specific examples" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.6, sepal width (cm)=3.0, petal length (cm)=4.1, petal width (cm)=1.3\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.9, sepal width (cm)=3.2, petal length (cm)=4.8, petal width (cm)=1.8\n", + "Predicted: virginica\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=6.3, sepal width (cm)=2.3, petal length (cm)=4.4, petal width (cm)=1.3\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.5, sepal width (cm)=3.5, petal length (cm)=1.3, petal width (cm)=0.2\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.1, sepal width (cm)=3.7, petal length (cm)=1.5, petal width (cm)=0.4\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=4.9, sepal width (cm)=3.1, petal length (cm)=1.5, petal width (cm)=0.1\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=6.3, sepal width (cm)=2.9, petal length (cm)=5.6, petal width (cm)=1.8\n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.8, sepal width (cm)=2.7, petal length (cm)=4.1, petal width (cm)=1.0\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=7.7, sepal width (cm)=3.8, petal length (cm)=6.7, petal width (cm)=2.2\n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=4.6, sepal width (cm)=3.2, petal length (cm)=1.4, petal width (cm)=0.2\n", + "Predicted: setosa\t True: setosa\n", + "\n" + ] + } + ], + "source": [ + "for i in range(len(iris_y_test)): \n", + " print(\"Instance # \"+str(indices_test)+\": \")\n", + " s=\"\"\n", + " for j in range(len(iris.feature_names)):\n", + " s=s+iris.feature_names[j]+\"=\"+str(iris_X_test[i][j])\n", + " if (j\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "0\n", + "\n", + "petal length (cm) ≤ 2.45\n", + "entropy = 1.585\n", + "samples = 150\n", + "value = [50, 50, 50]\n", + "class = setosa\n", + "\n", + "\n", + "1\n", + "\n", + "entropy = 0.0\n", + "samples = 50\n", + "value = [50, 0, 0]\n", + "class = setosa\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "2\n", + "\n", + "petal width (cm) ≤ 1.75\n", + "entropy = 1.0\n", + "samples = 100\n", + "value = [0, 50, 50]\n", + "class = versicolor\n", + "\n", + "\n", + "0->2\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "3\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.445\n", + "samples = 54\n", + "value = [0, 49, 5]\n", + "class = versicolor\n", + "\n", + "\n", + "2->3\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.151\n", + "samples = 46\n", + "value = [0, 1, 45]\n", + "class = virginica\n", + "\n", + "\n", + "2->8\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "sepal length (cm) ≤ 5.15\n", + "entropy = 0.146\n", + "samples = 48\n", + "value = [0, 47, 1]\n", + "class = versicolor\n", + "\n", + "\n", + "3->4\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "entropy = 0.918\n", + "samples = 6\n", + "value = [0, 2, 4]\n", + "class = virginica\n", + "\n", + "\n", + "3->7\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "entropy = 0.722\n", + "samples = 5\n", + "value = [0, 4, 1]\n", + "class = versicolor\n", + "\n", + "\n", + "4->5\n", + "\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "entropy = 0.0\n", + "samples = 43\n", + "value = [0, 43, 0]\n", + "class = versicolor\n", + "\n", + "\n", + "4->6\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "entropy = 0.65\n", + "samples = 6\n", + "value = [0, 1, 5]\n", + "class = virginica\n", + "\n", + "\n", + "8->9\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "entropy = 0.0\n", + "samples = 40\n", + "value = [0, 0, 40]\n", + "class = virginica\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_data = tree.export_graphviz(clf, out_file=None, \n", + " feature_names=iris.feature_names, \n", + " class_names=iris.target_names, \n", + " filled=True, rounded=True, \n", + " special_characters=True) \n", + "graph = graphviz.Source(dot_data) \n", + "graph" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/classification_iris_aa_19_20-checkpoint.ipynb b/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/classification_iris_aa_19_20-checkpoint.ipynb new file mode 100644 index 0000000..3c02915 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/classification_iris_aa_19_20-checkpoint.ipynb @@ -0,0 +1,893 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# # Classifiers introduction\n", + "\n", + "In the following program we introduce the basic steps of classification of a dataset in a matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the package for learning and modeling trees" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "from sklearn import tree " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define the matrix containing the data (one example per row)\n", + "and the vector containing the corresponding target value" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = [[0, 0, 0], [1, 1, 1], [0, 1, 0], [0, 0, 1], [1, 1, 0], [1, 0, 1]]\n", + "Y = [1, 0, 0, 0, 1, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Declare the classification model you want to use and then fit the model to the data" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "clf = tree.DecisionTreeClassifier()\n", + "clf = clf.fit(X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Predict the target value (and print it) for the passed data, using the fitted model currently in clf" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0]\n" + ] + } + ], + "source": [ + "print(clf.predict([[0, 1, 1]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0]\n" + ] + } + ], + "source": [ + "print(clf.predict([[1, 0, 1],[0, 0, 1]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "0\n", + "\n", + "X[1] <= 0.5\n", + "gini = 0.5\n", + "samples = 6\n", + "value = [3, 3]\n", + "\n", + "\n", + "1\n", + "\n", + "X[0] <= 0.5\n", + "gini = 0.444\n", + "samples = 3\n", + "value = [1, 2]\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "6\n", + "\n", + "X[2] <= 0.5\n", + "gini = 0.444\n", + "samples = 3\n", + "value = [2, 1]\n", + "\n", + "\n", + "0->6\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "2\n", + "\n", + "X[2] <= 0.5\n", + "gini = 0.5\n", + "samples = 2\n", + "value = [1, 1]\n", + "\n", + "\n", + "1->2\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "1->5\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "2->3\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "2->4\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "X[0] <= 0.5\n", + "gini = 0.5\n", + "samples = 2\n", + "value = [1, 1]\n", + "\n", + "\n", + "6->7\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "6->10\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "7->8\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "7->9\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import graphviz \n", + "dot_data = tree.export_graphviz(clf, out_file=None) \n", + "graph = graphviz.Source(dot_data) \n", + "graph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the following we start using a dataset (from UCI Machine Learning repository)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_iris\n", + "iris = load_iris()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Declare the type of prediction model and the working criteria for the model induction algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "clf = tree.DecisionTreeClassifier(criterion=\"entropy\",\n", + " random_state=300,\n", + " min_samples_leaf=5,\n", + " class_weight={0:1,1:10,2:10})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Split the dataset in training and test set" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a random permutation of the indices of examples that will be later used \n", + "# for the training and the test set\n", + "import numpy as np\n", + "np.random.seed(0)\n", + "indices = np.random.permutation(len(iris.data))\n", + "\n", + "# We now decide to keep the last 10 indices for test set, the remaining for the training set\n", + "indices_training=indices[:-10]\n", + "indices_test=indices[-10:]\n", + "\n", + "iris_X_train = iris.data[indices_training] # keep for training all the matrix elements with the exception of the last 10 \n", + "iris_y_train = iris.target[indices_training]\n", + "iris_X_test = iris.data[indices_test] # keep the last 10 elements for test set\n", + "iris_y_test = iris.target[indices_test]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fit the learning model on training set" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# fit the model to the training data\n", + "clf = clf.fit(iris_X_train, iris_y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Obtain predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predictions:\n", + "[1 2 1 0 0 0 2 1 2 0]\n", + "True classes:\n", + "[1 1 1 0 0 0 2 1 2 0]\n", + "['setosa' 'versicolor' 'virginica']\n" + ] + } + ], + "source": [ + "# apply fitted model \"clf\" to the test set \n", + "predicted_y_test = clf.predict(iris_X_test)\n", + "\n", + "# print the predictions (class numbers associated to classes names in target names)\n", + "print(\"Predictions:\")\n", + "print(predicted_y_test)\n", + "print(\"True classes:\")\n", + "print(iris_y_test) \n", + "print(iris.target_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Print the index of the test instances and the corresponding predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Instance # 88: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 70: \n", + "Predicted: virginica\t True: versicolor\n", + "\n", + "Instance # 87: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 36: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 21: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 9: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 103: \n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # 67: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 117: \n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # 47: \n", + "Predicted: setosa\t True: setosa\n", + "\n" + ] + } + ], + "source": [ + "# print the corresponding instances indexes and class names \n", + "for i in range(len(iris_y_test)): \n", + " print(\"Instance # \"+str(indices_test[i])+\": \")\n", + " print(\"Predicted: \"+iris.target_names[predicted_y_test[i]]+\"\\t True: \"+iris.target_names[iris_y_test[i]]+\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Look at the specific examples" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.6, sepal width (cm)=3.0, petal length (cm)=4.1, petal width (cm)=1.3\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.9, sepal width (cm)=3.2, petal length (cm)=4.8, petal width (cm)=1.8\n", + "Predicted: virginica\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=6.3, sepal width (cm)=2.3, petal length (cm)=4.4, petal width (cm)=1.3\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.5, sepal width (cm)=3.5, petal length (cm)=1.3, petal width (cm)=0.2\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.1, sepal width (cm)=3.7, petal length (cm)=1.5, petal width (cm)=0.4\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=4.9, sepal width (cm)=3.1, petal length (cm)=1.5, petal width (cm)=0.1\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=6.3, sepal width (cm)=2.9, petal length (cm)=5.6, petal width (cm)=1.8\n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.8, sepal width (cm)=2.7, petal length (cm)=4.1, petal width (cm)=1.0\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=7.7, sepal width (cm)=3.8, petal length (cm)=6.7, petal width (cm)=2.2\n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=4.6, sepal width (cm)=3.2, petal length (cm)=1.4, petal width (cm)=0.2\n", + "Predicted: setosa\t True: setosa\n", + "\n" + ] + } + ], + "source": [ + "for i in range(len(iris_y_test)): \n", + " print(\"Instance # \"+str(indices_test)+\": \")\n", + " s=\"\"\n", + " for j in range(len(iris.feature_names)):\n", + " s=s+iris.feature_names[j]+\"=\"+str(iris_X_test[i][j])\n", + " if (j\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "0\n", + "\n", + "petal length (cm) ≤ 2.45\n", + "entropy = 1.585\n", + "samples = 150\n", + "value = [50, 50, 50]\n", + "class = setosa\n", + "\n", + "\n", + "1\n", + "\n", + "entropy = 0.0\n", + "samples = 50\n", + "value = [50, 0, 0]\n", + "class = setosa\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "2\n", + "\n", + "petal width (cm) ≤ 1.75\n", + "entropy = 1.0\n", + "samples = 100\n", + "value = [0, 50, 50]\n", + "class = versicolor\n", + "\n", + "\n", + "0->2\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "3\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.445\n", + "samples = 54\n", + "value = [0, 49, 5]\n", + "class = versicolor\n", + "\n", + "\n", + "2->3\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.151\n", + "samples = 46\n", + "value = [0, 1, 45]\n", + "class = virginica\n", + "\n", + "\n", + "2->8\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "sepal length (cm) ≤ 5.15\n", + "entropy = 0.146\n", + "samples = 48\n", + "value = [0, 47, 1]\n", + "class = versicolor\n", + "\n", + "\n", + "3->4\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "entropy = 0.918\n", + "samples = 6\n", + "value = [0, 2, 4]\n", + "class = virginica\n", + "\n", + "\n", + "3->7\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "entropy = 0.722\n", + "samples = 5\n", + "value = [0, 4, 1]\n", + "class = versicolor\n", + "\n", + "\n", + "4->5\n", + "\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "entropy = 0.0\n", + "samples = 43\n", + "value = [0, 43, 0]\n", + "class = versicolor\n", + "\n", + "\n", + "4->6\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "entropy = 0.65\n", + "samples = 6\n", + "value = [0, 1, 5]\n", + "class = virginica\n", + "\n", + "\n", + "8->9\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "entropy = 0.0\n", + "samples = 40\n", + "value = [0, 0, 40]\n", + "class = virginica\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_data = tree.export_graphviz(clf, out_file=None, \n", + " feature_names=iris.feature_names, \n", + " class_names=iris.target_names, \n", + " filled=True, rounded=True, \n", + " special_characters=True) \n", + "graph = graphviz.Source(dot_data) \n", + "graph" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/one_vs_rest-checkpoint.ipynb b/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/one_vs_rest-checkpoint.ipynb new file mode 100644 index 0000000..51870d9 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/all_m/.ipynb_checkpoints/one_vs_rest-checkpoint.ipynb @@ -0,0 +1,224 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experiments with the one vs rest multiclass classification scheme" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from sklearn import datasets\n", + "from sklearn.multiclass import OneVsRestClassifier as OvR\n", + "from sklearn.svm import LinearSVC\n", + "import numpy as np\n", + "import copy\n", + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "digits = datasets.load_digits()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use the \"Optical Recognition of Handwritten Digits Data Set\" from UCI (included in scikit learn and already loaded on the previous line). Let us plot the first 10 images in the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for index, image in enumerate(digits.images[:10]):\n", + " plt.subplot(2, 5, index + 1)\n", + " plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us create a training set using the first 1000 images and a test set using the rest of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5.\n", + " 0. 0. 3. 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8.\n", + " 8. 0. 0. 5. 8. 0. 0. 9. 8. 0. 0. 4. 11. 0. 1.\n", + " 12. 7. 0. 0. 2. 14. 5. 10. 12. 0. 0. 0. 0. 6. 13.\n", + " 10. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "X,y = digits.data[0:1000], digits.target[0:1000]\n", + "X_test, y_test = digits.data[1000:], digits.target[1000:]\n", + "print(X[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "scikit-learn provide us with an One-Vs-Rest classifier that we already imported with name `OvR`. Let us use that classifier to fit the training set and to make predictions over the test set:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "binaryLearner = LinearSVC(random_state=0)\n", + "\n", + "oneVrestLearningAlgorithm = OvR(binaryLearner)\n", + "oneVrestLearningAlgorithm.fit(X,y)\n", + "predicted_labels = oneVrestLearningAlgorithm.predict(X_test)\n", + "\n", + "# n.b.: the above is equivalent to:\n", + "# predicted_labels = OvR(LinearSVC(random_state=0)).fit(X,y).predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print \"Accuracy: %s\" % (1.0 - np.count_nonzero(y_test - predicted_labels) / float(len(predicted_labels)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reimplement the OvR classifier by completing the methods in the following class [[1](#hint1)]:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class OneVsRestClassifier:\n", + " def __init__(self, learner):\n", + " #... to be done ...\n", + " return 1\n", + "\n", + " def fit(self, data, labels):\n", + " #... to be done ...\n", + "\n", + " return self\n", + "\n", + " def predict(self, data):\n", + " #... to be done ...\n", + " return 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculate the accuracy of your solution using the following code [[2](#hint2)]:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ovr = OneVsRestClassifier(LinearSVC(random_state=0))\n", + "predicted_labels = ovr.fit(X,y).predict(X_test)\n", + "print \"Accuracy: %s\" % (1.0-np.count_nonzero(predicted_labels-y_test)/float(len(y_test)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hint 1: Feel free to organize your code as you like (add as many methods as you believe are necessary).\n", + "\n", + "Hint 2: The scheme provided by scikit-learn is a little different from the one we have seen in the lessons. It is normal if your accuracy is not as good as the one obtained above (expect the accuracy to be between 0.8 and 0.9)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20-Copy1.ipynb b/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20-Copy1.ipynb new file mode 100644 index 0000000..c85fde8 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20-Copy1.ipynb @@ -0,0 +1,1203 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Classifiers introduction\n", + "\n", + "In the following program we introduce the basic steps of classification of a dataset in a matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the package for learning and modeling trees" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "from sklearn import tree\n", + "import pandas as pd\n", + "from sklearn.preprocessing import label_binarize\n", + "from sklearn.metrics import roc_curve\n", + "import matplotlib.pyplot as plt\n", + "from numpy import ravel" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define the matrix containing the data (one example per row)\n", + "and the vector containing the corresponding target value" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "X = [[0, 0, 0], [1, 1, 1], [0, 1, 0], [0, 0, 1], [1, 1, 0], [1, 0, 1]]\n", + "Y = [1, 0, 0, 0, 1, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Declare the classification model you want to use and then fit the model to the data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "clf = tree.DecisionTreeClassifier()\n", + "clf = clf.fit(X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Predict the target value (and print it) for the passed data, using the fitted model currently in clf" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0]\n" + ] + } + ], + "source": [ + "print(clf.predict([[0, 1, 1]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0]\n" + ] + } + ], + "source": [ + "print(clf.predict([[1, 0, 1],[0, 0, 1]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "X[1] <= 0.5\n", + "gini = 0.5\n", + "samples = 6\n", + "value = [3, 3]\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "X[0] <= 0.5\n", + "gini = 0.444\n", + "samples = 3\n", + "value = [1, 2]\n", + "\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "X[0] <= 0.5\n", + "gini = 0.444\n", + "samples = 3\n", + "value = [2, 1]\n", + "\n", + "\n", + "\n", + "0->6\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "X[2] <= 0.5\n", + "gini = 0.5\n", + "samples = 2\n", + "value = [1, 1]\n", + "\n", + "\n", + "\n", + "1->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "\n", + "1->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "\n", + "2->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "\n", + "2->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "\n", + "6->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "X[2] <= 0.5\n", + "gini = 0.5\n", + "samples = 2\n", + "value = [1, 1]\n", + "\n", + "\n", + "\n", + "6->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [0, 1]\n", + "\n", + "\n", + "\n", + "8->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "gini = 0.0\n", + "samples = 1\n", + "value = [1, 0]\n", + "\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import graphviz \n", + "dot_data = tree.export_graphviz(clf, out_file=None) \n", + "graph = graphviz.Source(dot_data) \n", + "graph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the following we start using a dataset (from UCI Machine Learning repository)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import load_iris\n", + "iris = load_iris()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Declare the type of prediction model and the working criteria for the model induction algorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "clf = tree.DecisionTreeClassifier(criterion=\"entropy\",\n", + " random_state=300,\n", + " min_samples_leaf=5,\n", + " max_depth=4,\n", + " min_impurity_decrease=0.1,\n", + " class_weight={0:1,1:10,2:10}) # setosa, versicolor, verginica" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Split the dataset in training and test set" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a random permutation of the indices of examples that will be later used \n", + "# for the training and the test set\n", + "import numpy as np\n", + "np.random.seed(0)\n", + "indices = np.random.permutation(len(iris.data))\n", + "\n", + "# We now decide to keep the last 10 indices for test set, the remaining for the training set\n", + "indices_training=indices[:-10]\n", + "indices_test=indices[-10:]\n", + "\n", + "# keep for training all the matrix elements with the exception of the last 10 \n", + "iris_y_train = iris.target[indices_training]\n", + "iris_X_train = iris.data[indices_training]\n", + "iris_X_test = iris.data[indices_test] # keep the last 10 elements for test set\n", + "iris_y_test = iris.target[indices_test]" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Inflating by 140 members.\n" + ] + } + ], + "source": [ + "# artificial inflation\n", + "inflate = len(iris_X_train/2)\n", + "print(\"Inflating by \"+str(inflate)+\" members.\")\n", + "count = 0\n", + "for i,y in enumerate(iris_y_train):\n", + " if count > inflate:\n", + " break\n", + " if y == 1 or y == 2:\n", + " np.append(iris_X_train, iris_X_train[i])\n", + " np.append(iris_y_train, y)\n", + " count += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fit the learning model on training set" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ranking features: [0. 0. 0.31436374 0.68563626]\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "petal width (cm) ≤ 1.75\n", + "entropy = 1.225\n", + "samples = 140\n", + "value = [46, 460, 480]\n", + "class = virginica\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "petal length (cm) ≤ 2.45\n", + "entropy = 0.836\n", + "samples = 97\n", + "value = [46, 460, 50]\n", + "class = versicolor\n", + "\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "entropy = 0.0\n", + "samples = 43\n", + "value = [0, 0, 430]\n", + "class = virginica\n", + "\n", + "\n", + "\n", + "0->6\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "entropy = 0.0\n", + "samples = 46\n", + "value = [46, 0, 0]\n", + "class = setosa\n", + "\n", + "\n", + "\n", + "1->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.463\n", + "samples = 51\n", + "value = [0, 460, 50]\n", + "class = versicolor\n", + "\n", + "\n", + "\n", + "1->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "entropy = 0.154\n", + "samples = 45\n", + "value = [0, 440, 10]\n", + "class = versicolor\n", + "\n", + "\n", + "\n", + "3->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "entropy = 0.918\n", + "samples = 6\n", + "value = [0, 20, 40]\n", + "class = virginica\n", + "\n", + "\n", + "\n", + "3->5\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# fit the model to the training data\n", + "clf = clf.fit(iris_X_train, iris_y_train)\n", + "\n", + "print(\"Ranking features: \"+str(clf.feature_importances_))\n", + "\n", + "# plot\n", + "dot_data = tree.export_graphviz(clf, out_file=None, \n", + " feature_names=iris.feature_names, \n", + " class_names=iris.target_names, \n", + " filled=True, rounded=True, \n", + " special_characters=True) \n", + "graph = graphviz.Source(dot_data) \n", + "graph\n", + "\n", + "#Instance # 70: \n", + "#sepal length (cm)=5.9,\n", + "#sepal width (cm)=3.2,\n", + "#petal length (cm)=4.8,\n", + "#petal width (cm)=1.8\n", + "#Predicted: virginica\t True: versicolor" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Obtain predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predictions:\n", + "[1 2 1 0 0 0 2 1 2 0]\n", + "True classes:\n", + "[1 1 1 0 0 0 2 1 2 0]\n", + "['setosa' 'versicolor' 'virginica']\n" + ] + } + ], + "source": [ + "# apply fitted model \"clf\" to the test set \n", + "predicted_y_test = clf.predict(iris_X_test)\n", + "\n", + "# print the predictions (class numbers associated to classes names in target names)\n", + "print(\"Predictions:\")\n", + "print(predicted_y_test)\n", + "print(\"True classes:\")\n", + "print(iris_y_test) \n", + "print(iris.target_names)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix:\n", + " 0 1 2\n", + "0 4 0 0\n", + "1 0 3 1\n", + "2 0 0 2\n" + ] + } + ], + "source": [ + "# confusion matrix\n", + "from sklearn.metrics import confusion_matrix\n", + "import pandas as pd\n", + "print(\"Confusion matrix:\")\n", + "print(pd.DataFrame(confusion_matrix(iris_y_test, predicted_y_test)))" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAdpklEQVR4nO3de5hcdZ3n8fcn3QmBXCB0QgskkCAJY+Q+PYC6arPgTGA1GXfQAddBvGV1l1l3dGFxdNGBnX3GccXLiqNxcbjMYgD3GW3HKLpqD8IDGBguknBrwiUXICEJIZ2Q+3f/OKehaKq7q9N1zqk69Xk9Tx5OVf3qnO+vO9Qnv9/vnFOKCMzMrHWNK7oAMzMrloPAzKzFOQjMzFqcg8DMrMU5CMzMWpyDwMysxTkIrCFJukjS7XXc33slrZbUL+mUeu23ynG6Ja3Jav9jIenbkv7bGN6/QlJ3vdta8RwEhqSnJL2cfkg+J+laSZMHtXmrpF9J2ippi6QfS5o/qM1USV+T9Ey6ryfSx9Mzrr9X0sdGaPY/gYsjYnJE3JdlPY0qIj4REVeO4f1vjojeere14jkIbMB7ImIycDJwCvDZgRckvQX4OfAj4AhgDvAAcIekY9I2E4BfAm8GFgBTgbcAG4HT8uvGkI4GVuzPGyW11bmWhiOpvegarDgOAnuNiHgOuJUkEAb8LXB9RHw9IrZGxKaI+DxwF/DFtM2FwFHAeyNiZUTsi4j1EXFlRCyrdixJIek/SVol6QVJX5ZU9e9kOiJZno5Glkt6a/r8XwNvB76ZjkK+Oeh9B0jqB9qAByQ9kT7/pnQk8WI6jbGw4j3XSvo7ScskbQPOrFLPoZL+XtI6SZsl/XCIui9LR0ZbJa2U9N6K146V9M9pn16QdFP6vCR9VdJ6SS9J+p2k46vtf9Cx/lTSPYOe+wtJPRX9+u/pdrekNZL+q6TngL+XdKCk69L+PCzp0spprnTkeHa6/UVJN0u6Pu3bCkldQ7Rtk/SXFT+HeyXNSl/7ejpl91L6/NtH6qfVn4PAXkPSTOAcoC99fBDwVuCWKs1vBt6Vbp8N/Cwi+kd5yPcCXcCpwCLgI1VqOhT4CfANoAO4CviJpI6I+BzwG16d9rm48r0RsTMd6QCcFBFvlDQe+DHJKOcw4M+B/yPpuIq3fgD4a2AKUG2t4gbgIJIR0GHAV4fo3xMkQXUw8FfAP0g6PH3tyrSGacBM4H+lz/8h8A5gXvq+95OMrJD0AUkPDnGsHwPHSZo7qB83DtH+DcChJKOlxcAXgNnAMSS/1w8O8b4BC4GlwCFAD/DNIdp9GrgAOJdkpPgRYHv62nKSf3QcmtZ5i6SJIxzX6sxBYAN+KGkrsBpYT/KhAMn/oOOAZ6u851lgYP6/Y4g2I/lSOsJ4BvgayQfGYP8GeDwiboiIPRHxfeAR4D37cTyAM4DJwN9ExK6I+BXwT4OO/aOIuCMd2eyofHP6QX4O8ImI2BwRuyPin6sdKCJuiYh16X5uAh7n1amy3SQfwkdExI6IuL3i+SnA7wGKiIcj4tl0fzdGxIlDHGs7yfTdBWmdc9N99Azxc9gHfCENy5dJAud/pH1aQxK8w7k9IpZFxF6SYDxpiHYfAz4fEY9G4oGI2JjW/A8RsTH9vX4FOAA4boj9WEYcBDbgjyNiCtBN8uEx8AG/meQD4/Aq7zkceCHd3jhEm5Gsrth+mmQNYrAj0tcY1PbI/TjewP5WR8S+Yfa3mqHNAjZFxOaRDiTpQkn3p1NQLwLH8+rP9lJAwG/TqZWPAKTB9E3gamC9pCWSptbYtxt5NdA+APwwDYhqNgwKuSN4bb+H+xkAPFexvR2YOMRawyySkdHrSPov6TTUlvTnczCv/nwsJw4Ce430X7bXkpxlQ0RsA+4E3lel+ftJFogB/h/wR5ImjfKQsyq2jwLWVWmzjuRfzgxqu3ag7FEecx0wa9B6ROX+RtrnauBQSYcMdxBJRwPfBS4GOiLiEOAhkg9/IuK5iPh4RBwB/HvgW5KOTV/7RkT8PjCfZIrokhr79gtghqSTSQJhqGkheH0fnyWZohowi/pYDbxx8JPpesClJH+PpqU/ny2kPx/Lj4PAqvka8C5JA0P9y4APpQu7UyRNSxcd30Iy7w3J1MBq4P9K+j1J4yR1pIuE5w5zrEvS/c0CPgXcVKXNMmBeOj/eLulPST4g/yl9/XmSee1a3U3yL9hLJY1Xcr77e0jmu0eUTtP8lOSDe1q6j3dUaTqJ5MN2A4CkD5OMCEgfvy9dk4Fk5BXAPkl/IOn0dC1jG7CDZFRWS227SdZzvkwyrfeLWt6Xuhn4bNqnI0kCrB7+N3ClpLnpQviJkjpIpr/2kPx82iVdTrKGYDlzENjrRMQG4Hrg8vTx7cAfAf+W5F+NT5OcYvqvIuLxtM1OkgXjR0g+fF4CfksyzL97mMP9CLgXuJ9kQfiaKvVsBN4NfIZkCupS4N0RMTAt9XXgvPRsl5HmtYmIXSQf/OeQTG19C7gwIh4Z6b0V/oxkLv8RkjWV/1zlOCuBr5CMqJ4HTgDuqGjyB8DdSs5q6gE+FRGrSD4Mv0sSDk+nff4ygKR/J2mk02BvJPld3BIRe0bRpyuANcCTJCO8HwA7R/H+oVxFEjI/J/l7cQ1wIMnZaT8DHiPp5w5Gno6yDMhfTGNFkRTA3IjoK7oWez1JnwTOj4h3Fl2LZcsjAjMDkrOhJL0tndY7jmQE9o9F12XZ89WEZjZgAvAdkivHXyRZM/lWoRVZLjw1ZGbW4jw1ZGbW4ppuamj69Okxe/bs3I63bds2Jk0a7anxzcP9a15l7hu4f/V27733vhARM6q91nRBMHv2bO65556RG9ZJb28v3d3duR0vb+5f8ypz38D9qzdJg6/Of4WnhszMWpyDwMysxTkIzMxanIPAzKzFOQjMzFqcg8DMrMU5CMzMWpyDwMysxTkIzMxanIPAzKzFOQjMzFqcg8DMrMU5CMzMWlxmQSDpe5LWS3poiNcl6RuS+iQ9KOnUrGoxM7OhZTkiuBZYMMzr5wBz0z+Lgb/LsBYzMxtCZt9HEBG3SZo9TJNFwPWRfFfmXZIOkXR4RDybVU1NbeUNsOmRuu92ztqn4fZf1H2/jaLM/Stz36D8/Zu9bjXQXXQZQLFfTHMksLri8Zr0udcFgaTFJKMGOjs76e3tzaM+APr7+3M9XjUHvfw0p628KJN9Hw3wXCa7bghl7l+Z+wbl799RtNPb+5GiywCa5BvKImIJsASgq6sr8vxWn4b4lqQV18FKYMbJMO+8uu561ZNPcsycOXXdZyMpc//K3Dcof/+eevKp4j9bUkUGwVpgVsXjmelzNtj6+5L/zjsPzvhcXXf9zI5ejjmju677bCRl7l+Z+wYt0r+ii0gVefpoD3BhevbQGcAWrw8MYSAIOn1ilZnVX2YjAknfJ1kJmS5pDfAFYDxARHwbWAacC/QB24EPZ1VLU4t9sP7+ZPuwU4qtxcxKKcuzhi4Y4fUA/mNWxy+NF1fBrpdg0huSP2ZmdeYrixvdwLSQRwNmlhEHQaN7JQi8PmBm2XAQNDqPCMwsYw6CRhYB6/8l2XYQmFlGHASNbNuzsH09HHAwHFzeC2vMrFgOgkZWOS0kFVuLmZWWg6CReX3AzHLgIGhkz3t9wMyy5yBoZD511Mxy4CBoVDs2w0tPQftEOPS4oqsxsxJzEDSqgdHA9BNhXFPcLdzMmpSDoFF5odjMcuIgaFS+9bSZ5cRB0Kg8IjCznDgIGtHu7ckX1asNpp9QdDVmVnIOgka04cHkC2k63pScNWRmliEHQSPy9QNmliMHQSPy+oCZ5chB0Ih862kzy5GDoNHs3Q0v/C7ZPuzkYmsxs5bgIGg0mx6GvbvgkDcm30NgZpYxB0Gj8R1HzSxnDoJG44ViM8uZg6DR+NRRM8uZg6CRxD7YcH+y7RGBmeXEQdBIXnwCdm2FSYfDpM6iqzGzFuEgaCReHzCzAjgIGolvPW1mBcg0CCQtkPSopD5Jl1V5/ShJv5Z0n6QHJZ2bZT0NzyMCMytAZkEgqQ24GjgHmA9cIGn+oGafB26OiFOA84FvZVVPw4vwNQRmVogsRwSnAX0RsSoidgFLgUWD2gQwNd0+GFiXYT2NrX8dvLwBDjgEps4uuhozayGKiGx2LJ0HLIiIj6WP/ww4PSIurmhzOPBzYBowCTg7Iu6tsq/FwGKAzs7O31+6dGkmNVfT39/P5MmTMz9Ox4t3csITf8nmKafwwLyrMj/egLz6V5Qy96/MfQP3r97OPPPMeyOiq9pr7blVUd0FwLUR8RVJbwFukHR8ROyrbBQRS4AlAF1dXdHd3Z1bgb29veRyvDt/A0/AtHln5nO8VG79K0iZ+1fmvoH7l6csp4bWArMqHs9Mn6v0UeBmgIi4E5gITM+wpsblW0+bWUGyDILlwFxJcyRNIFkM7hnU5hngLABJbyIJgg0Z1tS4fOqomRUksyCIiD3AxcCtwMMkZwetkHSFpIVps88AH5f0APB94KLIatGikb28CV56GtoPhGnHFV2NmbWYTNcIImIZsGzQc5dXbK8E3pZlDU1hYDQw40QY11ZsLWbWcnxlcSPwhWRmViAHQSPwrafNrEAOgkbgEYGZFchBULTd22DTI6A2mH580dWYWQtyEBRtw4NAQMd8aJ9YdDVm1oIcBEXz9QNmVjAHQdG8PmBmBXMQFM23njazgjkIirR3N2x8KNmecXKxtZhZy3IQFGnjSti7Cw45Fg6YOnJ7M7MMOAiK5DuOmlkDcBAUyQvFZtYAHARF8qmjZtYAHARFiX2w/v5k2yMCMyuQg6Aom/tgdz9MPgIOOqzoasyshTkIiuL1ATNrEA6CovjW02bWIBwERfGIwMwahIOgCBG+hsDMGoaDoAj9a+HlF2DiNJh6dNHVmFmLcxAUoXJaSCq2FjNreQ6CIgwEwQxPC5lZ8RwERRi49XSng8DMiucgKIJPHTWzBuIgyNvLG2HrM9B+EEybV3Q1ZmYOgty9sj5wIoxrK7YWMzMcBPnzhWRm1mAyDQJJCyQ9KqlP0mVDtHm/pJWSVki6Mct6GoLXB8yswbRntWNJbcDVwLuANcByST0RsbKizVzgs8DbImKzpPLfhvOV7yDwiMDMGkOWI4LTgL6IWBURu4ClwKJBbT4OXB0RmwEiYn2G9RRvVz9sehTGtUPH8UVXY2YGZDgiAI4EVlc8XgOcPqjNPABJdwBtwBcj4meDdyRpMbAYoLOzk97e3izqraq/v79ux5va/xCnEvQfcBT33H5nXfY5VvXsXyMqc//K3Ddw//KUZRDUevy5QDcwE7hN0gkR8WJlo4hYAiwB6Orqiu7u7twK7O3tpW7Hu28FPAqTj3lH/fY5RnXtXwMqc//K3Ddw//KU5dTQWmBWxeOZ6XOV1gA9EbE7Ip4EHiMJhnLyGUNm1oCyDILlwFxJcyRNAM4Hega1+SHJaABJ00mmilZlWFOxfOtpM2tAmQVBROwBLgZuBR4Gbo6IFZKukLQwbXYrsFHSSuDXwCURsTGrmgq1dxe88FCyfdjJxdZiZlYh0zWCiFgGLBv03OUV2wF8Ov1TbhtXwr7dMG0uTJhSdDVmZq/wlcV5GbjjqG89bWYNxkGQFy8Um1mDchDk5ZUrin1rCTNrLA6CPMQ+2HB/su0RgZk1GAdBHjY/Dru3weQj4aAZRVdjZvYaDoI8eH3AzBqYgyAPvvW0mTUwB0EePCIwswY25AVlkiYCnwCOBX4HXJNeLWyjEfHqNQT+DgIza0DDjQiuA7pIQuAc4Cu5VFQ2W9fAjo0w8VCYclTR1ZiZvc5wt5iYHxEnAEi6BvhtPiWVTOW0kFRsLWZmVQw3Itg9sOEpoTHw+oCZNbjhRgQnS3op3RZwYPpYJPeLm5p5dWXgW0+bWYMbLggeiAh/eo2VTx01swY33NRQ5FZFWW1/AbauhvaDkttPm5k1oOFGBIdJGvJ7AiLiqgzqKZeB0cCMk2BcW7G1mJkNYbggaAMmk6wJ2P7wQrGZNYHhguDZiLgit0rKyLeeNrMmMNwagUcCY+URgZk1geGC4KzcqiijXf2w+TEY1w4dby66GjOzIQ0ZBBGxKc9CSmfDA0AkIdB+QNHVmJkNyXcfzYqvHzCzJuEgyIrXB8ysSTgIsvK8by1hZs3BQZCFvbtg4wpAcNhJRVdjZjYsB0EWXlgB+3Ynt5WYMKXoaszMhuUgyILvOGpmTSTTIJC0QNKjkvokXTZMuz+RFJK6sqwnN14oNrMmklkQSGoDrib5msv5wAWS5ldpNwX4FHB3VrXkzqeOmlkTyXJEcBrQFxGrImIXsBRYVKXdlcCXgB0Z1pKffXvTi8nwiMDMmsJwN50bqyOB1RWP1wCnVzaQdCowKyJ+IumSoXYkaTGwGKCzs5Pe3t76VzuE/v7+UR3voB3PcNrubewYP4O7fvtQdoXVyWj712zK3L8y9w3cvzxlGQTDkjQOuAq4aKS2EbEEWALQ1dUV3d3dmdZWqbe3l1Ed7+HvwwqYOOuM0b2vIKPuX5Mpc//K3Ddw//KU5dTQWmBWxeOZ6XMDpgDHA72SngLOAHqafsHYt542syaTZRAsB+ZKmiNpAnA+0DPwYkRsiYjpETE7ImYDdwELI+KeDGvKns8YMrMmk1kQRMQe4GLgVuBh4OaIWCHpCkkLszpuoSJ8DYGZNZ1M1wgiYhmwbNBzlw/RtjvLWnKxdTXs2AQTO2DKrJHbm5k1AF9ZXE+V00LyF7yZWXNwENST1wfMrAk5COrJt542sybkIKgnnzpqZk3IQVAv2zdA/xoYPym5/bSZWZNwENTLwGhgxkkg/1jNrHn4E6tevFBsZk3KQVAvvvW0mTUpB0G9eERgZk3KQVAPu7bC5sdg3HiY/uaiqzEzGxUHQT2sT7+IpuPN0Dah2FrMzEbJQVAPvn7AzJqYg6AevD5gZk3MQVAPvvW0mTUxB8FY7dkJG1cASi4mMzNrMg6Csdq4AvbtgWnzYMLkoqsxMxs1B8FYeX3AzJqcg2CsfOtpM2tyDoKx8qmjZtbkHARjsW8vbEgvJvOIwMyalINgLDY/Bnu2J19Uf2BH0dWYme0XB8FYeKHYzErAQTAWvvW0mZWAg2AsPCIwsxJwEOyvCN9awsxKwUGwv7Y+Azs2w4HTYcrMoqsxM9tvDoL99XzFtJBUbC1mZmOQaRBIWiDpUUl9ki6r8vqnJa2U9KCkX0o6Ost66srrA2ZWEpkFgaQ24GrgHGA+cIGk+YOa3Qd0RcSJwA+Av82qnrrz+oCZlUSWI4LTgL6IWBURu4ClwKLKBhHx64jYnj68C2ieyXafOmpmJdGe4b6PBFZXPF4DnD5M+48CP632gqTFwGKAzs5Oent761TiyPr7+193vPG7N/O2/rXsGXcgtz+wBrQut3rqrVr/yqTM/Stz38D9y1OWQVAzSR8EuoB3Vns9IpYASwC6urqiu7s7t9p6e3t53fGeuhUehPY3nEr3mf86t1qyULV/JVLm/pW5b+D+5SnLIFgLzKp4PDN97jUknQ18DnhnROzMsJ76ed4LxWZWHlmuESwH5kqaI2kCcD7QU9lA0inAd4CFEbE+w1rqy7eeNrMSySwIImIPcDFwK/AwcHNErJB0haSFabMvA5OBWyTdL6lniN01lg0eEZhZeWS6RhARy4Blg567vGL77CyPn4mdL8Hmx2HceOgYfDasmVnz8ZXFozXwRTTTj4e2CcXWYmZWBw6C0fL1A2ZWMg6C0fKtJcysZBwEo+VbS5hZyTgIRmPPTti4EhAcdlLR1ZiZ1YWDYDQ2PgT79sChx8H4SUVXY2ZWFw6C0fAVxWZWQg6C0fD6gJmVkINgNHzqqJmVkIOgVvv2vnoxmUcEZlYiDoJabX4U9rwMU46CAw8tuhozs7pxENTKF5KZWUk5CGr1vG89bWbl5CColW89bWYl5SCoRQQ871NHzaycHAS1eOlp2PkiHDgDJh9ZdDVmZnXlIKhF5UKxVGwtZmZ15iCohc8YMrMScxDUwreWMLMScxDUYr1PHTWz8nIQjGD87k3Qvw4mTIFD3lh0OWZmdecgGMGU7X3JxoyTQP5xmVn5+JNtBJO3P55seH3AzErKQTCCyS8PBIHXB8ysnBwEI5g8MDXkEYGZlZSDYDg7t3DQzrXQNgE65hddjZlZJhwEwxn4IpqO46FtfLG1mJllxEEwHF8/YGYtINMgkLRA0qOS+iRdVuX1AyTdlL5+t6TZWdYzar61hJm1gMyCQFIbcDVwDjAfuEDS4In2jwKbI+JY4KvAl7KqZ7/41tNm1gKyHBGcBvRFxKqI2AUsBRYNarMIuC7d/gFwltQgt/fcswM2riQYBzNOLLoaM7PMtGe47yOB1RWP1wCnD9UmIvZI2gJ0AC9UNpK0GFgM0NnZSW9vb0Ylv2r8ni3M6VgAO17ksTuWZ368ovT39+fy8yxKmftX5r6B+5enLIOgbiJiCbAEoKurK7q7u3M68iJ6e3vJ73j5c/+aV5n7Bu5fnrKcGloLzKp4PDN9rmobSe3AwcDGDGsyM7NBsgyC5cBcSXMkTQDOB3oGtekBPpRunwf8KiIiw5rMzGyQzKaG0jn/i4FbgTbgexGxQtIVwD0R0QNcA9wgqQ/YRBIWZmaWo0zXCCJiGbBs0HOXV2zvAN6XZQ1mZjY8X1lsZtbiHARmZi3OQWBm1uIcBGZmLc5BYGbW4hwEZmYtzkFgZtbiHARmZi3OQWBm1uIcBGZmLc5BYGbW4hwEZmYtTs1212dJG4CnczzkdAZ9Y1rJuH/Nq8x9A/ev3o6OiBnVXmi6IMibpHsioqvoOrLi/jWvMvcN3L88eWrIzKzFOQjMzFqcg2BkS4ouIGPuX/Mqc9/A/cuN1wjMzFqcRwRmZi3OQWBm1uIcBClJCyQ9KqlP0mVVXj9A0k3p63dLmp1/lfunhr59WtJKSQ9K+qWko4uoc3+N1L+Kdn8iKSQ1xCl7taqlf5Len/4OV0i6Me8ax6KGv59HSfq1pPvSv6PnFlHn/pD0PUnrJT00xOuS9I207w9KOjXvGgGIiJb/A7QBTwDHABOAB4D5g9r8B+Db6fb5wE1F113Hvp0JHJRuf7JZ+lZr/9J2U4DbgLuArqLrrvPvby5wHzAtfXxY0XXXuX9LgE+m2/OBp4quexT9ewdwKvDQEK+fC/wUEHAGcHcRdXpEkDgN6IuIVRGxC1gKLBrUZhFwXbr9A+AsScqxxv01Yt8i4tcRsT19eBcwM+cax6KW3x3AlcCXgB15FlcHtfTv48DVEbEZICLW51zjWNTSvwCmptsHA+tyrG9MIuI2YNMwTRYB10fiLuAQSYfnU92rHASJI4HVFY/XpM9VbRMRe4AtQEcu1Y1NLX2r9FGSf6E0ixH7lw63Z0XET/IsrE5q+f3NA+ZJukPSXZIW5Fbd2NXSvy8CH5S0BlgG/Hk+peVitP9/ZqI97wNa45L0QaALeGfRtdSLpHHAVcBFBZeSpXaS6aFuktHcbZJOiIgXC62qfi4Aro2Ir0h6C3CDpOMjYl/RhZWFRwSJtcCsiscz0+eqtpHUTjJE3ZhLdWNTS9+QdDbwOWBhROzMqbZ6GKl/U4DjgV5JT5HMw/Y00YJxLb+/NUBPROyOiCeBx0iCoRnU0r+PAjcDRMSdwESSG7aVQU3/f2bNQZBYDsyVNEfSBJLF4J5BbXqAD6Xb5wG/inS1p8GN2DdJpwDfIQmBZppfhhH6FxFbImJ6RMyOiNkkayALI+KeYsodtVr+bv6QZDSApOkkU0Wr8ixyDGrp3zPAWQCS3kQSBBtyrTI7PcCF6dlDZwBbIuLZvIvw1BDJnL+ki4FbSc5i+F5ErJB0BXBPRPQA15AMSftIFn/OL67i2tXYty8Dk4Fb0vXvZyJiYWFFj0KN/WtaNfbvVuAPJa0E9gKXREQzjFZr7d9ngO9K+guSheOLmuQfYUj6PklIT0/XOL4AjAeIiG+TrHmcC/QB24EPF1Jnk/w8zcwsI54aMjNrcQ4CM7MW5yAwM2txDgIzsxbnIDAza3E+fdRsP0naC/yu4qk/BmYDPwKeBA4AlkbEX+VfnVntHARm++/liDi58on09uS/iYh3S5oE3C/pxxHxL0UUaFYLTw2ZZSQitgH3AscWXYvZcBwEZvvvQEn3p3/+cfCLkjpI7m20Iv/SzGrnqSGz/fe6qaHU2yXdB+wD/iYiHATW0BwEZvX3m4h4d9FFmNXKU0NmZi3OQWBm1uJ891EzsxbnEYGZWYtzEJiZtTgHgZlZi3MQmJm1OAeBmVmLcxCYmbU4B4GZWYv7/5tTx5kjafAMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# foreach class\n", + "for i,cname in enumerate(iris.target_names):\n", + " ybin = []\n", + " ypred = []\n", + " \n", + " # rank positives based on predicted probabilities\n", + " pred = clf.predict_proba(iris_X_test)[:,i]\n", + " pi = [(iris_y_test[j], p) for j,p in enumerate(pred)]\n", + " ps = sorted(pi, key=lambda p: p[1], reverse=True)\n", + "\n", + " # binarize (select correct class)\n", + " for y,p in ps:\n", + " ypred.append(p)\n", + " if y == i:\n", + " ybin.append(1)\n", + " else:\n", + " ybin.append(0)\n", + " \n", + " # extract false positives, true positives\n", + " fpr, tpr, _ = roc_curve(ybin, ypred)\n", + " \n", + " fig= plt.figure()\n", + " ax = fig.gca()\n", + " plt.plot(fpr, tpr,\n", + " color='darkorange',\n", + " lw=2\n", + " )\n", + " plt.xlim([-0.1, 1.1])\n", + " plt.ylim([-0.1, 1.1])\n", + " ax.set_title(\"ROC plot for class: %s\" % cname)\n", + " ax.set_xlabel(\"FP\")\n", + " ax.set_ylabel(\"TP\")\n", + " ax.grid(True)\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Print the index of the test instances and the corresponding predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Instance # 88: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 70: \n", + "Predicted: virginica\t True: versicolor\n", + "\n", + "Instance # 87: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 36: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 21: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 9: \n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # 103: \n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # 67: \n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # 117: \n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # 47: \n", + "Predicted: setosa\t True: setosa\n", + "\n" + ] + } + ], + "source": [ + "# print the corresponding instances indexes and class names \n", + "for i in range(len(iris_y_test)): \n", + " print(\"Instance # \"+str(indices_test[i])+\": \")\n", + " print(\"Predicted: \"+iris.target_names[predicted_y_test[i]]+\"\\t True: \"+iris.target_names[iris_y_test[i]]+\"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Look at the specific examples" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.6, sepal width (cm)=3.0, petal length (cm)=4.1, petal width (cm)=1.3\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.9, sepal width (cm)=3.2, petal length (cm)=4.8, petal width (cm)=1.8\n", + "Predicted: virginica\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=6.3, sepal width (cm)=2.3, petal length (cm)=4.4, petal width (cm)=1.3\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.5, sepal width (cm)=3.5, petal length (cm)=1.3, petal width (cm)=0.2\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.1, sepal width (cm)=3.7, petal length (cm)=1.5, petal width (cm)=0.4\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=4.9, sepal width (cm)=3.1, petal length (cm)=1.5, petal width (cm)=0.1\n", + "Predicted: setosa\t True: setosa\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=6.3, sepal width (cm)=2.9, petal length (cm)=5.6, petal width (cm)=1.8\n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=5.8, sepal width (cm)=2.7, petal length (cm)=4.1, petal width (cm)=1.0\n", + "Predicted: versicolor\t True: versicolor\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=7.7, sepal width (cm)=3.8, petal length (cm)=6.7, petal width (cm)=2.2\n", + "Predicted: virginica\t True: virginica\n", + "\n", + "Instance # [ 88 70 87 36 21 9 103 67 117 47]: \n", + "sepal length (cm)=4.6, sepal width (cm)=3.2, petal length (cm)=1.4, petal width (cm)=0.2\n", + "Predicted: setosa\t True: setosa\n", + "\n" + ] + } + ], + "source": [ + "for i in range(len(iris_y_test)): \n", + " print(\"Instance # \"+str(indices_test)+\": \")\n", + " s=\"\"\n", + " for j in range(len(iris.feature_names)):\n", + " s=s+iris.feature_names[j]+\"=\"+str(iris_X_test[i][j])\n", + " if (j\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Tree\n", + "\n", + "\n", + "0\n", + "\n", + "petal length (cm) ≤ 2.45\n", + "entropy = 1.585\n", + "samples = 150\n", + "value = [50, 50, 50]\n", + "class = setosa\n", + "\n", + "\n", + "1\n", + "\n", + "entropy = 0.0\n", + "samples = 50\n", + "value = [50, 0, 0]\n", + "class = setosa\n", + "\n", + "\n", + "0->1\n", + "\n", + "\n", + "True\n", + "\n", + "\n", + "2\n", + "\n", + "petal width (cm) ≤ 1.75\n", + "entropy = 1.0\n", + "samples = 100\n", + "value = [0, 50, 50]\n", + "class = versicolor\n", + "\n", + "\n", + "0->2\n", + "\n", + "\n", + "False\n", + "\n", + "\n", + "3\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.445\n", + "samples = 54\n", + "value = [0, 49, 5]\n", + "class = versicolor\n", + "\n", + "\n", + "2->3\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "petal length (cm) ≤ 4.95\n", + "entropy = 0.151\n", + "samples = 46\n", + "value = [0, 1, 45]\n", + "class = virginica\n", + "\n", + "\n", + "2->8\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "sepal length (cm) ≤ 5.15\n", + "entropy = 0.146\n", + "samples = 48\n", + "value = [0, 47, 1]\n", + "class = versicolor\n", + "\n", + "\n", + "3->4\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "entropy = 0.918\n", + "samples = 6\n", + "value = [0, 2, 4]\n", + "class = virginica\n", + "\n", + "\n", + "3->7\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "entropy = 0.722\n", + "samples = 5\n", + "value = [0, 4, 1]\n", + "class = versicolor\n", + "\n", + "\n", + "4->5\n", + "\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "entropy = 0.0\n", + "samples = 43\n", + "value = [0, 43, 0]\n", + "class = versicolor\n", + "\n", + "\n", + "4->6\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "entropy = 0.65\n", + "samples = 6\n", + "value = [0, 1, 5]\n", + "class = virginica\n", + "\n", + "\n", + "8->9\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "entropy = 0.0\n", + "samples = 40\n", + "value = [0, 0, 40]\n", + "class = virginica\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dot_data = tree.export_graphviz(clf, out_file=None, \n", + " feature_names=iris.feature_names, \n", + " class_names=iris.target_names, \n", + " filled=True, rounded=True, \n", + " special_characters=True) \n", + "graph = graphviz.Source(dot_data) \n", + "graph" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20.ipynb b/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20.ipynb index d7913c9..9945d1c 100644 --- a/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20.ipynb +++ b/anno3/apprendimento_automatico/esercizi/all_m/classification_iris_aa_19_20.ipynb @@ -20,7 +20,6 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [], @@ -77,9 +76,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -96,9 +93,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -115,9 +110,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -333,9 +326,7 @@ { "cell_type": "code", "execution_count": 19, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Generate a random permutation of the indices of examples that will be later used \n", @@ -364,9 +355,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# fit the model to the training data\n", @@ -383,9 +372,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -421,9 +408,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -479,9 +464,7 @@ { "cell_type": "code", "execution_count": 23, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -551,9 +534,7 @@ { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -584,9 +565,7 @@ { "cell_type": "code", "execution_count": 25, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -609,9 +588,7 @@ { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -645,7 +622,6 @@ "cell_type": "code", "execution_count": 27, "metadata": { - "collapsed": false, "scrolled": false }, "outputs": [ @@ -677,9 +653,7 @@ { "cell_type": "code", "execution_count": 28, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -698,9 +672,7 @@ { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -896,23 +868,23 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [conda env:aaaid]", + "display_name": "Python 3", "language": "python", - "name": "conda-env-aaaid-py" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.7.7" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/anno3/apprendimento_automatico/esercizi/all_m/one_vs_rest.ipynb b/anno3/apprendimento_automatico/esercizi/all_m/one_vs_rest.ipynb new file mode 100644 index 0000000..51870d9 --- /dev/null +++ b/anno3/apprendimento_automatico/esercizi/all_m/one_vs_rest.ipynb @@ -0,0 +1,224 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experiments with the one vs rest multiclass classification scheme" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from sklearn import datasets\n", + "from sklearn.multiclass import OneVsRestClassifier as OvR\n", + "from sklearn.svm import LinearSVC\n", + "import numpy as np\n", + "import copy\n", + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "digits = datasets.load_digits()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use the \"Optical Recognition of Handwritten Digits Data Set\" from UCI (included in scikit learn and already loaded on the previous line). Let us plot the first 10 images in the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for index, image in enumerate(digits.images[:10]):\n", + " plt.subplot(2, 5, index + 1)\n", + " plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us create a training set using the first 1000 images and a test set using the rest of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5.\n", + " 0. 0. 3. 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8.\n", + " 8. 0. 0. 5. 8. 0. 0. 9. 8. 0. 0. 4. 11. 0. 1.\n", + " 12. 7. 0. 0. 2. 14. 5. 10. 12. 0. 0. 0. 0. 6. 13.\n", + " 10. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "X,y = digits.data[0:1000], digits.target[0:1000]\n", + "X_test, y_test = digits.data[1000:], digits.target[1000:]\n", + "print(X[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "scikit-learn provide us with an One-Vs-Rest classifier that we already imported with name `OvR`. Let us use that classifier to fit the training set and to make predictions over the test set:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "binaryLearner = LinearSVC(random_state=0)\n", + "\n", + "oneVrestLearningAlgorithm = OvR(binaryLearner)\n", + "oneVrestLearningAlgorithm.fit(X,y)\n", + "predicted_labels = oneVrestLearningAlgorithm.predict(X_test)\n", + "\n", + "# n.b.: the above is equivalent to:\n", + "# predicted_labels = OvR(LinearSVC(random_state=0)).fit(X,y).predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print \"Accuracy: %s\" % (1.0 - np.count_nonzero(y_test - predicted_labels) / float(len(predicted_labels)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reimplement the OvR classifier by completing the methods in the following class [[1](#hint1)]:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class OneVsRestClassifier:\n", + " def __init__(self, learner):\n", + " #... to be done ...\n", + " return 1\n", + "\n", + " def fit(self, data, labels):\n", + " #... to be done ...\n", + "\n", + " return self\n", + "\n", + " def predict(self, data):\n", + " #... to be done ...\n", + " return 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculate the accuracy of your solution using the following code [[2](#hint2)]:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ovr = OneVsRestClassifier(LinearSVC(random_state=0))\n", + "predicted_labels = ovr.fit(X,y).predict(X_test)\n", + "print \"Accuracy: %s\" % (1.0-np.count_nonzero(predicted_labels-y_test)/float(len(y_test)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hint 1: Feel free to organize your code as you like (add as many methods as you believe are necessary).\n", + "\n", + "Hint 2: The scheme provided by scikit-learn is a little different from the one we have seen in the lessons. It is normal if your accuracy is not as good as the one obtained above (expect the accuracy to be between 0.8 and 0.9)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/anno3/apprendimento_automatico/slides/05.trees_data_structure_in_scikitlearn.pdf b/anno3/apprendimento_automatico/slides/06.trees_data_structure_in_scikitlearn.pdf similarity index 100% rename from anno3/apprendimento_automatico/slides/05.trees_data_structure_in_scikitlearn.pdf rename to anno3/apprendimento_automatico/slides/06.trees_data_structure_in_scikitlearn.pdf diff --git a/todo.org b/todo.org index dd055c1..c8a6777 100644 --- a/todo.org +++ b/todo.org @@ -9,7 +9,23 @@ - [ ] 02: + [ ] Inductive Leap + [ ] Biased hyp - + - [ ] 04: + + [ ] growtree algorithm + + [ ] Bene tutto il discorso su entropia + + [ ] Ranking and regression trees + - [ ] 05: + + [ ] Learning ordered rules da libro + + [ ] Subgroups discovery e fine + - [ ] 07: + + [ ] Mahalanobis distance + + [ ] Meaning of variance in neighboors + + [ ] Sum of squared error + + [ ] Silhouttes + + [ ] Rivedi kernelization +- [ ] Esercizi: + - [ ] es1: perche` min_impurity decrease + - [ ] chiedi a Galla`, Marco e Naz quali sono tutti gli es + - [ ] linear models.zip? * Tesi [8/33] - [ ] Rivedere inference rules di Gabriel e aggiustarle con le mie