UniTO/anno3/apprendimento_automatico/esercizi/1/.ipynb_checkpoints/coverage_plots-checkpoint.ipynb
Francesco Mecca 84096d29f6 esercizi
2020-07-03 19:08:23 +02:00

472 lines
86 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": 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([[-60, -58],\n",
" [-54, 99],\n",
" [ 95, 99],\n",
" ...,\n",
" [ -3, -80],\n",
" [ 45, -64],\n",
" [ 14, 59]])"
]
},
"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": [
"<matplotlib.collections.PathCollection at 0x7f068e473b90>"
]
},
"execution_count": 5,
"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": 6,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.9118242 , -0.90045672],\n",
" [-3.94382217, -3.98527811],\n",
" [-1.18697017, 0.80016719],\n",
" [-1.85839332, 4.98952722],\n",
" [ 1.07261938, -0.90803895],\n",
" [-4.53758697, -4.30257501],\n",
" [-1.17461754, -2.39901897],\n",
" [ 2.34774061, -4.72969268],\n",
" [ 2.47747169, 2.77914928],\n",
" [-1.11617222, -4.16037991],\n",
" [ 1.4716821 , 0.88162217],\n",
" [ 1.78297491, -1.44883212],\n",
" [ 1.58199674, 4.6052321 ],\n",
" [ 3.99068967, -4.28056417],\n",
" [-0.16221614, -2.24741286],\n",
" [ 2.32933961, 0.28596881],\n",
" [-4.70438519, 2.44675435],\n",
" [-3.29578251, -3.86079991],\n",
" [-2.15187954, -3.38596945],\n",
" [-1.31823703, 1.6351425 ],\n",
" [-3.13072307, 1.32378202],\n",
" [ 2.76175045, -1.78814111],\n",
" [ 2.73156012, -2.64332344],\n",
" [ 1.64996223, 1.83230706],\n",
" [ 3.31936639, 0.2228602 ],\n",
" [ 2.26694906, 0.63193375],\n",
" [-2.51414076, 4.51560257],\n",
" [ 0.27215252, -1.67282386],\n",
" [-3.64167257, -0.14559744],\n",
" [-4.30424639, -3.37589157],\n",
" [ 3.01745299, 3.51058308],\n",
" [ 1.35223951, -3.06364559],\n",
" [ 4.94253085, -1.60716143],\n",
" [-4.36074161, -3.10693624],\n",
" [ 3.10628154, 3.49373291],\n",
" [-2.74311538, -4.29366027],\n",
" [-1.89979198, 1.41734176],\n",
" [ 1.9159884 , 1.23531441],\n",
" [-2.15457615, 1.1728522 ],\n",
" [ 4.60642972, 3.51823611],\n",
" [ 1.59513489, 0.56356173],\n",
" [-0.32910123, 1.31288732],\n",
" [ 1.36686363, 0.96076635],\n",
" [-3.9091037 , 0.96514774],\n",
" [ 4.37669631, -0.8778982 ],\n",
" [-3.13000071, -2.59206421],\n",
" [ 0.85730862, 3.96159211],\n",
" [ 2.91165311, 2.24727293],\n",
" [ 2.16991404, -3.35593884],\n",
" [-0.38522275, -1.67180888],\n",
" [-1.91436601, 3.62229527],\n",
" [ 1.31583377, -1.93048586],\n",
" [ 0.52322948, 0.91378549],\n",
" [ 0.69736315, 3.05799437],\n",
" [-2.33259618, 4.23093531],\n",
" [-0.01882034, -3.16737335],\n",
" [-1.85567722, -0.16700837],\n",
" [ 4.74309296, 3.57241682],\n",
" [ 0.96709141, -1.3653478 ],\n",
" [-2.98210548, -0.11106027],\n",
" [-3.86461267, 3.62193573],\n",
" [ 2.83976749, 2.94566098],\n",
" [ 3.76245288, -2.64933837],\n",
" [ 4.58809654, 1.23109222],\n",
" [ 4.84968707, -2.75644381],\n",
" [-1.54471238, 4.83523772],\n",
" [ 1.89738986, 3.61006974],\n",
" [ 1.89077461, 3.96448192],\n",
" [ 0.58264712, -3.48158676],\n",
" [-3.70699049, -1.55128007],\n",
" [-1.74431095, -1.26414456],\n",
" [ 4.95881191, -3.89363783],\n",
" [-3.49425476, 4.69333757],\n",
" [-1.13661494, -4.86289907],\n",
" [-0.80047881, -2.36304971],\n",
" [-2.22814782, -1.71573374],\n",
" [ 1.93181752, -2.84184699],\n",
" [-2.01459345, 3.04690045],\n",
" [ 1.77370361, 2.63596514],\n",
" [-1.62391354, 3.9170375 ],\n",
" [-1.16831826, -0.35730506],\n",
" [ 2.81017534, 4.68734215],\n",
" [ 3.50859446, 3.53556171],\n",
" [-3.00404934, -0.31632676],\n",
" [-3.19738369, -0.50324866],\n",
" [-1.14409139, 3.06816086],\n",
" [-4.67354814, 1.12585223],\n",
" [ 2.62801894, -2.11531302],\n",
" [-3.26599429, -2.09618265],\n",
" [-1.77991357, -3.54630238],\n",
" [ 1.83623843, -2.97438757],\n",
" [-1.90333658, 0.66363691],\n",
" [ 2.61705961, 0.10912733],\n",
" [ 1.76458691, 1.21896092],\n",
" [-2.5188483 , 0.77614823],\n",
" [ 1.75016557, 2.0592426 ],\n",
" [ 4.82096292, -0.0816393 ],\n",
" [-2.66030292, -2.54501908],\n",
" [ 1.90560799, -1.66171268],\n",
" [-1.30050042, -1.94071811]])"
]
},
"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",
"<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": [
"# Exercise 1\n",
"Write a function that, taken two list of labelling, builds the confusion matrix"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[416. 99.]\n",
" [ 77. 408.]]\n"
]
}
],
"source": [
"def confusion_matrix(labels1, labels2):\n",
" assert len(labels1) == len(labels2), \"Label arrays must be of same length\"\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\n",
"\n",
"print(confusion_matrix(apply_linear_model(target_model, data), apply_linear_model(models[0], data)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise 2\n",
"For each model in models plot the [FP,TP] pairs on a scatter plot\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f065f9cecd0>"
]
},
"execution_count": 8,
"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": [
"confusion_matrices = [confusion_matrix(target_labels, apply_linear_model(model, data))for model in models]\n",
"\n",
"fp, tp = list(map(lambda cm: cm[1,0], confusion_matrices)), list(map(lambda cm: cm[0,0], confusion_matrices))\n",
"plt.scatter(fp, tp)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise three\n",
"By looking at the plot, which is the best model?\n",
"\n",
"Answer: The best model is the one at the top left corner, which has the highest TP/FP ratio"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise four\n",
"Find the model with the best accuracy and compare it with the target model, is it close? Is it the model you would have picked up visually from the scatter plot?"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Plot best: [ 4.37669631 -0.8778982 ], Accuracy best: [ 4.37669631 -0.8778982 ], with accuracy: 0.986\n"
]
}
],
"source": [
"def accuracy(confusion_matrix):\n",
" return sum(confusion_matrix.diagonal()) / sum(sum(confusion_matrix))\n",
"\n",
"models_acc = list(map(lambda m: (m[0], accuracy(m[1])), zip(models, confusion_matrices)))\n",
"models_acc = sorted(models_acc, key=lambda ma: ma[1], reverse=True)\n",
"\n",
"plot_best = models[np.argmax([t / f for t, f in zip(tp, fp)])]\n",
"accuracy_best = models_acc[0]\n",
"\n",
"print(f'Plot best: {plot_best}, Accuracy best: {accuracy_best[0]}, with accuracy: {accuracy_best[1]}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise 5\n",
"Yes, because the models were generated with a uniform distributions of variables of range [-5;5]"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 4.37669631, -0.8778982 ]), 0.986)"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"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
}