UniTO/anno3/apprendimento_automatico/esercizi/marco/coverage_plots-checkpoint.ipynb
2020-06-17 20:01:41 +02:00

491 lines
89 KiB
Text

{
"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": 3,
"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": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\galat\\.conda\\envs\\aaut\\lib\\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([[ -8, -49],\n",
" [-39, 7],\n",
" [ 48, 95],\n",
" ...,\n",
" [ -2, 7],\n",
" [ 35, 72],\n",
" [ 28, -5]])"
]
},
"execution_count": 6,
"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": 7,
"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": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x1f28b3e7788>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"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": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-2.47471947, -3.5581708 ],\n",
" [ 1.59686449, 1.71893864],\n",
" [ 3.03294605, 4.57263288],\n",
" [ 4.3603124 , -1.19540694],\n",
" [ 1.21976183, 4.09720458],\n",
" [ 0.42857121, 3.20268614],\n",
" [-2.15226242, 2.96225011],\n",
" [ 0.65773544, -2.54676899],\n",
" [-2.79365386, -0.78924628],\n",
" [ 2.90156232, -3.31703275],\n",
" [-0.9849533 , 0.62170036],\n",
" [-4.0396815 , 4.36277095],\n",
" [ 1.34248188, 1.77758129],\n",
" [ 0.38419206, 0.17314725],\n",
" [-2.04665134, 2.10337995],\n",
" [-2.50975771, 3.65315789],\n",
" [ 2.004511 , 2.73918509],\n",
" [ 4.15805913, -4.96182686],\n",
" [ 4.51026319, -1.78429829],\n",
" [-3.31973604, 3.43442154],\n",
" [ 3.52497128, 0.85718807],\n",
" [-3.06163513, -0.86712587],\n",
" [-4.18156322, -2.21571818],\n",
" [-4.59703113, 4.4801163 ],\n",
" [-2.65368229, 4.37023623],\n",
" [ 3.90990454, -2.1420455 ],\n",
" [-3.24752094, -0.40639067],\n",
" [ 0.10755654, 0.48649316],\n",
" [ 2.26731088, 4.73364989],\n",
" [-4.22292673, -0.21284274],\n",
" [-4.66592874, -2.79620572],\n",
" [ 4.63716865, 0.87182744],\n",
" [-4.32406367, 1.10060443],\n",
" [-0.45847 , 0.70180339],\n",
" [ 3.22176576, -2.5364163 ],\n",
" [ 3.80797501, 2.35293627],\n",
" [ 3.36332162, -3.79299501],\n",
" [ 3.99625756, 2.36135165],\n",
" [ 1.20216525, -1.23827528],\n",
" [-3.09694201, 3.9600678 ],\n",
" [-0.64611333, 2.09501923],\n",
" [ 0.99744202, 1.49993523],\n",
" [-3.36391051, -3.90944487],\n",
" [-3.58672509, -4.1088498 ],\n",
" [ 3.46090243, 0.02661214],\n",
" [-1.49631605, -2.28424324],\n",
" [ 1.1089388 , -1.73806817],\n",
" [ 3.30150146, -3.13759682],\n",
" [-4.51293209, 4.08479726],\n",
" [-4.09529163, 4.28334043],\n",
" [-0.7227784 , 0.85683098],\n",
" [-3.54236195, -4.37842609],\n",
" [-1.67857772, 1.18420411],\n",
" [-2.06131565, -3.81118901],\n",
" [-0.94505145, -0.79410051],\n",
" [-1.58100698, -4.40226088],\n",
" [ 3.49623546, 0.98568917],\n",
" [-4.7875311 , 2.46132599],\n",
" [-0.90714606, -4.03370503],\n",
" [-4.04974727, 1.89697029],\n",
" [ 2.3912763 , 4.43535836],\n",
" [ 1.91805621, 3.10706978],\n",
" [ 2.7870542 , -4.76785357],\n",
" [-4.83230806, 0.68706866],\n",
" [ 4.21091682, 2.69235722],\n",
" [ 4.92125435, 1.67552945],\n",
" [-4.17809823, -3.0655279 ],\n",
" [ 1.34522792, -2.11218453],\n",
" [-2.82712946, -3.84431909],\n",
" [ 4.32983019, -0.67660343],\n",
" [ 3.69650316, -2.09533608],\n",
" [-2.46459767, -2.78730998],\n",
" [-0.12911643, 3.03464722],\n",
" [-0.54414414, -4.24446833],\n",
" [ 0.70841166, 0.82220448],\n",
" [-1.21624127, 2.67030582],\n",
" [-4.4511487 , -0.18157221],\n",
" [ 0.54850624, 3.80806515],\n",
" [ 0.41580003, 2.39770318],\n",
" [ 0.78040198, -2.27920522],\n",
" [-0.98993749, -4.66406869],\n",
" [ 2.67850165, 1.2013196 ],\n",
" [-0.85139301, -3.08916589],\n",
" [ 2.00142468, -3.62142984],\n",
" [-0.08136816, 1.76822154],\n",
" [-4.92951601, 0.11860089],\n",
" [-2.36011692, 2.25618495],\n",
" [ 1.60982063, -0.44192244],\n",
" [-2.54853258, -2.17737341],\n",
" [-1.31205757, 2.17528846],\n",
" [ 4.9863995 , -3.99442219],\n",
" [-1.87206871, -2.53218008],\n",
" [ 2.35107436, -4.08841325],\n",
" [ 3.5602568 , -2.39084033],\n",
" [-1.67264783, -2.78819786],\n",
" [ 2.14307079, -1.80908234],\n",
" [-2.47515458, 2.07939336],\n",
" [ 0.34640981, 0.10794752],\n",
" [ 1.0289358 , -1.10048266],\n",
" [-4.92276006, 0.74592667]])"
]
},
"execution_count": 11,
"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",
"<a name=\"hint1\">Hint 1:</a> 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",
"<a name=\"hint2\">Hint 2:</a> 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": "markdown",
"metadata": {},
"source": [
"# Es. 1"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"def build_confusion_matrix(labels1, labels2):\n",
" confusion_matrix = np.zeros((2,2))\n",
" for i in range(len(labels1)):\n",
" confusion_matrix[1 - labels1[i], 1 - labels2[i]] += 1\n",
" return confusion_matrix"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[202. 281.]\n",
" [310. 207.]]\n"
]
}
],
"source": [
"print(build_confusion_matrix(apply_linear_model(target_model, data), apply_linear_model(models[0], data)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Es. 2\n"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x1f28b4e2508>"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD6CAYAAABamQdMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAcU0lEQVR4nO3db5Bc5ZXf8e9haJvW7oYRIAhqiR2xpmSbaNE4U6At7QuQd1cYDEwIYCi7rLio0hsnZVhq1lJCBbFFinFUNrYrKWep2LV4IUKA5UGAdwWFoJJQJdkjj8SggIKMsaQWZY2NRs5GbWcYnbzo5zY9Pbf/zKh7uu/t36dqqrufvjO6VwynH517nvOYuyMiIulyTrtPQEREmk/BXUQkhRTcRURSSMFdRCSFFNxFRFJIwV1EJIUaCu5m9q6ZjZvZfjMbDWMXmNlLZvZ2eFwcxs3Mvm1mh83sdTP7VCsvQEREZrNG6tzN7F1gwN1/VTb2H4H33X3YzDYBi939q2Z2A/BvgBuAa4Bvufs1tX7+RRdd5H19ffO/ChGRLrRv375fufuSuPfOPYufewtwbXj+GPAq8NUw/n0vfmrsMbNeM7vU3d+r9oP6+voYHR09i1MREek+ZvaLau81mnN34EUz22dmG8PYJVHADo8Xh/EccLTse4+FMRERWSCNztzXuvtxM7sYeMnM3qpxrMWMzcr9hA+JjQCXXXZZg6chIiKNaGjm7u7Hw+MJ4IfA1cAvzexSgPB4Ihx+DFhe9u3LgOMxP/NRdx9w94ElS2JTRiIiMk91g7uZ/Z6Z/UH0HPgL4A1gJ7AhHLYBeDY83wl8MVTNrAFO1cq3i4hI8zWSlrkE+KGZRcf/N3f/BzP7CfCUmd0NHAFuD8f/iGKlzGHgNPClpp+1iIjUVDe4u/s7wFUx478GPh0z7sCXm3J2NYyM5dmy8yCThSkAFi/K8MBNVzLYr3u3IiJnUwrZNiNjeYaePsDUmQ/v0548PcXQMwcAFOBFpOslsv3A1l2HZgT2yNS0s3XXoTackYhIZ0lkcD8+WZjXeyIi3SKRaZmlvVnyVYL40t5s6fnIWJ6tuw6RnyzQY8a0O7neLEPrVyp1IyKplsiZ+9D6lWTOmb1WKtNjDK1fCRQD++Yd46UPgenQQyc/WWDzjnFGxvILd8IiIgsskcF9sD/H1tuvojebKY0tXpRh621XlWbkW3cdojA1Hfv9halp5eZFJNUSmZaBYoCvlVqpl3tXbl5E0iyRM/dGlOfe5/O+iEiSpTa4D61fSTbTE/teNtNTys2LiKRRYtMy9ZTn3lUtIyLdJrXBHern5aNSyeOTBZYq6ItIiqQ6uNcSlUpGFTVRiSSofYGIJF9qc+71xJVKFqamuWf7flY/+KLq4EUk0bo2uNcqhZwsTDH09AEFeBFJrK4N7vVKIafOqAmZiCRX1wb3WqWSES10EpGk6trgPtif4+FbV9Fjcft5F2mhk4gkVdcGdygG+K/fcRWZnpgmZOeYFjqJSGJ1bSlkJCp7fPC5g5w8XdyyrzebYcvNVwKwdni36uBFJHG6PrhD/GIn1cGLSJJ1dVqmlmp18KqgEZEkUHCvolqljCpoRCQJlJapotpWflEFjfrSiEgn08y9irg6+KhVcPkWfo627hORzqPgXkVUB5/rzWJArjfLw7euKm7xp3y8iHQ4pWVqqNYyWPl4Eel0mrnPw/llG3NXWrHpBdYO71aKRkTaSjP3eajWscDDo2riRaTdFNznYTKsZK2lMDXNfU8dKL1WZY2ILCQF93moViZZadqdoacPgMHUdHFer1m9iCwE5dznoZF2wZGpM14K7BFV1ohIqym4z0Mj7YLryU8WdPNVRFqm4eBuZj1mNmZmz4fXK8xsr5m9bWbbzewjYfyj4fXh8H5fa069vaJ2wY3O4ONoAZSItMpcZu5fAd4se/014BF3vwI4Cdwdxu8GTrr7x4BHwnGpVLnQab6UphGRZmsouJvZMuBG4L+G1wasA54JhzwGDIbnt4TXhPc/HY5PpcH+HK9tWsfPh28kV2Xnpt5spup7ES2AEpFmanTm/k3gr4Az4fWFwKS7fxBeHwOi0o8ccBQgvH8qHJ961frRbLn5Sl7btK5mgNeWfiLSTHWDu5l9Fjjh7vvKh2MO9QbeK/+5G81s1MxGJyYmGjrZTlerHw3Unp1rSz8RaaZG6tzXAjeb2Q3AecA/oTiT7zWzc8PsfBlwPBx/DFgOHDOzc4Hzgfcrf6i7Pwo8CjAwMDAr+CdVtX40UL0+vjebif0etRUWkfmqO3N3983uvszd+4A7gd3u/nngFeC2cNgG4NnwfGd4TXh/t7unJnifjWppm89edSlrh3fPKI0cGcsz9MyBGW2Fh545oKoaEWnI2axQ/SrwpJk9BIwB3w3j3wX+zswOU5yx33l2p5ge0ay7fDZ+3ceX8IN9+Vl7tZ5Ttqo1MjXtPPjcQc3eRaSuOQV3d38VeDU8fwe4OuaY3wK3N+HcUqkybbN2eHdsb/hqTjbQ10ZERCtU20wlkCLSCgrubTbXEsjeGr3kRUQiCu5tNpcmZABbbr6yhWcjImmh4N5mc21hMPqLWVWlIiKzWCdUKQ4MDPjo6Gi7T6MjrB3eXbNXvBksPT8bW/uuuniR7mJm+9x9IO49zdw7TL00jTszat+jjpIjY3k27xif8d692/dz/8j4gp27iHQOzdw70MhYnnu272/4+KhnTbUZ/+JFGR646UrN4kVSRjP3hBnsz/GFNZc1fPzxyULNksqTp6fUM16kyyi4d6iHBlfxhTWXlXZ76jFjUSb+P9fS3mzdkkr1jBfpLtogu4M9NLiKhwZXlV5HefXyFazZTE+po+S92/fPbr9ZRgumRLqHgnuCxPWmKa+IGf3F+zyx50jVAK+e8SLdQ8E9YWq1FH5ocBUDf3gBW3YeZLIwswdN+QxfRNJP1TIpVVnz3ndhlj3vnGTanR4z7rpm+YyUj4gkT61qGc3cU6p8hn//yDiP7zlSem/avfRaAV4knRTcu8C2vUdjx5/Ye4RX3pogP1mgx4xpd3Ja2SqSCiqF7ALTVVJv0WrX8mOila19ZbtCiUjyKLh3gahWvlHRR0F5ewMRSRYF9y5w1zXL5/29WvwkkkwK7l1gLqtd42jxk0jy6IZql2hktWs1WvwkkjwK7l2qfLVrebWMwYwVrlr8JJJMCu5dLG61qzb8EEkHBXeZoVZ7AxFJDt1QFRFJIQV3EZEUUnAXEUkh5dxl3nTzVaRzKbjLvFTWyUetCgAFeJEOoLSMzMvWXYdmLYBSqwKRzqGZu8xLtZYEleNK3Yi0h4K7zMvS3mypXXDleBTQ85OFGStelboRWThKy8i8DK1fSTbTM2Msm+nhuo8vYfOO8VLgr+wkr9SNyMKoG9zN7Dwz+7GZHTCzg2b2YBhfYWZ7zextM9tuZh8J4x8Nrw+H9/taewnSDoP9OR6+dRW53iwG5HqzPHzrKl55a6JuM7L8ZIEV2gxEpKUaScv8Dljn7v9oZhngf5rZ3wN/CTzi7k+a2X8B7ga+Ex5PuvvHzOxO4GvA51p0/tJGca0K7t2+v6HvdZSmEWmlujN3L/rH8DITvhxYBzwTxh8DBsPzW8JrwvufNpvjVkCSWHNtD6w0jUhrNJRzN7MeM9sPnABeAn4GTLr7B+GQY0A09coBRwHC+6eAC5t50tK54nLx9T7ZtRmISPM1FNzdfdrdVwPLgKuBT8QdFh7j/l+etUOzmW00s1EzG52YmGj0fKXDxeXiH/ncat4dvpFclVm9NgMRab45lUK6+6SZvQqsAXrN7NwwO18GHA+HHQOWA8fM7FzgfOD9mJ/1KPAowMDAwKzgL8lVrW3w0PqVs3Z/0mYgIq3RSLXMEjPrDc+zwJ8BbwKvALeFwzYAz4bnO8Nrwvu73V3BW6pW2MR9EIyM5Vk7vFtVNSLzZPXirpn9McUbpD0UPwyecve/NrPLgSeBC4Ax4Avu/jszOw/4O6Cf4oz9Tnd/p9afMTAw4KOjo2d9MZIOI2N5hp4+wNSZD383M+cYW2+/SlU1ImXMbJ+7D8S9Vzct4+6vUwzUlePvUMy/V47/Frh9HucpAsCWnQdnBHaAqTPOlp0HFdxFGqQVqtJxJgtTVcf/aPOPuH9kfIHPSCR5FNwlUabdeXzPEQV4kToU3KXjLF6UqXvMtr1HF+BMRJJLwV06zgM3XUmmp/bSp2l3VdKI1KCWv9JxopumUdvgatSfRqQ6zdylIw3253ht0zq+sOayuseqP43IbJq5S0d7aHAVUMyxT9dYk6H+NCIz1V3EtBC0iEkatXZ4d2yqJhe28ItSOT1mTLuXxpWykTSqtYhJaRlJlEZ3gIpm+VFOXjddpdsouEuizGcHKOXkpRsp5y6JM58doJSTl26j4C6psLQ3W7dscu3wbq77+BJeeWuC45MFliofLymmtIykQlwuvlJ+ssDje46QnyyUauSHnjmgfLykkoK7pEJ5Lh6gp8Fte6emnQefO9jKUxNpC5VCSmqt2PTC7P0dqzBQmkYSR6WQ0pXmsjdreSsDpWkkDRTcJbUaycNXiiub1JZ/kkSqlpHUKm9AdnyywPnZDL/57RRn6uRqyssmR8byMzb1VqMySQoFd0m1ypr4kbF8KdifE1oUVCpP52zddWjW4qhodq/gLp1MwV26Snmwr5yVQ7GVwdD6laXX1WrntShKOp2Cu3StyrRNZbXMyFgeg9iKm6W92Rn/ClCljXQaBXfpanGtDCJbdx2KDewGpUZlysVLp1K1jEgV1VIvDrGNytSgTDqJgrtIFdXq5HO92aqBPz9ZULmkdAQFd5EqqvWOH1q/suYCqfxkgXu276dv0wusfvBFBXppCwV3kSqq9Y4f7M81vEBqsjBVCvSa0ctC0g1VkRqq3XAtr7Sp1Wq4nG66ykLSzF1kngb7c7y2aV2pE2UjdNNVFoqCu8hZmmsPm+imq3rVSCspLSNylqIUy4PPHeTk6am6xxsfrnxVqkZaRf3cRZpoZCxfM8hXW/HaY8YZd610lTmp1c9dM3eRJqrVqKzWPq9RAzPN5KVZ6s7czWw58H3gnwJngEfd/VtmdgGwHegD3gXucPeTZmbAt4AbgNPAv3L3n9b6MzRzl26xdnh3w9U1PWbcdc1yHhpc1eKzkqQ6252YPgDuc/dPAGuAL5vZJ4FNwMvufgXwcngN8BngivC1EfjOWZ6/SGrM5ebrtDuP7znC/SPjLT4rSaO6wd3d34tm3u7+f4A3gRxwC/BYOOwxYDA8vwX4vhftAXrN7NKmn7lIAlUujGpkI+/H9xxp/YlJ6sypFNLM+oB+YC9wibu/B8UPAODicFgOOFr2bcfCmIjwYX38z4dv5Ot3XNXQ92j2LnPVcHA3s98HfgDc4+6/qXVozNisxL6ZbTSzUTMbnZiYaPQ0RFJlsD/H4kWZusdt23u07jEi5RoK7maWoRjYn3D3HWH4l1G6JTyeCOPHgOVl374MOF75M939UXcfcPeBJUuWzPf8RRLvgZuurJuHj9sOUKSWusE9VL98F3jT3b9R9tZOYEN4vgF4tmz8i1a0BjgVpW9EZLbyPHw1jeTmRco1Ugr5p8D/AMYplkIC/FuKefengMuAI8Dt7v5++DD4T8D1FEshv+TuNescVQopUnT/yHjsDdS1f3QB7/66oC39ZIZapZBaoSrSYe4fGWfb3qNMu9NjxprLF/PTI6dmbeT9L/95jlfemlDA72IK7iIJVm3hU2UrAwM+v+YyLXrqIme7iElE2qjWXq6Vrx/fc0RdJgVQcBfpeLW29IuzZefBFp2JJImCu0iHi2tZUKt2ZrJQv+2wpJ+6Qop0uPIt/aKbp9d9fMmc2xJUdqjUDdh0U3AXSYC4vVx/+NM8//f/Tc86Nm7F68hYns07xksVN2otnH5Ky4gk1H/4F6vI9MxM0GR6jAduunLWsVt3HZpRSgnazzXtNHMXSai4dE21VEu1iptq45J8Cu4iCRaXrolTbReouVbiSHIoLSPSBeIqbrKZHobWr2zTGUmraeYu0gXmksKRdFBwF+kSjaZwJB0U3EVENfAppOAu0uVUA59OuqEq0uVUA59OCu4iXU418Omk4C7S5arVuqsGPtkU3EW6nGrg00k3VEW6XGUN/PnZDGZw7/b9bN11KLZypnIrwLuuWa4doDqMZu4iwmB/jtc2reORz63mdx+c4eTpKZxi5cy92/dz/8h46dhoE+/psEXntDuP7zky4xhpPwV3ESmJq5xx4Imy7fu27T0a+73VxqU9lJYRkZJa+7Vu3XWIwf5cacZeadqd/r9+EXc4VZjSYqg208xdREpqVchEgb/Hqm/yd/L0FJOFD1M6m3eMa8PuNlFwF5GSofUrq+7PGgX+NZcvbvjnRYuhRsbyrB3ezYpNL7B2eLcC/gJQcBeRksH+HJ9fc9msAF9eGvnur+e2uCmawecnC5rRLyAFdxGZ4aHBVTzyudXkerMYkOvN8vCtq0q587muXO0xU3uDNtANVRGZpVZ74Gq7OsXJZnpmBfZIfrLA2uHduunaIpq5i8icxK1ojdI4ixdl6M1mMKA3m+G8TO0QoxRN65hXKWtaSAMDAz46Otru0xCRBtXr/17ZRrgROZVOzpmZ7XP3gbj3lJYRkTmrt6tT3GKoetRHvrmUlhGRpptvu2DdaG0ezdxFpOnmctO10vHJgrb9a4K6M3cz+56ZnTCzN8rGLjCzl8zs7fC4OIybmX3bzA6b2etm9qlWnryIdKZaN13r6V2UUV18EzSSlvlb4PqKsU3Ay+5+BfByeA3wGeCK8LUR+E5zTlNEkmSwP8fDt66aUSvfSOlGNtODO6qLb4K6wd3d/zvwfsXwLcBj4fljwGDZ+Pe9aA/Qa2aXNutkRSQ5ojbCPx++kdc2rSNXpW9Nj9mMxVKnClOxx0V18ZrBN2a+N1Qvcff3AMLjxWE8B5T3/TwWxkSky1Xb8enrd1xV+gAY7M/VbF6WnyxwT0V/eYnX7GqZuLRa7L/GzGyjmY2a2ejExESTT0NEOk1cqqa8rUEk7kOg0uNl/eUlXkOLmMysD3je3f9ZeH0IuNbd3wtpl1fdfaWZ/U14vq3yuFo/X4uYRKRcVC1Tr+Km2xc+1VrENN+Z+05gQ3i+AXi2bPyLoWpmDXCqXmAXEakU5evrUSVNdXXr3M1sG3AtcJGZHQMeAIaBp8zsbuAIcHs4/EfADcBh4DTwpRacs4h0id5shskqN1gjhalp7nvqAKCVreXqBnd3v6vKW5+OOdaBL5/tSYmIAGy5+Ur+8qn9nKmTPZ52V+uCCmocJiIdbWQsz4PPHeTk6dozeCiWVZ5x75pVrWocJiKJVd6krF63yWjzbjUh08xdRBJmZCzPfU8dKAXyWtI+k9fMXURSIwrQjfSL7+aZvFr+ikjiVC6I6rH6bcm6rT+NZu4ikkhzycVH5tuGOIkU3EUk8aIgH/WAb/+dxPZTcBeRVCifyfdteqHNZ9N+yrmLSOpUy8E3kptPCwV3EUmdu65ZPqfxNFJaRkRS56HBVQBs23uUaXd6zLjrmuWl8W6gRUwiIgnVipa/IiLSwZSWERHhww1Cjk8WUtGuQMFdRLre/SPjPLHnSKk+Pg3tCpSWEZGuNjKWnxHYI0lvV6DgLiJdbeuuQ1VXtB5PcLsCBXcR6Wq1ArgDKza/wP0j4wt3Qk2i4C4iXW1pb7bm++7w+J4jiQvwCu4i0tWG1q8km+mpe9y2vUcX4GyaR9UyItLVyjtK1moJ3MjOT51EM3cR6XqD/Tle27SOXJ0UzYpNL7B2eDcjY/kFOrP5U3AXEQmG1q/knBqNI50Pa+A7PcAruIuIBIP9Ob5xx2oWZWqHxsLUNPds39/Rs3jl3EVEypRv+gHFVEy1bHsnr2TVzF1EpIZ6pZKdupJVwV1EpIZGSiXzk4WOS88oLSMiUkOjpZKdlp7RZh0iIg0aGcuzecc4hanp2Pd7zEo7P027k2tx6+Bam3Vo5i4i0qAoSN+zfX/s+9FCp+ixnTdclXMXEZmDwf5c3cVO5dp1w1XBXURkjhrtRxNpR+vglgR3M7vezA6Z2WEz29SKP0NEpF0G+3M8fOsqcr1ZjGKuvZZ65ZSt0PScu5n1AP8Z+HPgGPATM9vp7v+r2X+WiEi7lC92qnWjNZvpYWj9ylnjrd6ztRU3VK8GDrv7OwBm9iRwC6DgLiKpVFkuWa9apvLDoBU3XlsR3HNAeePjY8A1LfhzREQ6RmXbglq27jo0a5Yf3XhtVnBvRc49Lvk0q5jezDaa2aiZjU5MTLTgNEREOlO1G6zNvPHaiuB+DFhe9noZcLzyIHd/1N0H3H1gyZIlLTgNEZHOVO0GazNvvLYiuP8EuMLMVpjZR4A7gZ0t+HNERBIprpSy2o3X+Wp6zt3dPzCzfw3sAnqA77n7wWb/OSIiSVV+A7ZV1TLqLSMiklC1estohaqISAopuIuIpJCCu4hICim4i4ikkIK7iEgKdUS1jJlNAL+Y47ddBPyqBafTibrpWqG7rrebrhW663oX4lr/0N1jV4F2RHCfDzMbrVYClDbddK3QXdfbTdcK3XW97b5WpWVERFJIwV1EJIWSHNwfbfcJLKBuulboruvtpmuF7rretl5rYnPuIiJSXZJn7iIiUkXignsaN982s++Z2Qkze6Ns7AIze8nM3g6Pi8O4mdm3w/W/bmafat+Zz52ZLTezV8zsTTM7aGZfCeNpvd7zzOzHZnYgXO+DYXyFme0N17s9tMfGzD4aXh8O7/e18/znw8x6zGzMzJ4Pr9N8re+a2biZ7Tez0TDWEb/LiQruZZtvfwb4JHCXmX2yvWfVFH8LXF8xtgl42d2vAF4Or6F47VeEr43AdxboHJvlA+A+d/8EsAb4cvhvmNbr/R2wzt2vAlYD15vZGuBrwCPhek8Cd4fj7wZOuvvHgEfCcUnzFeDNstdpvlaA69x9dVnZY2f8Lrt7Yr6APwF2lb3eDGxu93k16dr6gDfKXh8CLg3PLwUOhed/A9wVd1wSv4BngT/vhusFFgE/pbin8K+Ac8N46fea4j4IfxKenxuOs3af+xyucRnFgLYOeJ7itpupvNZw3u8CF1WMdcTvcqJm7sRvvt287vad5RJ3fw8gPF4cxlPzdxD+Gd4P7CXF1xvSFPuBE8BLwM+ASXf/IBxSfk2l6w3vnwIuXNgzPivfBP4KOBNeX0h6rxWK+0O/aGb7zGxjGOuI3+Wm78TUYg1tvp1yqfg7MLPfB34A3OPuvzGLu6zioTFjibped58GVptZL/BD4BNxh4XHxF6vmX0WOOHu+8zs2mg45tDEX2uZte5+3MwuBl4ys7dqHLug15u0mXtDm2+nxC/N7FKA8HgijCf+78DMMhQD+xPuviMMp/Z6I+4+CbxK8V5Dr5lFk6vyaypdb3j/fOD9hT3TeVsL3Gxm7wJPUkzNfJN0XisA7n48PJ6g+MF9NR3yu5y04N5Nm2/vBDaE5xso5qaj8S+GO+9rgFPRPwGTwIpT9O8Cb7r7N8reSuv1LgkzdswsC/wZxZuNrwC3hcMqrzf6e7gN2O0hQdvp3H2zuy9z9z6K/2/udvfPk8JrBTCz3zOzP4ieA38BvEGn/C63+4bEPG5g3AD8b4p5y3/X7vNp0jVtA94Dpih+ut9NMff4MvB2eLwgHGsUK4Z+BowDA+0+/zle659S/Kfo68D+8HVDiq/3j4GxcL1vAP8+jF8O/Bg4DDwNfDSMnxdeHw7vX97ua5jndV8LPJ/maw3XdSB8HYziUaf8LmuFqohICiUtLSMiIg1QcBcRSSEFdxGRFFJwFxFJIQV3EZEUUnAXEUkhBXcRkRRScBcRSaH/D6MGMfuzX6YmAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fp = []\n",
"tp = []\n",
"\n",
"for model in models:\n",
" confusion = build_confusion_matrix(target_labels, apply_linear_model(model, data))\n",
" fp.append(confusion[1,0])\n",
" tp.append(confusion[0,0])\n",
"plt.scatter(fp, tp)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Es. 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il modello migliore è quello in alto a sinistra (max TP/FP)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 4.3603124 , -1.19540694])"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"models[np.argmax([t / f for t, f in zip(tp, fp)])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Es. 4\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"def accuracy(tp, tn, total):\n",
" return (tp + tn) / total"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"model: [ 4.3603124 -1.19540694] accuracy: 0.995\n"
]
}
],
"source": [
"accuracies = []\n",
"\n",
"for model in models:\n",
" confusion = build_confusion_matrix(target_labels, apply_linear_model(model, data))\n",
" accuracies.append(accuracy(confusion[0,0], confusion[1,1], 1000))\n",
"\n",
"print(\"model: \", models[np.argmax(accuracies)], \" accuracy: \", accuracies[np.argmax(accuracies)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il modello è lo stesso predetto dalla plot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Es. 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mi aspettavo di trovare un modello con un'accuracy alta ma non come quella trovata (0.995), perchè su 100 modelli, con due variabili comprese tra 5 e -5, generati con una funzione random uniforme mi aspetto dei valori vicini a quelli target."
]
}
],
"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
}