diff --git a/.ipynb_checkpoints/TP2_prog1.py-checkpoint.ipynb b/.ipynb_checkpoints/TP2_prog1.py-checkpoint.ipynb index 3fd8ceb..c344475 100644 --- a/.ipynb_checkpoints/TP2_prog1.py-checkpoint.ipynb +++ b/.ipynb_checkpoints/TP2_prog1.py-checkpoint.ipynb @@ -2,11 +2,12 @@ "cells": [ { "cell_type": "code", - "execution_count": 31, + "execution_count": 1, "id": "3eb7a65b", "metadata": {}, "outputs": [], "source": [ + "####### Import #######\n", "from sklearn.datasets import fetch_openml\n", "import sklearn\n", "import matplotlib.pyplot as plt\n", @@ -20,41 +21,35 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "a8812842", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Classe : 5\n" - ] - } - ], + "outputs": [], "source": [ + "####### Loading data #######\n", "mnist = fetch_openml('mnist_784',as_frame=False)\n", - "images = mnist.data.reshape((-1, 28, 28))\n", - "plt.imshow(images[0],cmap=plt.cm.gray_r,interpolation=\"nearest\")\n", - "plt.show()\n", - "print(\"Classe : \", mnist.target[0])" + "# images = mnist.data.reshape((-1, 28, 28))\n", + "# plt.imshow(images[0],cmap=plt.cm.gray_r,interpolation=\"nearest\")\n", + "# plt.show()\n", + "# print(\"Classe : \", mnist.target[0])" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, + "id": "6ec263be", + "metadata": {}, + "outputs": [], + "source": [ + "####### Division des données pour train/test #######\n", + "# xtrain data set d'entraînement et ytrain étiquettes de xtrain\n", + "# xtest dataset de prédiction et ytest étiquettes de xtest\n", + "xtrain, xtest, ytrain, ytest = model_selection.train_test_split(mnist.data, mnist.target,train_size=0.7)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "id": "3b1a54ef", "metadata": {}, "outputs": [ @@ -62,11 +57,123 @@ "name": "stdout", "output_type": "stream", "text": [ - "Score échantillon de test : 0.9471428571428572\n", - "Classe image 4 : 4\n", - "Classe prédite image 4 : 4\n", - "Précision pour chaque classe : [0.9722488 0.97494781 0.95077973 0.94289898 0.95481336 0.93585101\n", - " 0.96747967 0.96834012 0.88457808 0.91254205]\n" + "Iteration 1, loss = 3.52359837\n", + "Iteration 2, loss = 0.85171280\n", + "Iteration 3, loss = 0.60056326\n", + "Iteration 4, loss = 0.48266587\n", + "Iteration 5, loss = 0.39886573\n", + "Iteration 6, loss = 0.34521704\n", + "Iteration 7, loss = 0.30099640\n", + "Iteration 8, loss = 0.27160238\n", + "Iteration 9, loss = 0.24706114\n", + "Iteration 10, loss = 0.22797524\n", + "Iteration 11, loss = 0.21505191\n", + "Iteration 12, loss = 0.19770258\n", + "Iteration 13, loss = 0.19077859\n", + "Iteration 14, loss = 0.17622058\n", + "Iteration 15, loss = 0.16944141\n", + "Iteration 16, loss = 0.16224071\n", + "Iteration 17, loss = 0.15492558\n", + "Iteration 18, loss = 0.15738929\n", + "Iteration 19, loss = 0.15676172\n", + "Iteration 20, loss = 0.14685813\n", + "Iteration 21, loss = 0.14650585\n", + "Iteration 22, loss = 0.13999060\n", + "Iteration 23, loss = 0.13472855\n", + "Iteration 24, loss = 0.13288158\n", + "Iteration 25, loss = 0.12751806\n", + "Iteration 26, loss = 0.12714259\n", + "Iteration 27, loss = 0.12544878\n", + "Iteration 28, loss = 0.11883595\n", + "Iteration 29, loss = 0.11480813\n", + "Iteration 30, loss = 0.11316260\n", + "Iteration 31, loss = 0.11660448\n", + "Iteration 32, loss = 0.10874878\n", + "Iteration 33, loss = 0.10528808\n", + "Iteration 34, loss = 0.10263948\n", + "Iteration 35, loss = 0.10223171\n", + "Iteration 36, loss = 0.09870415\n", + "Iteration 37, loss = 0.09606162\n", + "Iteration 38, loss = 0.09471765\n", + "Iteration 39, loss = 0.09212006\n", + "Iteration 40, loss = 0.09099822\n", + "Iteration 41, loss = 0.08554237\n", + "Iteration 42, loss = 0.08749541\n", + "Iteration 43, loss = 0.08972260\n", + "Iteration 44, loss = 0.08350223\n", + "Iteration 45, loss = 0.08801550\n", + "Iteration 46, loss = 0.08368898\n", + "Iteration 47, loss = 0.07761680\n", + "Iteration 48, loss = 0.07578025\n", + "Iteration 49, loss = 0.08065128\n", + "Iteration 50, loss = 0.07764694\n", + "Iteration 51, loss = 0.07168844\n", + "Iteration 52, loss = 0.07150503\n", + "Iteration 53, loss = 0.07363849\n", + "Iteration 54, loss = 0.07338743\n", + "Iteration 55, loss = 0.07203880\n", + "Iteration 56, loss = 0.07285884\n", + "Iteration 57, loss = 0.07188750\n", + "Iteration 58, loss = 0.06498561\n", + "Iteration 59, loss = 0.06886073\n", + "Iteration 60, loss = 0.06764328\n", + "Iteration 61, loss = 0.06734936\n", + "Iteration 62, loss = 0.06304752\n", + "Iteration 63, loss = 0.06348438\n", + "Iteration 64, loss = 0.06367554\n", + "Iteration 65, loss = 0.06463911\n", + "Iteration 66, loss = 0.06254784\n", + "Iteration 67, loss = 0.06314946\n", + "Iteration 68, loss = 0.05808523\n", + "Iteration 69, loss = 0.05875598\n", + "Iteration 70, loss = 0.06471586\n", + "Iteration 71, loss = 0.05205066\n", + "Iteration 72, loss = 0.05317537\n", + "Iteration 73, loss = 0.06049916\n", + "Iteration 74, loss = 0.05569290\n", + "Iteration 75, loss = 0.05575822\n", + "Iteration 76, loss = 0.05076569\n", + "Iteration 77, loss = 0.05599933\n", + "Iteration 78, loss = 0.05358316\n", + "Iteration 79, loss = 0.05719498\n", + "Iteration 80, loss = 0.05800077\n", + "Iteration 81, loss = 0.05325157\n", + "Iteration 82, loss = 0.05750329\n", + "Iteration 83, loss = 0.05070814\n", + "Iteration 84, loss = 0.05080239\n", + "Iteration 85, loss = 0.04880118\n", + "Iteration 86, loss = 0.05394842\n", + "Iteration 87, loss = 0.04530197\n", + "Iteration 88, loss = 0.04809415\n", + "Iteration 89, loss = 0.05475923\n", + "Iteration 90, loss = 0.04973714\n", + "Iteration 91, loss = 0.05358211\n", + "Iteration 92, loss = 0.04174303\n", + "Iteration 93, loss = 0.04926893\n", + "Iteration 94, loss = 0.04678085\n", + "Iteration 95, loss = 0.05342765\n", + "Iteration 96, loss = 0.04373367\n", + "Iteration 97, loss = 0.04833882\n", + "Iteration 98, loss = 0.05130827\n", + "Iteration 99, loss = 0.04382581\n", + "Iteration 100, loss = 0.04884660\n", + "Score échantillon de test : 0.9494761904761905\n", + "Classe image 4 : 8\n", + "Classe prédite image 4 : 8\n", + "Précision pour chaque classe : \n", + " [0.98320158 0.97635135 0.91084559 0.9264637 0.95507246 0.94917946\n", + " 0.96108767 0.9616451 0.93561368 0.93326839]\n", + "Matrice de confusion :\n", + " [[1990 2 11 0 1 3 14 2 23 6]\n", + " [ 0 2312 23 6 1 1 0 9 14 0]\n", + " [ 4 7 1982 16 9 1 7 18 23 2]\n", + " [ 3 12 50 1978 1 22 1 15 18 21]\n", + " [ 4 7 15 0 1977 3 12 7 4 40]\n", + " [ 6 3 2 46 1 1793 24 5 18 20]\n", + " [ 1 2 10 1 8 19 2050 1 9 0]\n", + " [ 2 7 27 39 7 3 0 2081 5 22]\n", + " [ 4 10 50 24 10 27 23 6 1860 26]\n", + " [ 10 6 6 25 55 17 2 20 14 1916]]\n" ] }, { @@ -79,9 +186,7 @@ } ], "source": [ - "# xtrain data set d'entraînement et ytrain étiquettes de xtrain\n", - "# xtest dataset de prédiction et ytest étiquettes de xtest\n", - "xtrain, xtest, ytrain, ytest = model_selection.train_test_split(mnist.data, mnist.target,train_size=0.7)\n", + "####### Premier modèle de Classifier #######\n", "\n", "#Entraîne le classifier\n", "clf = neural_network.MLPClassifier(random_state=1, max_iter=100, hidden_layer_sizes=(50))\n", @@ -102,40 +207,13 @@ "print(\"Classe prédite image 4 : \", pred[3])\n", "\n", "#Calcul de la précision avec metrics.precision_score\n", - "print(\"Précision pour chaque classe : \", metrics.precision_score(ytest, pred,average=None))" + "print(\"Précision pour chaque classe : \\n\", metrics.precision_score(ytest, pred,average=None))\n", + "print(\"Matrice de confusion :\\n\", metrics.confusion_matrix(ytest, pred))" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "6068ca09", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Précision pour chaque classe :\n", - " [[2032 1 2 0 1 6 6 0 34 6]\n", - " [ 0 2335 14 5 6 2 5 8 13 2]\n", - " [ 13 7 1951 23 17 4 11 25 67 6]\n", - " [ 2 4 26 1932 0 44 2 13 45 23]\n", - " [ 3 6 9 1 1944 2 8 6 6 48]\n", - " [ 7 8 5 32 3 1809 22 3 29 12]\n", - " [ 16 4 10 0 11 18 2023 0 18 0]\n", - " [ 7 4 18 15 14 6 0 2141 5 56]\n", - " [ 2 21 16 17 8 27 13 1 1824 29]\n", - " [ 8 5 1 24 32 15 1 14 21 1899]]\n" - ] - } - ], - "source": [ - "print(\"Précision pour chaque classe :\\n\", metrics.confusion_matrix(ytest, pred))" - ] - }, - { - "cell_type": "code", - "execution_count": 25, + "execution_count": 15, "id": "5a4a5485", "metadata": {}, "outputs": [ @@ -143,33 +221,114 @@ "name": "stdout", "output_type": "stream", "text": [ - "Liste des scores : [0.937952380952381, 0.9632857142857143, 0.9618571428571429, 0.8938571428571429, 0.5494761904761905, 0.11290476190476191, 0.11290476190476191, 0.11290476190476191, 0.11290476190476191, 0.11290476190476191]\n" + "Computing for 1 hidden layers...\n", + "Computing for 10 hidden layers...\n", + "Computing for 19 hidden layers...\n", + "Computing for 28 hidden layers...\n", + "Computing for 37 hidden layers...\n", + "Computing for 46 hidden layers...\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mpred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxtest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;31m# Probabilités des prédictions sur xtest\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mpred_proba\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict_proba\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxtest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;31m# On calcule le score obtenu sur xtest avec les étiquettes ytest\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mlist_training_times\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt2\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mt1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/insa/anaconda/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py\u001b[0m in \u001b[0;36mpredict_proba\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 1117\u001b[0m \"\"\"\n\u001b[1;32m 1118\u001b[0m \u001b[0mcheck_is_fitted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1119\u001b[0;31m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_pass_fast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1121\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_outputs_\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/insa/anaconda/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py\u001b[0m in \u001b[0;36m_forward_pass_fast\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0mactivation\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintercepts_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_layers_\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 145\u001b[0;31m \u001b[0mhidden_activation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mactivation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 146\u001b[0m \u001b[0moutput_activation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mACTIVATIONS\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mout_activation_\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0moutput_activation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mactivation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/insa/anaconda/lib/python3.8/site-packages/sklearn/neural_network/_base.py\u001b[0m in \u001b[0;36minplace_relu\u001b[0;34m(X)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0mThe\u001b[0m \u001b[0minput\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \"\"\"\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaximum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ + "####### Variations du nombres de couches de 1 à 100 couches cachées #######\n", + "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "\n", - "# xtrain data set d'entraînement et ytrain étiquettes de xtrain\n", - "# xtest dataset de prédiction et ytest étiquettes de xtest\n", - "xtrain, xtest, ytrain, ytest = model_selection.train_test_split(mnist.data, mnist.target,train_size=0.7)\n", - "\n", - "list_scores = []\n", + "list_training_times = []\n", + "list_precision_scores = []\n", + "list_error_metrics = []\n", " \n", - "for i in range(1, 101, 10):\n", + "for i in range(1, 101, 9):\n", + " print(\"Computing for \", i, \" hidden layers...\")\n", " #Entraîne le classifier\n", " clf = neural_network.MLPClassifier(random_state=1, max_iter=20, hidden_layer_sizes=((50,) * i))\n", + " t1 = round(time.time(),5)\n", " clf.fit(xtrain, ytrain)\n", - "\n", + " t2 = round(time.time(),5)\n", " #Prédiction sur le jeu de tests\n", " pred = clf.predict(xtest)\n", " # Probabilités des prédictions sur xtest\n", " pred_proba = clf.predict_proba(xtest)\n", " # On calcule le score obtenu sur xtest avec les étiquettes ytest\n", - " list_scores += [clf.score(xtest, ytest)]\n", + " list_training_times.append(t2-t1)\n", + " list_precision_scores.append(clf.score(xtest, ytest))\n", + " list_error_metrics.append(metrics.precision_score(ytest, pred,average=None))\n", " \n", - "print(\"Liste des scores : \", list_scores)" + "print(\"Liste des scores : \\n\", list_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b961ed8", + "metadata": {}, + "outputs": [], + "source": [ + "##### x coordinates\n", + "x = np.arange(1,101,9)\n", + "training_times = []\n", + "precision_scores = []\n", + "error_metrics = []\n", + "\n", + "### Create plot\n", + "fig, figs = plt.subplots(nrows=3, ncols=1, figsize=(15,10))\n", + "fig.tight_layout(pad=3.0)\n", + "figs[0].plot(x,training_times, marker='o', color='r')\n", + "figs[1].plot(x,precision_scores, marker='o', color='b')\n", + "figs[2].plot(x,error_metrics, marker='o', color='g')\n", + "\n", + "### Add every x coordinates\n", + "figs[0].tick_params(axis='both', which='both', labelsize=7, labelbottom=True)\n", + "figs[1].tick_params(axis='both', which='both', labelsize=7, labelbottom=True)\n", + "figs[2].tick_params(axis='both', which='both', labelsize=7, labelbottom=True)\n", + "\n", + "for i in range(len(x)):\n", + " figs[0].annotate(training_times[i], # this is the text\n", + " (x[i],training_times[i]), # these are the coordinates to position the label\n", + " textcoords=\"offset points\", # how to position the text\n", + " xytext=(15,5), # distance from text to points (x,y)\n", + " ha='center') # horizontal alignment can be left, right or center\n", + " figs[1].annotate(precision_scores[i], # this is the text\n", + " (x[i],precision_scores[i]), # these are the coordinates to position the label\n", + " textcoords=\"offset points\", # how to position the text\n", + " xytext=(15,5), # distance from text to points (x,y)\n", + " ha='center') # horizontal alignment can be left, right or center\n", + " figs[2].annotate(error_metrics[i], # this is the text\n", + " (x[i],error_metrics[i]), # these are the coordinates to position the label\n", + " textcoords=\"offset points\", # how to position the text\n", + " xytext=(15,5), # distance from text to points (x,y)\n", + " ha='center') # horizontal alignment can be left, right or center\n", + "\n", + "figs[0].set_xticks(x)\n", + "figs[1].set_xticks(x)\n", + "figs[2].set_xticks(x)\n", + " \n", + "### Add title and axis names\n", + "figs[0].title.set_text('Mean scores for k neighbors')\n", + "figs[1].title.set_text('Mean training times for k neighbors')\n", + "figs[2].title.set_text('Mean predicting times for k neighbors')\n", + "figs[0].set_xlabel('N_neighbors')\n", + "figs[1].set_xlabel('N_neighbors')\n", + "figs[2].set_xlabel('N_neighbors')\n", + "figs[0].set_ylabel('Score')\n", + "figs[1].set_ylabel('Training times (in ms)')\n", + "figs[2].set_ylabel('Predicting times (in ms)')" ] }, { diff --git a/TP1_prog2.py.ipynb b/TP1_prog2.py.ipynb index 9858097..888409e 100644 --- a/TP1_prog2.py.ipynb +++ b/TP1_prog2.py.ipynb @@ -894,7 +894,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/TP2_prog1.py.ipynb b/TP2_prog1.py.ipynb index 16b9239..c344475 100644 --- a/TP2_prog1.py.ipynb +++ b/TP2_prog1.py.ipynb @@ -2,11 +2,12 @@ "cells": [ { "cell_type": "code", - "execution_count": 31, + "execution_count": 1, "id": "3eb7a65b", "metadata": {}, "outputs": [], "source": [ + "####### Import #######\n", "from sklearn.datasets import fetch_openml\n", "import sklearn\n", "import matplotlib.pyplot as plt\n", @@ -20,41 +21,35 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "a8812842", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Classe : 5\n" - ] - } - ], + "outputs": [], "source": [ + "####### Loading data #######\n", "mnist = fetch_openml('mnist_784',as_frame=False)\n", - "images = mnist.data.reshape((-1, 28, 28))\n", - "plt.imshow(images[0],cmap=plt.cm.gray_r,interpolation=\"nearest\")\n", - "plt.show()\n", - "print(\"Classe : \", mnist.target[0])" + "# images = mnist.data.reshape((-1, 28, 28))\n", + "# plt.imshow(images[0],cmap=plt.cm.gray_r,interpolation=\"nearest\")\n", + "# plt.show()\n", + "# print(\"Classe : \", mnist.target[0])" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, + "id": "6ec263be", + "metadata": {}, + "outputs": [], + "source": [ + "####### Division des données pour train/test #######\n", + "# xtrain data set d'entraînement et ytrain étiquettes de xtrain\n", + "# xtest dataset de prédiction et ytest étiquettes de xtest\n", + "xtrain, xtest, ytrain, ytest = model_selection.train_test_split(mnist.data, mnist.target,train_size=0.7)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "id": "3b1a54ef", "metadata": {}, "outputs": [ @@ -62,11 +57,123 @@ "name": "stdout", "output_type": "stream", "text": [ - "Score échantillon de test : 0.9471428571428572\n", - "Classe image 4 : 4\n", - "Classe prédite image 4 : 4\n", - "Précision pour chaque classe : [0.9722488 0.97494781 0.95077973 0.94289898 0.95481336 0.93585101\n", - " 0.96747967 0.96834012 0.88457808 0.91254205]\n" + "Iteration 1, loss = 3.52359837\n", + "Iteration 2, loss = 0.85171280\n", + "Iteration 3, loss = 0.60056326\n", + "Iteration 4, loss = 0.48266587\n", + "Iteration 5, loss = 0.39886573\n", + "Iteration 6, loss = 0.34521704\n", + "Iteration 7, loss = 0.30099640\n", + "Iteration 8, loss = 0.27160238\n", + "Iteration 9, loss = 0.24706114\n", + "Iteration 10, loss = 0.22797524\n", + "Iteration 11, loss = 0.21505191\n", + "Iteration 12, loss = 0.19770258\n", + "Iteration 13, loss = 0.19077859\n", + "Iteration 14, loss = 0.17622058\n", + "Iteration 15, loss = 0.16944141\n", + "Iteration 16, loss = 0.16224071\n", + "Iteration 17, loss = 0.15492558\n", + "Iteration 18, loss = 0.15738929\n", + "Iteration 19, loss = 0.15676172\n", + "Iteration 20, loss = 0.14685813\n", + "Iteration 21, loss = 0.14650585\n", + "Iteration 22, loss = 0.13999060\n", + "Iteration 23, loss = 0.13472855\n", + "Iteration 24, loss = 0.13288158\n", + "Iteration 25, loss = 0.12751806\n", + "Iteration 26, loss = 0.12714259\n", + "Iteration 27, loss = 0.12544878\n", + "Iteration 28, loss = 0.11883595\n", + "Iteration 29, loss = 0.11480813\n", + "Iteration 30, loss = 0.11316260\n", + "Iteration 31, loss = 0.11660448\n", + "Iteration 32, loss = 0.10874878\n", + "Iteration 33, loss = 0.10528808\n", + "Iteration 34, loss = 0.10263948\n", + "Iteration 35, loss = 0.10223171\n", + "Iteration 36, loss = 0.09870415\n", + "Iteration 37, loss = 0.09606162\n", + "Iteration 38, loss = 0.09471765\n", + "Iteration 39, loss = 0.09212006\n", + "Iteration 40, loss = 0.09099822\n", + "Iteration 41, loss = 0.08554237\n", + "Iteration 42, loss = 0.08749541\n", + "Iteration 43, loss = 0.08972260\n", + "Iteration 44, loss = 0.08350223\n", + "Iteration 45, loss = 0.08801550\n", + "Iteration 46, loss = 0.08368898\n", + "Iteration 47, loss = 0.07761680\n", + "Iteration 48, loss = 0.07578025\n", + "Iteration 49, loss = 0.08065128\n", + "Iteration 50, loss = 0.07764694\n", + "Iteration 51, loss = 0.07168844\n", + "Iteration 52, loss = 0.07150503\n", + "Iteration 53, loss = 0.07363849\n", + "Iteration 54, loss = 0.07338743\n", + "Iteration 55, loss = 0.07203880\n", + "Iteration 56, loss = 0.07285884\n", + "Iteration 57, loss = 0.07188750\n", + "Iteration 58, loss = 0.06498561\n", + "Iteration 59, loss = 0.06886073\n", + "Iteration 60, loss = 0.06764328\n", + "Iteration 61, loss = 0.06734936\n", + "Iteration 62, loss = 0.06304752\n", + "Iteration 63, loss = 0.06348438\n", + "Iteration 64, loss = 0.06367554\n", + "Iteration 65, loss = 0.06463911\n", + "Iteration 66, loss = 0.06254784\n", + "Iteration 67, loss = 0.06314946\n", + "Iteration 68, loss = 0.05808523\n", + "Iteration 69, loss = 0.05875598\n", + "Iteration 70, loss = 0.06471586\n", + "Iteration 71, loss = 0.05205066\n", + "Iteration 72, loss = 0.05317537\n", + "Iteration 73, loss = 0.06049916\n", + "Iteration 74, loss = 0.05569290\n", + "Iteration 75, loss = 0.05575822\n", + "Iteration 76, loss = 0.05076569\n", + "Iteration 77, loss = 0.05599933\n", + "Iteration 78, loss = 0.05358316\n", + "Iteration 79, loss = 0.05719498\n", + "Iteration 80, loss = 0.05800077\n", + "Iteration 81, loss = 0.05325157\n", + "Iteration 82, loss = 0.05750329\n", + "Iteration 83, loss = 0.05070814\n", + "Iteration 84, loss = 0.05080239\n", + "Iteration 85, loss = 0.04880118\n", + "Iteration 86, loss = 0.05394842\n", + "Iteration 87, loss = 0.04530197\n", + "Iteration 88, loss = 0.04809415\n", + "Iteration 89, loss = 0.05475923\n", + "Iteration 90, loss = 0.04973714\n", + "Iteration 91, loss = 0.05358211\n", + "Iteration 92, loss = 0.04174303\n", + "Iteration 93, loss = 0.04926893\n", + "Iteration 94, loss = 0.04678085\n", + "Iteration 95, loss = 0.05342765\n", + "Iteration 96, loss = 0.04373367\n", + "Iteration 97, loss = 0.04833882\n", + "Iteration 98, loss = 0.05130827\n", + "Iteration 99, loss = 0.04382581\n", + "Iteration 100, loss = 0.04884660\n", + "Score échantillon de test : 0.9494761904761905\n", + "Classe image 4 : 8\n", + "Classe prédite image 4 : 8\n", + "Précision pour chaque classe : \n", + " [0.98320158 0.97635135 0.91084559 0.9264637 0.95507246 0.94917946\n", + " 0.96108767 0.9616451 0.93561368 0.93326839]\n", + "Matrice de confusion :\n", + " [[1990 2 11 0 1 3 14 2 23 6]\n", + " [ 0 2312 23 6 1 1 0 9 14 0]\n", + " [ 4 7 1982 16 9 1 7 18 23 2]\n", + " [ 3 12 50 1978 1 22 1 15 18 21]\n", + " [ 4 7 15 0 1977 3 12 7 4 40]\n", + " [ 6 3 2 46 1 1793 24 5 18 20]\n", + " [ 1 2 10 1 8 19 2050 1 9 0]\n", + " [ 2 7 27 39 7 3 0 2081 5 22]\n", + " [ 4 10 50 24 10 27 23 6 1860 26]\n", + " [ 10 6 6 25 55 17 2 20 14 1916]]\n" ] }, { @@ -79,9 +186,7 @@ } ], "source": [ - "# xtrain data set d'entraînement et ytrain étiquettes de xtrain\n", - "# xtest dataset de prédiction et ytest étiquettes de xtest\n", - "xtrain, xtest, ytrain, ytest = model_selection.train_test_split(mnist.data, mnist.target,train_size=0.7)\n", + "####### Premier modèle de Classifier #######\n", "\n", "#Entraîne le classifier\n", "clf = neural_network.MLPClassifier(random_state=1, max_iter=100, hidden_layer_sizes=(50))\n", @@ -102,40 +207,13 @@ "print(\"Classe prédite image 4 : \", pred[3])\n", "\n", "#Calcul de la précision avec metrics.precision_score\n", - "print(\"Précision pour chaque classe : \", metrics.precision_score(ytest, pred,average=None))" + "print(\"Précision pour chaque classe : \\n\", metrics.precision_score(ytest, pred,average=None))\n", + "print(\"Matrice de confusion :\\n\", metrics.confusion_matrix(ytest, pred))" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "6068ca09", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Précision pour chaque classe :\n", - " [[2032 1 2 0 1 6 6 0 34 6]\n", - " [ 0 2335 14 5 6 2 5 8 13 2]\n", - " [ 13 7 1951 23 17 4 11 25 67 6]\n", - " [ 2 4 26 1932 0 44 2 13 45 23]\n", - " [ 3 6 9 1 1944 2 8 6 6 48]\n", - " [ 7 8 5 32 3 1809 22 3 29 12]\n", - " [ 16 4 10 0 11 18 2023 0 18 0]\n", - " [ 7 4 18 15 14 6 0 2141 5 56]\n", - " [ 2 21 16 17 8 27 13 1 1824 29]\n", - " [ 8 5 1 24 32 15 1 14 21 1899]]\n" - ] - } - ], - "source": [ - "print(\"Précision pour chaque classe :\\n\", metrics.confusion_matrix(ytest, pred))" - ] - }, - { - "cell_type": "code", - "execution_count": 25, + "execution_count": 15, "id": "5a4a5485", "metadata": {}, "outputs": [ @@ -143,33 +221,114 @@ "name": "stdout", "output_type": "stream", "text": [ - "Liste des scores : [0.937952380952381, 0.9632857142857143, 0.9618571428571429, 0.8938571428571429, 0.5494761904761905, 0.11290476190476191, 0.11290476190476191, 0.11290476190476191, 0.11290476190476191, 0.11290476190476191]\n" + "Computing for 1 hidden layers...\n", + "Computing for 10 hidden layers...\n", + "Computing for 19 hidden layers...\n", + "Computing for 28 hidden layers...\n", + "Computing for 37 hidden layers...\n", + "Computing for 46 hidden layers...\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mpred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxtest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;31m# Probabilités des prédictions sur xtest\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mpred_proba\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict_proba\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxtest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;31m# On calcule le score obtenu sur xtest avec les étiquettes ytest\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mlist_training_times\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt2\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mt1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/insa/anaconda/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py\u001b[0m in \u001b[0;36mpredict_proba\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 1117\u001b[0m \"\"\"\n\u001b[1;32m 1118\u001b[0m \u001b[0mcheck_is_fitted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1119\u001b[0;31m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_pass_fast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1121\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_outputs_\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/insa/anaconda/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py\u001b[0m in \u001b[0;36m_forward_pass_fast\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0mactivation\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintercepts_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_layers_\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 145\u001b[0;31m \u001b[0mhidden_activation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mactivation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 146\u001b[0m \u001b[0moutput_activation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mACTIVATIONS\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mout_activation_\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0moutput_activation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mactivation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/insa/anaconda/lib/python3.8/site-packages/sklearn/neural_network/_base.py\u001b[0m in \u001b[0;36minplace_relu\u001b[0;34m(X)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0mThe\u001b[0m \u001b[0minput\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \"\"\"\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaximum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ + "####### Variations du nombres de couches de 1 à 100 couches cachées #######\n", + "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "\n", - "# xtrain data set d'entraînement et ytrain étiquettes de xtrain\n", - "# xtest dataset de prédiction et ytest étiquettes de xtest\n", - "xtrain, xtest, ytrain, ytest = model_selection.train_test_split(mnist.data, mnist.target,train_size=0.7)\n", - "\n", - "list_scores = []\n", + "list_training_times = []\n", + "list_precision_scores = []\n", + "list_error_metrics = []\n", " \n", - "for i in range(1, 101, 10):\n", + "for i in range(1, 101, 9):\n", + " print(\"Computing for \", i, \" hidden layers...\")\n", " #Entraîne le classifier\n", " clf = neural_network.MLPClassifier(random_state=1, max_iter=20, hidden_layer_sizes=((50,) * i))\n", + " t1 = round(time.time(),5)\n", " clf.fit(xtrain, ytrain)\n", - "\n", + " t2 = round(time.time(),5)\n", " #Prédiction sur le jeu de tests\n", " pred = clf.predict(xtest)\n", " # Probabilités des prédictions sur xtest\n", " pred_proba = clf.predict_proba(xtest)\n", " # On calcule le score obtenu sur xtest avec les étiquettes ytest\n", - " list_scores += [clf.score(xtest, ytest)]\n", + " list_training_times.append(t2-t1)\n", + " list_precision_scores.append(clf.score(xtest, ytest))\n", + " list_error_metrics.append(metrics.precision_score(ytest, pred,average=None))\n", " \n", - "print(\"Liste des scores : \", list_scores)" + "print(\"Liste des scores : \\n\", list_scores)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b961ed8", + "metadata": {}, + "outputs": [], + "source": [ + "##### x coordinates\n", + "x = np.arange(1,101,9)\n", + "training_times = []\n", + "precision_scores = []\n", + "error_metrics = []\n", + "\n", + "### Create plot\n", + "fig, figs = plt.subplots(nrows=3, ncols=1, figsize=(15,10))\n", + "fig.tight_layout(pad=3.0)\n", + "figs[0].plot(x,training_times, marker='o', color='r')\n", + "figs[1].plot(x,precision_scores, marker='o', color='b')\n", + "figs[2].plot(x,error_metrics, marker='o', color='g')\n", + "\n", + "### Add every x coordinates\n", + "figs[0].tick_params(axis='both', which='both', labelsize=7, labelbottom=True)\n", + "figs[1].tick_params(axis='both', which='both', labelsize=7, labelbottom=True)\n", + "figs[2].tick_params(axis='both', which='both', labelsize=7, labelbottom=True)\n", + "\n", + "for i in range(len(x)):\n", + " figs[0].annotate(training_times[i], # this is the text\n", + " (x[i],training_times[i]), # these are the coordinates to position the label\n", + " textcoords=\"offset points\", # how to position the text\n", + " xytext=(15,5), # distance from text to points (x,y)\n", + " ha='center') # horizontal alignment can be left, right or center\n", + " figs[1].annotate(precision_scores[i], # this is the text\n", + " (x[i],precision_scores[i]), # these are the coordinates to position the label\n", + " textcoords=\"offset points\", # how to position the text\n", + " xytext=(15,5), # distance from text to points (x,y)\n", + " ha='center') # horizontal alignment can be left, right or center\n", + " figs[2].annotate(error_metrics[i], # this is the text\n", + " (x[i],error_metrics[i]), # these are the coordinates to position the label\n", + " textcoords=\"offset points\", # how to position the text\n", + " xytext=(15,5), # distance from text to points (x,y)\n", + " ha='center') # horizontal alignment can be left, right or center\n", + "\n", + "figs[0].set_xticks(x)\n", + "figs[1].set_xticks(x)\n", + "figs[2].set_xticks(x)\n", + " \n", + "### Add title and axis names\n", + "figs[0].title.set_text('Mean scores for k neighbors')\n", + "figs[1].title.set_text('Mean training times for k neighbors')\n", + "figs[2].title.set_text('Mean predicting times for k neighbors')\n", + "figs[0].set_xlabel('N_neighbors')\n", + "figs[1].set_xlabel('N_neighbors')\n", + "figs[2].set_xlabel('N_neighbors')\n", + "figs[0].set_ylabel('Score')\n", + "figs[1].set_ylabel('Training times (in ms)')\n", + "figs[2].set_ylabel('Predicting times (in ms)')" ] }, { @@ -1143,7 +1302,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.8.10" } }, "nbformat": 4,