{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD2 : K plus proches voisins et validation croisée\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\\newcommand{\\esper}[2]{\\mathbb{E}_{#1}\\left[ #2 \\right] }$$\n",
"$$\\newcommand{\\esperc}[3]{\\mathbb{E}_{#1}\\left[ #2 \\ | \\ #3 \\right] }$$\n",
"$$\\newcommand{\\probc}[3]{\\mathbb{P}_{#1}\\left( #2 \\ | \\ #3 \\right) }$$\n",
"$$\\newcommand{\\X}{\\textbf{X}} % (X_1,X_2,...,X_n)$$\n",
"$$\\newcommand{\\Y}{\\textbf{Y}} % (Y_1,...,Y_n)$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Partie théorique : Non-consistance de la règle du plus proche voisin.\n",
"\n",
"Comme dit dans le titre nous allons chercher à démontrer que la règle du 1 plus proche voisin n'est pas consistante au sens vu dans le cours. Dans tout cet exercice, on appelle risque le risque au sens de Vapnik défini par $R(f) = \\mathbb{E}[\\ell(f(X), Y)]$.\n",
"\n",
"**1 ) Rappelez la définition de la consistance d'une règle d'apprentissage de classifieur $\\widehat{f}_n = \\mathcal{A}(D_n)$ où $\\widehat{f}_n: \\mathbb{R}^d \\longrightarrow \\lbrace 0,1 \\rbrace$.**\n",
"\n",
"On dit qu'un règle d'apprentissage est consistante pour une distribution $\\mathbb{P}_{X,Y}$ générant les données d'entrainement $D_n$ si on a :\n",
"\n",
"$$\\mathbb{E}_{D_n}{\\mathcal{R}(\\hat{f}_n}) \\underset{n\\rightarrow +\\infty}{\\longrightarrow} \\min_{f\\in\\mathcal{F}} \\mathcal{R}(f) =: \\mathcal{R}(f^*) =: R^*$$\n",
"\n",
"**Cadre de l'exercice** : On considère le cas de la classification binaire (le risque est donc le risque de la perte $0-1$) où l'on dispose d'un $n$-échantillon $D_n=(x_i,y_i)$ avec $\\mathcal{X}=[0,1], \\mathcal{Y}=\\lbrace 0,1 \\rbrace$. \n",
"\n",
"Ce $n$-échantillon est généré de manière i.i.d. comme suit:\n",
"les $x_i$ sont la réalisation (ou observation) de variables aléatoires $X_i$ suivant une certaine distribution $P$ admettant une densité $p$ par rapport à la mesure de Lebesgue sur $\\mathcal{X}$. Les étiquettes $y_i$ sont la réalisation de variables aléatoires $Y_i$ distribuées en respectant $\\forall x \\in \\mathcal{X},\\eta(x)=\\mathbb{P}(Y=1\\vert X=x)=\\alpha > \\frac{1}{2}$.\n",
"\n",
"A partir de ce $n$-échantillon, on construit un classifieur $\\widehat{f}_n = \\mathcal{A}(D_n)$. Il est important de garder à l'esprit que ce classifieur $\\widehat{f}_n$ peut être vu comme la réalisation d'une variable aléatoire dépendant de $D_n = (X_1, \\ldots, X_n, Y_1, \\ldots, Y_n)$. Etudier la consistance de la régle de classification définie par $\\widehat{f}_n$ revient à s'intéresser au comportement de la variable aléatoire $\\widehat{f}_n$ quand $n$ tend vers l'infini.\n",
"\\\\\n",
"\n",
"**2) En considérant la distribution des données décrite ci-dessus, donner l'expression du prédicteur de Bayes et le risque associé.**\n",
"\n",
"Dans le cas de la classification binaire, puisque l'on identifie l'espace de sortie $\\mathcal{Y}$ à $\\lbrace 0,1 \\rbrace$ il est usuel d'exprimer le prédicteur de Bayes comme une indicatrice, avec la notation $\\eta(x)=\\mathbb{P}(Y=1\\vert X=x)$,\n",
"$$f^*=1_{\\lbrace x\\in\\mathcal{X}, \\eta(x) \\geq 1/2\\rbrace}$$\n",
"\n",
"Avec un léger abus de notation on se permet d'écire que $\\lbrace x\\in\\mathcal{X}, \\eta(x) \\geq 1/2\\rbrace =: \\lbrace \\eta(x) \\geq 1/2\\rbrace $. En général on note donc $f^*= 1_{\\lbrace \\eta(x) \\geq 1/2\\rbrace}$.\n",
"\n",
"Dans notre cas, comme la fonction $\\eta(x)$ est constante et est plus grande que $1/2$ sur $\\mathcal{X}$ le prédicteur de Bayes correspond tout simplement au prédicteur qui prédit la classe $1$ en tout point de $\\mathcal{X}$. Le risque de Bayes est donc donné par :\n",
"%$$\\mathbb{E}[1_{Y=0}]=1-\\alpha.$$\n",
"$$\\mathbb{E}_{Y}{1_{\\lbrace Y=0\\rbrace}}=1-\\alpha.$$\n",
"\n",
"\n",
"\n",
"**3) On commence par considérer un classifieur quelconque $f$ qui ne dépend pas a priori de l'echantillon d'apprentissage $D_n$. Soit $X$ la variable aléatoire indépendante de $D_n$ qui intervient dans la définition du risque et qui correspond aux données de test. Montrer que le risque associé à $f$ peut s'exprimer comme (on remarquera qu'un classifieur binaire quelconque s'écrit $f(X)=1_{\\lbrace f(X)=1 \\rbrace}$): \n",
"$$R(f)=\\alpha-(2 \\alpha -1)\\mathbb{E}_{X}[f(X)].$$\n",
"**\n",
"\n",
"On remarque que n'importe quel classifieur binaire $f$ peut s'écrire comme $1_{\\lbrace f(x)=1 \\rbrace}$. Gardant cette remarque en tête, on écrit la définition du risque \n",
"\\begin{eqnarray*}\n",
"R(f)&=&\\mathbb{E}_{X,Y}{1_{\\lbrace f(X)\\neq Y \\rbrace}} \\nonumber \\\\\n",
" &=&\\mathbb{E}_{X,Y}{1_{\\lbrace f(X)=1 \\rbrace} 1_{\\lbrace Y=0 \\rbrace}+1_{\\lbrace f(X)=0 \\rbrace} 1_{\\lbrace Y=1 \\rbrace}} \\nonumber \\\\\n",
" &=&\\mathbb{E}_{X,Y}{f(X)1_{\\lbrace Y=0 \\rbrace}+(1-f(X))1_{\\lbrace Y=1 \\rbrace}}\\nonumber \\\\\n",
" &=&\\mathbb{E}_{X}\\mathbb{E}_ {Y}[f(X)1_{\\lbrace Y=0 \\rbrace}+(1-f(X))1_{\\lbrace Y=1 \\rbrace} \\mid X] \\\\\n",
" &=&\\mathbb{E}_{X}{f(X)(1-\\eta(X))+(1-f(X))\\eta(X)} \\\\\n",
" &=&\\alpha-(2 \\alpha -1)\\mathbb{E}_{X}{f(X)}\n",
" \\end{eqnarray*}.\n",
"\n",
"**4) On considère maintenant le classifieur construit par la règle du plus proche voisin $\\widehat{f}^1$, et on va démontrer qu'il n'est pas consistant.**\n",
"\n",
" **a) Montrer que chaque variable aléatoire $Y_i$ est indépendante de $(X_1,\\ldots, X_n)$ (on pourra se contenter d'une justification intuitive).**\n",
" \n",
" On a d'une part que comme les paires $(X_i,Y_i)$ sont iid :\n",
"$$\\mathbb{P}(Y_i=1\\vert\\ X_1,\\ldots,X_n) = \\mathbb{P}(Y_i=1\\vert\\ X_i). $$\n",
"D'autre part comme la distribution conditionnelle des $Y$ sachant $X$ ne dépend pas de $X$ on a :\n",
"$$\\mathbb{P}(Y_i=1\\vert\\ X_i) = \\mathbb{P}(Y_i=1) = \\alpha .$$\n",
"\n",
"Finalement on a bien l'indépendance de $Y_i$ avec $(X_1,\\ldots X_n)$.\n",
"\n",
"**b)\n",
"En introduisant des variables $B_i(X)$ valant 1 si l'exemple $i$ de l'échantillon est le plus proche voisin de $X$ et 0 sinon, exprimez $\\widehat{f}^1(X)$ comme une somme de variables aléatoires. **\n",
"\n",
"Avec les notations introduites, on a que $\\forall x, \\hat{f}_1(x)=\\sum^n_{i=1}B_i(x)Y_i$. \n",
"\n",
"*Remarque : il est naturel de se demander comment faire en pratique lorsqu'un point des données sur lesquelles on teste le classifieur est à égale distance de deux points d'apprentissage. Dans le formalisme de cet exercice, comme les variables ont une densité cela ne peut arriver qu'avec une probabilité nulle. En revanche, dans un contexte plus général, il est possible d'avoir avec une probabilité non nulle une nouvelle observation équidistante de deux points d'apprentissage. Plusieurs stratégies sont possibles: attribuer aléatoirement à la nouvelle observation le label de l'un ou l'autre des points dont elle est équidistant ou encore attribuer le label de l'observation de plus faible indice.*\n",
"\n",
"\n",
"\n",
"**c) Quelle est l'espérance de $Y_i$ conditionnellement à $(X_1,\\ldots, X_n)$? Donnez l'expression de l'espérance de $\\widehat{f}^1$ conditionnellement aux $(X_1, \\ldots X_n)$ (l'espérance est prise par rapport à $X$ et aux $Y_i$).**\n",
"\n",
"Pour la suite on note $\\X=(X_1,\\ldots,X_n)$ et $\\Y=(Y_1,\\ldots,Y_n)$.\n",
" L'espérance de $Y_i$ conditionnelement à $\\X$ est simplement l'espérance de $Y_i$ grâce à l'indépendance prouvée précédement.\n",
" Or, l'espérance des $Y_i$ vaut $\\alpha$ (en écrivant $\\mathbb{E}[Y_i]=\\mathbb{P}(Y_i=1)=\\mathbb{E}_X[\\mathbb{P}(Y_i=1 | \\ X)]=\\alpha$). \n",
" \n",
" On a alors :\n",
"\n",
"\\begin{eqnarray*}\n",
"\\esperc{X,\\Y}{\\hat{f}_1(X)}{\\X} &=& \\esperc{X,\\Y}{\\sum^n_{i=1}B_i(X)Y_i}{\\X} \\nonumber \\\\\n",
" &=& \\sum^n_{i=1}\\esperc{X,\\Y}{B_i(X)Y_i}{\\X} \\nonumber \\\\\n",
" &=& \\sum^n_{i=1}\\esperc{X}{B_i(X)}{\\X}\\esperc{\\Y}{Y_i}{\\X} \\text{ (indépedance de $B_i(X)$ avec $Y_i$ sachant $\\X$)} \\\\\n",
" &=& \\sum^n_{i=1}\\esperc{X}{B_i(X)}{\\X}\\alpha \\nonumber \\\\\n",
" &=& \\alpha \\esperc{X}{\\sum^n_{i=1}B_i(X)}{\\X} \\\\\n",
" &=& \\alpha\n",
" \\end{eqnarray*}.\n",
"\n",
"**5) Donner le risque de $\\widehat{f}^1$ et en déduire que la méthode des $1$-ppv n'est pas consistante.**\n",
"\n",
"On a donc $\\esper{D_n}{\\esperc{X}{\\hat{f}_1}{D_n}} = \\alpha $. \n",
"Ainsi on a $\\esper{D_n}{\\mathcal{R}(\\hat{f}_1)}=\\alpha-(2\\alpha-1)\\alpha=2\\alpha(1-\\alpha)$. \n",
"Comme $\\alpha > 1/2$, le risque de la méthode des 1-ppv est strictement supérieur au risque de la fonction cible pour tout $n$. La méthode n'est donc pas consistante pour la distribution considérée. Elle n'est donc pas universellement consistante.\n",
"\n",
"**6) On considère maintenant toujours le problème de classification binaire sur $\\mathcal{X}$ avec le classifieur $\\widehat{f}^K$ des $K$ plus proches voisins. Pour s'affranchir de certaines difficultés, on va supposer que $K$ est impair.**\n",
"\n",
"**a) En vous inspirant du raisonnement précédent montrer que le risque du classifieur $\\widehat{f}^K$ des $K$ plus proches voisins, conditionné sur les données d'entrainement $(X_1, \\ldots X_n)$ (donc l'espérance du risque de $\\widehat{f}^K$ pris par rapport aux seuls $Y_i$) peut s'exprimer en fonction de la probabilité pour une variable binomiale $U$ de paramètres $K$ et $\\alpha$ d'être plus grande que $\\frac{K}{2}$ (On rappelle que $U$ est une variable aléatoire binomiale de paramètre $\\alpha$ et $K$ si $U$ peut s'écrire comme la somme de $K$ variables de Bernoulli de paramètre $\\alpha$).**\n",
"\n",
"\n",
" Soit un $n$-échantillon. On introduit la notation $\\mathcal{V}_k(x)$ comme étant les indices des $k$ plus proches voisins de $x$ dans l'ensemble d'entrainement (voisinage de $x$ au sens des $k$ plus proches voisins). On peut alors écrire que :\n",
"\n",
"$$\\forall x \\in \\mathcal{X}, \\ \\hat{f}_k = 1_{\\lbrace\\hat{\\eta}_k(x)\\geq 1/2\\rbrace} \\text{ où } \\hat{\\eta}_k(x) = \\frac{1}{k}\\sum_{i\\in\\mathcal{V}_k(x)} Y_i $$\n",
"\n",
"On a alors que :\n",
"\n",
"\\begin{eqnarray*}\n",
"\\esperc{X,\\Y}{\\hat{f}_k(X)}{\\X} &=& \\esperc{X,\\Y}{1_{\\lbrace\\hat{\\eta}_k(x)\\geq 1/2\\rbrace}(X)}{\\X} \\nonumber \\\\\n",
" &=& \\probc{X,\\Y}{ \\hat{\\eta}_k(X)\\geq 1/2}{\\X} \\nonumber \\\\\n",
" &=&\\probc{X,\\Y}{ \\frac{1}{k}\\sum_{i\\in \\mathcal{V}_k(X)}Y_i\\geq \\frac{1}{2}}{\\X} \\nonumber \\\\\n",
" &=& \\probc{X,\\Y}{ \\sum_{i\\in \\mathcal{V}_k(X)}Y_i \\geq \\frac{k}{2}}{\\X} \\\\\n",
" &=& \\esper{\\X}{\\probc{\\Y}{\\sum_{i\\in \\mathcal{V}_k(X)}Y_i \\geq \\frac{k}{2}}{\\X ,X}} \\\\\n",
" &=& \\esper{\\X}{\\beta} \\text{(Voir justification plus bas)} \\\\\n",
" &=& \\beta, \n",
" \\end{eqnarray*}.\n",
"\n",
"où $\\beta$ est simplement la probabilité pour une variable binomiale $U$ de paramètre $k$ et $\\alpha$ d'être plus grande que $\\frac{k}{2}$. Une fois $X$ fixée à un certain $x$, la somme des $Y_i$ sur les indices de ce voisinage se comporte simplement comme une somme de $k$ Bernouilli de paramètre $\\alpha$. Ceci justifie le passage à l'avant dernière ligne. Cette probabilité est une certaine constante positive qui ne dépend que de $k$, le nombre de plus proches voisins considérés..\n",
"\n",
"**b) Montrer que l'espérance du risque associé au classifieur des $K$ plus proches voisins dans ce cas est strictement plus grand que le risque de Bayes $1-\\alpha$. On pourra remarquer que l'espérance de $\\widehat{f}^K$ est strictement plus petite que 1 par ce qui précède.**\n",
"\n",
"Le risque du classifieur des $k$ plus proches voisins vaut donc simplement $\\alpha-(2\\alpha-1)\\beta$. Ce risque ne dépend ni de $\\X$, ni de $n$. Or ce risque est strictement plus grand que le risque de Bayes $1-\\alpha$. On en déduit que la méthode des $k$ plus proches voisins n'est pas consistante si le nombre de voisins est fixé indépendemment de la taille de l'échantillon.\n",
"\n",
"**Morale de l'histoire**\n",
"De manière plus générale, il n'y a pas de choix universellement consistant du nombre de plus proches voisins, valable indépendamment du nombre de points dans l'ensemble d'entraînement. En revanche, il est possible de vérifier (en exercice à la maison par exemple) que si on considère une suite d'entiers $k_n$ telle que $\\lim_{n\\rightarrow \\infty} k_n = \\infty$ et $\\lim_{n\\rightarrow \\infty} k_n/n = 0$ alors les hypothèses du théorème de Stone sont vérifiées pour toutes les distributions. Ainsi pour la suite de règles des $k_n$ plus proches voisins, on a la consistance universelle.*\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Implémentation : K plus proches voisins et validation croisée\n",
"\n",
"Pour ce TP on va utiliser des données réelles : des chiffres manuscrits, que vous pouvez télécharger sur la page web du cours.\n",
"\n",
"Pour la classification avec $K$ classes, on appelle souvent matrice de confusion associée à des données $D_n=(x_t,y_t)$ la matrice $M \\in \\mathbb{N}^{K \\times K}$ telle que $M_{i,j}$ soit le nombre d'éléments dont la vraie classe soit $i$ et dont la classe prédite par le classifieur $g$ soit $j$.\n",
"\n",
"**NB**: Etant donné qu'il y a plus de $66000$ images dans le jeu de données, on va travailler avec un sous ensemble de ces $66000$ images afin de ne pas dépasser la mémoire disponible de votre ordinateur.\n",
"\n",
"**1) Commencez donc par reprendre contact avec les données. Elles sont composées d'un vecteur de labels `y` et d'images 28 pixels par 28 sous forme d'une matrice `x` de vecteurs linéarisés (chaque ligne de la matrice `x` correspond à une image).**\n",
"\n",
"**a) Mettez quelques images sous forme matricielle avec `reshape` et affichez les.**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/vnd.plotly.v1+html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import plotly\n",
"import numpy as np\n",
"import plotly.plotly as py\n",
"import plotly.graph_objs as go\n",
"plotly.offline.init_notebook_mode()\n",
"import matplotlib.pyplot as plt\n",
"import scipy.io as sio\n",
"from scipy import stats\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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ld396d01aQDYCGb5mXC6+9Ikly577MwlX3eSV0z/AAAzcMUsABhEhAFgEBEGgEFEGAAGEWEAGESEAWAQEQaAQWryK74Ddlw1Zsewi/bdd9+5x55wwgkL7fuFL3zh3GO/4zu+Y6F9P/axj11o/CLe+973LjT+ta997dxjL7/88oX2vX379oXGs+5cvcilmB0JA8AgIgwAg4gwAAwiwgAwiAgDwCAiDACDiDAADCLCADCICAPAICIMAIOIMAAMIsIAMIgIA8AgIgwAg4gwAAzifsJseE972tMWGr/IvWkX3fdI11577ULjP/OZz8w99qijjlpo34985CPnHnvZZZcttO/nPve5c4+94447Fto3Q7ifMACsRyIMAIOIMAAMIsIAMIgIA8AgIgwAg4gwAAwiwgAwiAgDwCAiDACDiDAADCLCADCICAPAICIMAIPsPXoCsLtt3rx5ofGL3I5w0dsBvv71r5977I033rjQvq+66qqFxt91111zjz322GMX2vdJJ50099jTTz99oX2feuqpc48977zzFto3648jYQAYRIQBYBARBoBBRBgABhFhABhEhAFgEBEGgEFEGAAGEWEAGESEAWAQEQaAQUQYAAYRYQAYRIQBYBARBoBB3E+YDe/ss89eaPw73vGOuccuej/h22+/faHx69WVV1650PgjjjhijWay6w499NBh+2b9cSQMAIOIMAAMIsIAMIgIA8AgIgwAg4gwAAwiwgAwiAgDwCAiDACDiDAADCLCADCICAPAICIMAIOIMAAMIsIAMIj7CbPh3XPPPQuNv/zyy9doJgAP5EgYAAYRYQAYRIQBYBARBoBBRBgABhFhABhEhAFgkJkiXFXPrKrrq2prVb3qQdZ7blV1VW1auykCwMa0aoSraq8k5yc5McmRSZ5XVUeusN6jk/xEkvev9SQBYCOa5Uj4mCRbu/uG7t6e5C1JNq+w3s8lOTfJvWs4PwDYsGaJ8EFJbl6yvG362BdU1dFJDunud6zh3ABgQ5vl2tG1wmP9hSerHpbkdUleuOqGqk5LctqskwOAjWyWI+FtSQ5ZsnxwkluWLD86yZOS/GVV3ZTk2CRbVvpwVndf0N2butsHtwDY480S4auSHF5Vj6uqfZKcnGTL/U92913dfWB3H9bdhyW5MslzuvsDu2XGALBBrHo6urt3VNVLk7wryV5J3tDd11XV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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Chargement des données\n",
"data = sio.loadmat('mnist_digits.mat')\n",
"X_total = np.array(data['x'])\n",
"Y_total = np.array(data['y'])\n",
"n_total = X_total.shape[0]\n",
"\n",
"# Affichage d'une image\n",
"ind_im = 20000\n",
"im = X_total[ind_im,:].reshape((28, 28))\n",
"\n",
"fig, (ax1) = plt.subplots(nrows=1, figsize=(8,8))\n",
"ax1.set_title('Image nombre MNIST')\n",
"ax1.imshow(im, extent=[0,100,0,1], aspect=100, cmap='gray')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**b) Sélectionnez $6000$ images au hasard dans le jeu de données.**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"n = 6000\n",
"perm = np.random.permutation(n_total)\n",
"X_perm = X_total[perm]\n",
"Y_perm = Y_total[perm]\n",
"X_small = X_perm[:n]\n",
"Y_small = Y_perm[:n]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**c) Séparez les images en deux parties (dans les proportions $1/3,2/3$ par exemple) : un ensemble d'entraînement et un ensemble de test.**"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"alpha = 1/3\n",
"n_train = int(n*alpha)\n",
"n_test = n-n_train\n",
"X_train = X_small[:n_train] \n",
"X_test = X_small[n_train:]\n",
"Y_train = Y_small[:n_train]\n",
"Y_test = Y_small[n_train:]"
]
},
{
"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": {},
"output_type": "display_data"
}
],
"source": [
"# affichage de plusieurs numéros de la base de donnée\n",
"X_display = X_train[:128,:].T\n",
"test = np.reshape(X_display, (28,28,128))\n",
"\n",
"DISPLAY = np.zeros([8*28, 16*28, 1])\n",
"size_h = 28\n",
"size_w = 28\n",
"for i in range(128):\n",
" DISPLAY[i//16*size_h:(i//16+1)*size_h, i % 16 * size_w: (i % 16 +1) * size_w, 0] = test[:,:,i]\n",
"\n",
"fig, (ax1) = plt.subplots(nrows=1, figsize=(8,8))\n",
"ax1.set_title('Image nombre MNIST')\n",
"ax1.imshow(DISPLAY[:,:,0], extent=[0,160,0,80], aspect='equal', cmap='gray')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**2) On va maintenant implémenter la règle de classification par plus proches voisins. Pour cela, vous pourrez avoir besoin de la fonction `cdist` du module `scipy.spatial.distance`. Cette fonction permet, étant donné deux matrices de design de calculer les distances euclidiennes au carré entre les points.**\n",
"\n",
"**a) Ecrivez une fonction qui prenne en entrée le nombre de plus proches voisins désirés, les données d'entrainement et les données de test et ressorte la matrice de confusion sur l'ensemble de test.**"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Calculs importants et lourd (à faire une seule fois)\n",
"from scipy.spatial.distance import cdist\n",
"\n",
"dist_test_train = cdist(X_test, X_train, 'euclidean')\n",
"dist_train_train = cdist(X_train, X_train, 'euclidean')\n",
"ind_dist_test_train = np.argsort(dist_test_train, axis=1)\n",
"ind_dist_train_train = np.argsort(dist_train_train, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Question 8.a)\n",
"# Ici on triche un peu et on utilise la fonction scikit learn \n",
"# pour calculer la matrice de confusion\n",
"from sklearn.metrics import confusion_matrix\n",
"\n",
"def get_confusion(ind_dist_test_train, Y_test, Y_train, k):\n",
" P = np.squeeze(Y_train[ind_dist_test_train[:, :k]])\n",
" if k==1:\n",
" Y_hat = P\n",
" else:\n",
" Y_hat, _ = stats.mode(P, axis=1)\n",
" return confusion_matrix(Y_test, Y_hat)\n",
" \n",
" \n",
"import itertools\n",
"def plot_confusion_matrix(cm, classes,\n",
" normalize=False,\n",
" title='Matrice de confusion',\n",
" cmap=plt.cm.Blues):\n",
" \"\"\"\n",
" This function prints and plots the confusion matrix.\n",
" Normalization can be applied by setting `normalize=True`.\n",
" \"\"\"\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(classes))\n",
" plt.xticks(tick_marks, classes, rotation=45)\n",
" plt.yticks(tick_marks, classes)\n",
"\n",
" if normalize:\n",
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
" print(\"Confusion matrix, avec normalisation\")\n",
" else:\n",
" print('Confusion matrix, sans normalisation')\n",
"\n",
"\n",
" thresh = cm.max() / 2.\n",
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
" plt.text(j, i, cm[i, j],\n",
" horizontalalignment=\"center\",\n",
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
"\n",
" plt.tight_layout()\n",
" plt.ylabel('Vrai label')\n",
" plt.xlabel('Label predit')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix, sans normalisation\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Affichage d'une matrice de confusion\n",
"k = 1\n",
"conf_test = get_confusion(ind_dist_test_train, Y_test, Y_train, k)\n",
"plot_confusion_matrix(conf_test, range(10))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**b) Affichez l'erreur de classification sur les ensembles d'entraînement et de test en fonction du nombre de $k$, nombre de plus proches voisins pris en compte (attention la complexité est décroissante avec le nombre de voisins pris en compte). Vous pouvez faire varier $k$ entre 1 et 20 par exemple.**"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"K_max = 20\n",
"err_test = []\n",
"err_train = []\n",
"# Faire la boucle uniquement sur les nombres impairs\n",
"for k in np.arange(1,K_max,2):\n",
" conf_test = get_confusion(ind_dist_test_train, Y_test, Y_train, k)\n",
" err_test.append((100.*(n_test-np.trace(conf_test))) / n_test)\n",
" conf_train = get_confusion(ind_dist_train_train, Y_train, Y_train, k)\n",
" err_train.append((100.*(n_train-np.trace(conf_train))) / n_test)\n",
"\n",
"plt.plot(np.arange(1,K_max,2),err_test, label='test')\n",
"plt.plot(np.arange(1,K_max,2),err_train, label='train')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**c) Séparez votre ensemble d'entraînement en un ensemble d'entraînement réduit et un ensemble de validation (on appelle en général cette technique la validation simple). En utilisant le code précédent, écrivez une fonction qui va utiliser l'ensemble de validation pour sélectionner le meilleur paramètre nombre de voisins $k$ au sens du nombre d'erreurs commises sur l'ensemble. **"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fold 0 sur 5\n",
"Fold 1 sur 5\n",
"Fold 2 sur 5\n",
"Fold 3 sur 5\n",
"Fold 4 sur 5\n",
"Erreur moyenne sur les sous ensembles:\n",
"\n",
"[ 9.22961273 10.14581833 10.40498448 10.99233999 10.73454787 11.09712633\n",
" 11.85634982 12.76745283 12.72446628 13.28150407]\n",
"\n",
"******************\n",
" k choisi = 1 \n",
"******************\n",
"\n"
]
}
],
"source": [
"n_fold = 5\n",
"K_max = 20\n",
"K_range = np.arange(1, K_max, 2)\n",
"# Création des différents folds\n",
"ind_fold = np.floor(n_fold*np.random.rand(n_train))\n",
"err_val_fold = np.zeros([n_fold, len(K_range)])\n",
"\n",
"for f in range(n_fold):\n",
" print(\"Fold %d sur %d\" % (f, n_fold))\n",
" X_train_cv = X_train[ind_fold != f, :]\n",
" Y_train_cv = Y_train[ind_fold != f, :]\n",
" X_val_cv = X_train[ind_fold == f, :]\n",
" Y_val_cv = Y_train[ind_fold == f, :]\n",
" n_val = np.size(Y_val_cv)\n",
" # Preprocessing\n",
" dist_val_train = cdist(X_val_cv, X_train_cv, 'euclidean')\n",
" ind_dist_val_train = np.argsort(dist_val_train, axis=1)\n",
" for i, k in enumerate(K_range):\n",
" conf_val = get_confusion(ind_dist_val_train, Y_val_cv, Y_train_cv, k)\n",
" err_val_fold[f, i] = (100. *(n_val-np.trace(conf_val))) / n_val\n",
"\n",
"# Resultat de la validation croisée \n",
"average_err_on_folds = np.mean(err_val_fold, axis=0)\n",
"k_select = K_range[np.argmin(average_err_on_folds)]\n",
"print('Erreur moyenne sur les sous ensembles:\\n')\n",
"print(average_err_on_folds)\n",
"print(\"\\n******************\\n k choisi = %d \\n******************\\n\" % k_select)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**d) Séparez plusieurs fois de manière aléatoire votre ensemble d'entraînement. L'estimateur du nombre de plus proches voisins est il stable ? **"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**3) On souhaite désormais sélectionner le nombre de plus proches voisins optimal par validation croisée. \n",
"Vous allez, en utilisant les données d'entraînement implémenter la technique de la K-fold validation croisée pour K=8.\n",
"Faites le partitionnement des données d'entraînement plusieurs fois de manière aléatoire et regardez le comportement du nombre de plus proches voisins sélectionné. Que remarquez vous ?**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}