diff --git a/ann.ipynb b/ann.ipynb new file mode 100644 index 0000000..232b062 --- /dev/null +++ b/ann.ipynb @@ -0,0 +1,701 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "861d1252", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import fetch_openml \n", + "mnist = fetch_openml('mnist_784') " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8d74eceb", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neural_network import MLPClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "91e6919c", + "metadata": {}, + "outputs": [], + "source": [ + "echantillon = np.random.randint(70000, size=25000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "trainSize = 17500/25000\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=trainSize)\n", + "#trainSize = 49000/len(data)\n", + "#xtrain, xtest, ytrain, ytest = train_test_split(data, target, \n", + "#train_size=trainSize)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9813e61b", + "metadata": {}, + "outputs": [], + "source": [ + "clf = MLPClassifier(hidden_layer_sizes = (50)).fit(xtrain, ytrain)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ef3b75ad", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9470666666666666\n" + ] + } + ], + "source": [ + "print(clf.score(xtest, ytest))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "05c41c4e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n", + "['9']\n" + ] + } + ], + "source": [ + "print(target[4])\n", + "print(clf.predict([data[4]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "dc422f73", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9768142857142857" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import precision_score\n", + "precision_score(target.values, clf.predict(data), average='micro')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "44b6cf69", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "from sklearn.metrics import precision_score\n", + "hidden_layer_list = [50]\n", + "list_score = []\n", + "liste_x = []\n", + "\n", + "for i in range (2,21):\n", + " liste_x.append(i)\n", + " hidden_layer_list.append(50)\n", + " hidden_layer_tuple = tuple(hidden_layer_list) \n", + " clf = MLPClassifier(hidden_layer_sizes = hidden_layer_tuple).fit(xtrain, ytrain)\n", + " list_score.append(precision_score(target.values, clf.predict(data), average='micro'))\n", + "#pour réduire le temps d'exécution réduire max_iter\n", + "plt.plot(liste_x, list_score)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('nb couches')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "7a889d9e", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nb couches = 2 , layer = [179, 50] , Précision : [0.98433735 0.99186417 0.97671618 0.97836167 0.9737382 0.968\n", + " 0.98077693 0.98742633 0.97380089 0.96992481] , Score : 0.9506666666666667 , Temps = 76.75932478904724\n", + "Nb couches = 8 , layer = [231, 107, 126, 49, 149, 61, 73, 128] , Précision : [0.99518459 0.99120647 0.99437977 0.98888037 0.98005698 0.99416255\n", + " 0.99272139 0.99413146 0.99191266 0.98865546] , Score : 0.9724 , Temps = 197.41534781455994\n", + "Nb couches = 6 , layer = [275, 278, 291, 185, 252, 277] , Précision : [0.98963317 0.99822506 0.98804781 0.98809981 0.99460133 0.98660714\n", + " 0.99072954 0.98948598 0.98906883 0.98955286] , Score : 0.9712 , Temps = 365.7198393344879\n", + "Nb couches = 1 , layer = [168] , Précision : [0.99198397 0.9887798 0.97471355 0.98300502 0.9805141 0.97771836\n", + " 0.98433735 0.98858717 0.98868399 0.96382114] , Score : 0.9573333333333334 , Temps = 54.06105351448059\n", + "Nb couches = 8 , layer = [156, 144, 52, 151, 19, 85, 216, 106] , Précision : [0.99278846 0.99504425 0.99117883 0.99378399 0.98970346 0.98255814\n", + " 0.9895288 0.99291617 0.9777954 0.98750521] , Score : 0.9685333333333334 , Temps = 79.1754539012909\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import random\n", + "import time\n", + "\n", + "for i in range(1,6):\n", + " hidden_layer_list = []\n", + " nb_couche = np.random.randint(1, 10)\n", + " hidden_layer_list = random.sample(range(10, 300), nb_couche)\n", + " hidden_layer_tuple = tuple(hidden_layer_list) \n", + " start = time.time()\n", + " clf = MLPClassifier(hidden_layer_sizes = hidden_layer_tuple).fit(xtrain, ytrain)\n", + " end = time.time()\n", + " elapsed = end - start\n", + " precision = precision_score(target.values, clf.predict(data), average=None)\n", + " score = clf.score(xtest, ytest)\n", + " print(\"Nb couches = \", nb_couche, \", layer = \", hidden_layer_list, \", Précision : \", precision, \" , Score : \", score, \", Temps = \", elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "2f4d82ab", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "modeles = [1, 2, 3, 4, 5]\n", + "scores = [0.9506666666666667, 0.9724, 0.9712, 0.9573333333333334, 0.9685333333333334]\n", + "times = [76.75932478904724, 197.41534781455994, 365.7198393344879, 54.06105351448059, 79.1754539012909]\n", + "\n", + "plt.subplot(2,1,1)\n", + "plt.plot(modeles, scores)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('model')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(modeles, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('model')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "4356994c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\momof\\anaconda3\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:500: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + " self.n_iter_ = _check_optimize_result(\"lbfgs\", opt_res, self.max_iter)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.8926666666666667\n", + "0.9128\n", + "29.908934354782104\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), solver = 'lbfgs', verbose = True).fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "35a7ed37", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\momof\\anaconda3\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:614: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.73\n", + "0.7583428571428571\n", + "79.51274752616882\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), solver = 'sgd').fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "f9b6cb07", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9302666666666667\n", + "0.9746857142857143\n", + "20.47561001777649\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), solver = 'adam').fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "7a75936c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "\n", + "list_algo_optim = ['lbgfs', 'sgd', 'adam']\n", + "list_score = [0.89, 0.73, 0.93]\n", + "list_times = [29.908934354782104, 79.51274752616882, 20.47561001777649]\n", + "\n", + "plt.subplot(2,1,1)\n", + "plt.plot(list_algo_optim, list_score)\n", + "plt.ylabel('score')\n", + "plt.xlabel('algo_optimisation')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(list_algo_optim, list_times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('algo_optimisation')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "11f49da3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9016\n", + "0.9521142857142857\n", + "41.46870017051697\n" + ] + } + ], + "source": [ + "import time\n", + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'identity').fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8faa5089", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9377333333333333\n", + "0.9538285714285715\n", + "35.57738542556763\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic').fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c7ca3692", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9157333333333333\n", + "0.9256571428571428\n", + "28.179425954818726\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'tanh').fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0f6eca90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9446666666666667\n", + "0.9834857142857143\n", + "43.619242668151855\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'relu').fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "\n", + "print(clf.score(xtest, ytest))\n", + "print(clf.score(xtrain, ytrain))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "30bd2617", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "\n", + "list_fonc_act = ['identity', 'logistic', 'tanh', 'relu']\n", + "list_score = [0.8930666666666667, 0.9357333333333333, 0.928, 0.9276]\n", + "list_time = [40.020830154418945, 45.64607834815979, 52.70329761505127, 23.708072662353516]\n", + "\n", + "plt.subplot(2,1,1)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('activation function')\n", + "plt.plot(list_fonc_act, list_score)\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.ylabel('time')\n", + "plt.xlabel('activation function')\n", + "plt.plot(list_fonc_act, list_time)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "e568c62e", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt \n", + "\n", + "list_score_test = []\n", + "list_score_train = []\n", + "list_times = []\n", + "\n", + "liste_x = [0.000000001, 0.00000001, 0.000005, 0.000025, 0.00005, 0.0001, 0.0008, 0.0032, 0.01, 0.05, 0.1]\n", + "\n", + "for i in liste_x:\n", + " start = time.time()\n", + " clf = MLPClassifier(hidden_layer_sizes = (50), alpha = i).fit(xtrain, ytrain)\n", + " end = time.time()\n", + " elapsed = end - start\n", + " list_score_test.append(clf.score(xtest, ytest))\n", + " list_score_train.append(clf.score(xtrain, ytrain))\n", + " list_times.append(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "b00638ff", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(2,1,1)\n", + "plt.plot(liste_x, list_score_test)\n", + "plt.ylabel('score')\n", + "plt.xlabel('alpha')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(liste_x, list_times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('alpha')\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "abc6e63e", + "metadata": {}, + "outputs": [], + "source": [ + "alpha = [0.000000001, 0.00000001, 0.000005, 0.000025, 0.00005, 0.0001]\n", + "scores_test = []\n", + "scores_train = []\n", + "times = []\n", + "for i in alpha:\n", + " start = time.time()\n", + " clf = MLPClassifier(hidden_layer_sizes = (50), alpha = i).fit(xtrain, ytrain)\n", + " end = time.time()\n", + " elapsed = end - start\n", + " scores_test.append(clf.score(xtest, ytest))\n", + " scores_train.append(clf.score(xtrain, ytrain))\n", + " times.append(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "e25ba489", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(2,1,1)\n", + "plt.plot(alpha, scores_test)\n", + "plt.ylabel('score')\n", + "plt.xlabel('alpha')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(alpha, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('alpha')\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9fab621a", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import confusion_matrix \n", + "echantillon = np.random.randint(70000, size=25000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "trainSize = 17500/25000\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=trainSize)\n", + "clf = MLPClassifier(hidden_layer_sizes = (50)).fit(xtrain, ytrain)\n", + "\n", + "cm = confusion_matrix(target.values, clf.predict(data))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e5c3afb8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2370 0 0 0 1 1 3 2 31 0]\n", + " [ 0 2835 2 3 3 1 0 3 3 1]\n", + " [ 3 6 2487 14 6 2 3 8 23 1]\n", + " [ 0 1 25 2419 0 29 2 11 41 5]\n", + " [ 0 6 3 1 2399 0 8 6 4 22]\n", + " [ 6 1 2 24 3 2229 15 1 18 4]\n", + " [ 4 2 7 0 10 12 2393 0 14 1]\n", + " [ 0 4 8 2 5 1 2 2494 7 16]\n", + " [ 5 9 11 6 10 11 2 4 2355 6]\n", + " [ 1 6 1 6 43 5 0 19 50 2371]]\n" + ] + } + ], + "source": [ + "print(cm)" + ] + } + ], + "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.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/knn.ipynb b/knn.ipynb new file mode 100644 index 0000000..2155512 --- /dev/null +++ b/knn.ipynb @@ -0,0 +1,1201 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "b4978985", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import fetch_openml \n", + "mnist = fetch_openml('mnist_784') " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "30516666", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'data': pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 pixel8 pixel9 \\\n", + "0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... ... ... ... ... \n", + "69995 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel10 ... pixel775 pixel776 pixel777 pixel778 pixel779 \\\n", + "0 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... ... ... \n", + "69995 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel780 pixel781 pixel782 pixel783 pixel784 \n", + "0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "69995 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + "[70000 rows x 784 columns], 'target': 0 5\n", + "1 0\n", + "2 4\n", + "3 1\n", + "4 9\n", + " ..\n", + "69995 2\n", + "69996 3\n", + "69997 4\n", + "69998 5\n", + "69999 6\n", + "Name: class, Length: 70000, dtype: category\n", + "Categories (10, object): ['0', '1', '2', '3', ..., '6', '7', '8', '9'], 'frame': pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 pixel8 pixel9 \\\n", + "0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... ... ... ... ... \n", + "69995 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel10 ... pixel776 pixel777 pixel778 pixel779 pixel780 \\\n", + "0 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... ... ... \n", + "69995 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel781 pixel782 pixel783 pixel784 class \n", + "0 0.0 0.0 0.0 0.0 5 \n", + "1 0.0 0.0 0.0 0.0 0 \n", + "2 0.0 0.0 0.0 0.0 4 \n", + "3 0.0 0.0 0.0 0.0 1 \n", + "4 0.0 0.0 0.0 0.0 9 \n", + "... ... ... ... ... ... \n", + "69995 0.0 0.0 0.0 0.0 2 \n", + "69996 0.0 0.0 0.0 0.0 3 \n", + "69997 0.0 0.0 0.0 0.0 4 \n", + "69998 0.0 0.0 0.0 0.0 5 \n", + "69999 0.0 0.0 0.0 0.0 6 \n", + "\n", + "[70000 rows x 785 columns], 'categories': None, 'feature_names': ['pixel1', 'pixel2', 'pixel3', 'pixel4', 'pixel5', 'pixel6', 'pixel7', 'pixel8', 'pixel9', 'pixel10', 'pixel11', 'pixel12', 'pixel13', 'pixel14', 'pixel15', 'pixel16', 'pixel17', 'pixel18', 'pixel19', 'pixel20', 'pixel21', 'pixel22', 'pixel23', 'pixel24', 'pixel25', 'pixel26', 'pixel27', 'pixel28', 'pixel29', 'pixel30', 'pixel31', 'pixel32', 'pixel33', 'pixel34', 'pixel35', 'pixel36', 'pixel37', 'pixel38', 'pixel39', 'pixel40', 'pixel41', 'pixel42', 'pixel43', 'pixel44', 'pixel45', 'pixel46', 'pixel47', 'pixel48', 'pixel49', 'pixel50', 'pixel51', 'pixel52', 'pixel53', 'pixel54', 'pixel55', 'pixel56', 'pixel57', 'pixel58', 'pixel59', 'pixel60', 'pixel61', 'pixel62', 'pixel63', 'pixel64', 'pixel65', 'pixel66', 'pixel67', 'pixel68', 'pixel69', 'pixel70', 'pixel71', 'pixel72', 'pixel73', 'pixel74', 'pixel75', 'pixel76', 'pixel77', 'pixel78', 'pixel79', 'pixel80', 'pixel81', 'pixel82', 'pixel83', 'pixel84', 'pixel85', 'pixel86', 'pixel87', 'pixel88', 'pixel89', 'pixel90', 'pixel91', 'pixel92', 'pixel93', 'pixel94', 'pixel95', 'pixel96', 'pixel97', 'pixel98', 'pixel99', 'pixel100', 'pixel101', 'pixel102', 'pixel103', 'pixel104', 'pixel105', 'pixel106', 'pixel107', 'pixel108', 'pixel109', 'pixel110', 'pixel111', 'pixel112', 'pixel113', 'pixel114', 'pixel115', 'pixel116', 'pixel117', 'pixel118', 'pixel119', 'pixel120', 'pixel121', 'pixel122', 'pixel123', 'pixel124', 'pixel125', 'pixel126', 'pixel127', 'pixel128', 'pixel129', 'pixel130', 'pixel131', 'pixel132', 'pixel133', 'pixel134', 'pixel135', 'pixel136', 'pixel137', 'pixel138', 'pixel139', 'pixel140', 'pixel141', 'pixel142', 'pixel143', 'pixel144', 'pixel145', 'pixel146', 'pixel147', 'pixel148', 'pixel149', 'pixel150', 'pixel151', 'pixel152', 'pixel153', 'pixel154', 'pixel155', 'pixel156', 'pixel157', 'pixel158', 'pixel159', 'pixel160', 'pixel161', 'pixel162', 'pixel163', 'pixel164', 'pixel165', 'pixel166', 'pixel167', 'pixel168', 'pixel169', 'pixel170', 'pixel171', 'pixel172', 'pixel173', 'pixel174', 'pixel175', 'pixel176', 'pixel177', 'pixel178', 'pixel179', 'pixel180', 'pixel181', 'pixel182', 'pixel183', 'pixel184', 'pixel185', 'pixel186', 'pixel187', 'pixel188', 'pixel189', 'pixel190', 'pixel191', 'pixel192', 'pixel193', 'pixel194', 'pixel195', 'pixel196', 'pixel197', 'pixel198', 'pixel199', 'pixel200', 'pixel201', 'pixel202', 'pixel203', 'pixel204', 'pixel205', 'pixel206', 'pixel207', 'pixel208', 'pixel209', 'pixel210', 'pixel211', 'pixel212', 'pixel213', 'pixel214', 'pixel215', 'pixel216', 'pixel217', 'pixel218', 'pixel219', 'pixel220', 'pixel221', 'pixel222', 'pixel223', 'pixel224', 'pixel225', 'pixel226', 'pixel227', 'pixel228', 'pixel229', 'pixel230', 'pixel231', 'pixel232', 'pixel233', 'pixel234', 'pixel235', 'pixel236', 'pixel237', 'pixel238', 'pixel239', 'pixel240', 'pixel241', 'pixel242', 'pixel243', 'pixel244', 'pixel245', 'pixel246', 'pixel247', 'pixel248', 'pixel249', 'pixel250', 'pixel251', 'pixel252', 'pixel253', 'pixel254', 'pixel255', 'pixel256', 'pixel257', 'pixel258', 'pixel259', 'pixel260', 'pixel261', 'pixel262', 'pixel263', 'pixel264', 'pixel265', 'pixel266', 'pixel267', 'pixel268', 'pixel269', 'pixel270', 'pixel271', 'pixel272', 'pixel273', 'pixel274', 'pixel275', 'pixel276', 'pixel277', 'pixel278', 'pixel279', 'pixel280', 'pixel281', 'pixel282', 'pixel283', 'pixel284', 'pixel285', 'pixel286', 'pixel287', 'pixel288', 'pixel289', 'pixel290', 'pixel291', 'pixel292', 'pixel293', 'pixel294', 'pixel295', 'pixel296', 'pixel297', 'pixel298', 'pixel299', 'pixel300', 'pixel301', 'pixel302', 'pixel303', 'pixel304', 'pixel305', 'pixel306', 'pixel307', 'pixel308', 'pixel309', 'pixel310', 'pixel311', 'pixel312', 'pixel313', 'pixel314', 'pixel315', 'pixel316', 'pixel317', 'pixel318', 'pixel319', 'pixel320', 'pixel321', 'pixel322', 'pixel323', 'pixel324', 'pixel325', 'pixel326', 'pixel327', 'pixel328', 'pixel329', 'pixel330', 'pixel331', 'pixel332', 'pixel333', 'pixel334', 'pixel335', 'pixel336', 'pixel337', 'pixel338', 'pixel339', 'pixel340', 'pixel341', 'pixel342', 'pixel343', 'pixel344', 'pixel345', 'pixel346', 'pixel347', 'pixel348', 'pixel349', 'pixel350', 'pixel351', 'pixel352', 'pixel353', 'pixel354', 'pixel355', 'pixel356', 'pixel357', 'pixel358', 'pixel359', 'pixel360', 'pixel361', 'pixel362', 'pixel363', 'pixel364', 'pixel365', 'pixel366', 'pixel367', 'pixel368', 'pixel369', 'pixel370', 'pixel371', 'pixel372', 'pixel373', 'pixel374', 'pixel375', 'pixel376', 'pixel377', 'pixel378', 'pixel379', 'pixel380', 'pixel381', 'pixel382', 'pixel383', 'pixel384', 'pixel385', 'pixel386', 'pixel387', 'pixel388', 'pixel389', 'pixel390', 'pixel391', 'pixel392', 'pixel393', 'pixel394', 'pixel395', 'pixel396', 'pixel397', 'pixel398', 'pixel399', 'pixel400', 'pixel401', 'pixel402', 'pixel403', 'pixel404', 'pixel405', 'pixel406', 'pixel407', 'pixel408', 'pixel409', 'pixel410', 'pixel411', 'pixel412', 'pixel413', 'pixel414', 'pixel415', 'pixel416', 'pixel417', 'pixel418', 'pixel419', 'pixel420', 'pixel421', 'pixel422', 'pixel423', 'pixel424', 'pixel425', 'pixel426', 'pixel427', 'pixel428', 'pixel429', 'pixel430', 'pixel431', 'pixel432', 'pixel433', 'pixel434', 'pixel435', 'pixel436', 'pixel437', 'pixel438', 'pixel439', 'pixel440', 'pixel441', 'pixel442', 'pixel443', 'pixel444', 'pixel445', 'pixel446', 'pixel447', 'pixel448', 'pixel449', 'pixel450', 'pixel451', 'pixel452', 'pixel453', 'pixel454', 'pixel455', 'pixel456', 'pixel457', 'pixel458', 'pixel459', 'pixel460', 'pixel461', 'pixel462', 'pixel463', 'pixel464', 'pixel465', 'pixel466', 'pixel467', 'pixel468', 'pixel469', 'pixel470', 'pixel471', 'pixel472', 'pixel473', 'pixel474', 'pixel475', 'pixel476', 'pixel477', 'pixel478', 'pixel479', 'pixel480', 'pixel481', 'pixel482', 'pixel483', 'pixel484', 'pixel485', 'pixel486', 'pixel487', 'pixel488', 'pixel489', 'pixel490', 'pixel491', 'pixel492', 'pixel493', 'pixel494', 'pixel495', 'pixel496', 'pixel497', 'pixel498', 'pixel499', 'pixel500', 'pixel501', 'pixel502', 'pixel503', 'pixel504', 'pixel505', 'pixel506', 'pixel507', 'pixel508', 'pixel509', 'pixel510', 'pixel511', 'pixel512', 'pixel513', 'pixel514', 'pixel515', 'pixel516', 'pixel517', 'pixel518', 'pixel519', 'pixel520', 'pixel521', 'pixel522', 'pixel523', 'pixel524', 'pixel525', 'pixel526', 'pixel527', 'pixel528', 'pixel529', 'pixel530', 'pixel531', 'pixel532', 'pixel533', 'pixel534', 'pixel535', 'pixel536', 'pixel537', 'pixel538', 'pixel539', 'pixel540', 'pixel541', 'pixel542', 'pixel543', 'pixel544', 'pixel545', 'pixel546', 'pixel547', 'pixel548', 'pixel549', 'pixel550', 'pixel551', 'pixel552', 'pixel553', 'pixel554', 'pixel555', 'pixel556', 'pixel557', 'pixel558', 'pixel559', 'pixel560', 'pixel561', 'pixel562', 'pixel563', 'pixel564', 'pixel565', 'pixel566', 'pixel567', 'pixel568', 'pixel569', 'pixel570', 'pixel571', 'pixel572', 'pixel573', 'pixel574', 'pixel575', 'pixel576', 'pixel577', 'pixel578', 'pixel579', 'pixel580', 'pixel581', 'pixel582', 'pixel583', 'pixel584', 'pixel585', 'pixel586', 'pixel587', 'pixel588', 'pixel589', 'pixel590', 'pixel591', 'pixel592', 'pixel593', 'pixel594', 'pixel595', 'pixel596', 'pixel597', 'pixel598', 'pixel599', 'pixel600', 'pixel601', 'pixel602', 'pixel603', 'pixel604', 'pixel605', 'pixel606', 'pixel607', 'pixel608', 'pixel609', 'pixel610', 'pixel611', 'pixel612', 'pixel613', 'pixel614', 'pixel615', 'pixel616', 'pixel617', 'pixel618', 'pixel619', 'pixel620', 'pixel621', 'pixel622', 'pixel623', 'pixel624', 'pixel625', 'pixel626', 'pixel627', 'pixel628', 'pixel629', 'pixel630', 'pixel631', 'pixel632', 'pixel633', 'pixel634', 'pixel635', 'pixel636', 'pixel637', 'pixel638', 'pixel639', 'pixel640', 'pixel641', 'pixel642', 'pixel643', 'pixel644', 'pixel645', 'pixel646', 'pixel647', 'pixel648', 'pixel649', 'pixel650', 'pixel651', 'pixel652', 'pixel653', 'pixel654', 'pixel655', 'pixel656', 'pixel657', 'pixel658', 'pixel659', 'pixel660', 'pixel661', 'pixel662', 'pixel663', 'pixel664', 'pixel665', 'pixel666', 'pixel667', 'pixel668', 'pixel669', 'pixel670', 'pixel671', 'pixel672', 'pixel673', 'pixel674', 'pixel675', 'pixel676', 'pixel677', 'pixel678', 'pixel679', 'pixel680', 'pixel681', 'pixel682', 'pixel683', 'pixel684', 'pixel685', 'pixel686', 'pixel687', 'pixel688', 'pixel689', 'pixel690', 'pixel691', 'pixel692', 'pixel693', 'pixel694', 'pixel695', 'pixel696', 'pixel697', 'pixel698', 'pixel699', 'pixel700', 'pixel701', 'pixel702', 'pixel703', 'pixel704', 'pixel705', 'pixel706', 'pixel707', 'pixel708', 'pixel709', 'pixel710', 'pixel711', 'pixel712', 'pixel713', 'pixel714', 'pixel715', 'pixel716', 'pixel717', 'pixel718', 'pixel719', 'pixel720', 'pixel721', 'pixel722', 'pixel723', 'pixel724', 'pixel725', 'pixel726', 'pixel727', 'pixel728', 'pixel729', 'pixel730', 'pixel731', 'pixel732', 'pixel733', 'pixel734', 'pixel735', 'pixel736', 'pixel737', 'pixel738', 'pixel739', 'pixel740', 'pixel741', 'pixel742', 'pixel743', 'pixel744', 'pixel745', 'pixel746', 'pixel747', 'pixel748', 'pixel749', 'pixel750', 'pixel751', 'pixel752', 'pixel753', 'pixel754', 'pixel755', 'pixel756', 'pixel757', 'pixel758', 'pixel759', 'pixel760', 'pixel761', 'pixel762', 'pixel763', 'pixel764', 'pixel765', 'pixel766', 'pixel767', 'pixel768', 'pixel769', 'pixel770', 'pixel771', 'pixel772', 'pixel773', 'pixel774', 'pixel775', 'pixel776', 'pixel777', 'pixel778', 'pixel779', 'pixel780', 'pixel781', 'pixel782', 'pixel783', 'pixel784'], 'target_names': ['class'], 'DESCR': \"**Author**: Yann LeCun, Corinna Cortes, Christopher J.C. Burges \\n**Source**: [MNIST Website](http://yann.lecun.com/exdb/mnist/) - Date unknown \\n**Please cite**: \\n\\nThe MNIST database of handwritten digits with 784 features, raw data available at: http://yann.lecun.com/exdb/mnist/. It can be split in a training set of the first 60,000 examples, and a test set of 10,000 examples \\n\\nIt is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image. It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting. The original black and white (bilevel) images from NIST were size normalized to fit in a 20x20 pixel box while preserving their aspect ratio. The resulting images contain grey levels as a result of the anti-aliasing technique used by the normalization algorithm. the images were centered in a 28x28 image by computing the center of mass of the pixels, and translating the image so as to position this point at the center of the 28x28 field. \\n\\nWith some classification methods (particularly template-based methods, such as SVM and K-nearest neighbors), the error rate improves when the digits are centered by bounding box rather than center of mass. If you do this kind of pre-processing, you should report it in your publications. The MNIST database was constructed from NIST's NIST originally designated SD-3 as their training set and SD-1 as their test set. However, SD-3 is much cleaner and easier to recognize than SD-1. The reason for this can be found on the fact that SD-3 was collected among Census Bureau employees, while SD-1 was collected among high-school students. Drawing sensible conclusions from learning experiments requires that the result be independent of the choice of training set and test among the complete set of samples. Therefore it was necessary to build a new database by mixing NIST's datasets. \\n\\nThe MNIST training set is composed of 30,000 patterns from SD-3 and 30,000 patterns from SD-1. Our test set was composed of 5,000 patterns from SD-3 and 5,000 patterns from SD-1. The 60,000 pattern training set contained examples from approximately 250 writers. We made sure that the sets of writers of the training set and test set were disjoint. SD-1 contains 58,527 digit images written by 500 different writers. In contrast to SD-3, where blocks of data from each writer appeared in sequence, the data in SD-1 is scrambled. Writer identities for SD-1 is available and we used this information to unscramble the writers. We then split SD-1 in two: characters written by the first 250 writers went into our new training set. The remaining 250 writers were placed in our test set. Thus we had two sets with nearly 30,000 examples each. The new training set was completed with enough examples from SD-3, starting at pattern # 0, to make a full set of 60,000 training patterns. Similarly, the new test set was completed with SD-3 examples starting at pattern # 35,000 to make a full set with 60,000 test patterns. Only a subset of 10,000 test images (5,000 from SD-1 and 5,000 from SD-3) is available on this site. The full 60,000 sample training set is available.\\n\\nDownloaded from openml.org.\", 'details': {'id': '554', 'name': 'mnist_784', 'version': '1', 'description_version': '1', 'format': 'ARFF', 'creator': ['Yann LeCun', 'Corinna Cortes', 'Christopher J.C. Burges'], 'upload_date': '2014-09-29T03:28:38', 'language': 'English', 'licence': 'Public', 'url': 'https://www.openml.org/data/v1/download/52667/mnist_784.arff', 'file_id': '52667', 'default_target_attribute': 'class', 'tag': ['AzurePilot', 'OpenML-CC18', 'OpenML100', 'study_1', 'study_123', 'study_41', 'study_99', 'vision'], 'visibility': 'public', 'status': 'active', 'processing_date': '2020-11-20 20:12:09', 'md5_checksum': '0298d579eb1b86163de7723944c7e495'}, 'url': 'https://www.openml.org/d/554'}\n" + ] + } + ], + "source": [ + "print(mnist)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ebe4b5c0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 pixel8 pixel9 \\\n", + "0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... ... ... ... ... \n", + "69995 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel10 ... pixel775 pixel776 pixel777 pixel778 pixel779 \\\n", + "0 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... ... ... \n", + "69995 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 ... 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel780 pixel781 pixel782 pixel783 pixel784 \n", + "0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "69995 0.0 0.0 0.0 0.0 0.0 \n", + "69996 0.0 0.0 0.0 0.0 0.0 \n", + "69997 0.0 0.0 0.0 0.0 0.0 \n", + "69998 0.0 0.0 0.0 0.0 0.0 \n", + "69999 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + "[70000 rows x 784 columns]\n" + ] + } + ], + "source": [ + "print(mnist.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0b988493", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 5\n", + "1 0\n", + "2 4\n", + "3 1\n", + "4 9\n", + " ..\n", + "69995 2\n", + "69996 3\n", + "69997 4\n", + "69998 5\n", + "69999 6\n", + "Name: class, Length: 70000, dtype: category\n", + "Categories (10, object): ['0', '1', '2', '3', ..., '6', '7', '8', '9']\n" + ] + } + ], + "source": [ + "print(mnist.target)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "80c2585f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70000" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(mnist.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "08b562a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(70000, 784)\n" + ] + } + ], + "source": [ + "print(mnist.data.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4f85b82d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(70000,)\n" + ] + } + ], + "source": [ + "print(mnist.target.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6f42de94", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pixel1pixel2pixel3pixel4pixel5pixel6pixel7pixel8pixel9pixel10...pixel775pixel776pixel777pixel778pixel779pixel780pixel781pixel782pixel783pixel784
00.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
10.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
20.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
30.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
40.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
..................................................................
950.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
960.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
970.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
980.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
990.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n", + "

100 rows × 784 columns

\n", + "
" + ], + "text/plain": [ + " pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 pixel8 pixel9 \\\n", + "0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + ".. ... ... ... ... ... ... ... ... ... \n", + "95 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "96 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "97 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "98 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "99 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel10 ... pixel775 pixel776 pixel777 pixel778 pixel779 pixel780 \\\n", + "0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + ".. ... ... ... ... ... ... ... ... \n", + "95 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "96 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "97 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "98 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "99 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " pixel781 pixel782 pixel783 pixel784 \n", + "0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 \n", + ".. ... ... ... ... \n", + "95 0.0 0.0 0.0 0.0 \n", + "96 0.0 0.0 0.0 0.0 \n", + "97 0.0 0.0 0.0 0.0 \n", + "98 0.0 0.0 0.0 0.0 \n", + "99 0.0 0.0 0.0 0.0 \n", + "\n", + "[100 rows x 784 columns]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mnist.data[:100]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "473e3421", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mnist.data.values[0][1]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "10fd8682", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import fetch_openml \n", + "import matplotlib.pyplot as plt \n", + "mnist = fetch_openml('mnist_784')" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "f2f61c72", + "metadata": { + "scrolled": true + }, + "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": [ + "9\n" + ] + } + ], + "source": [ + "images = mnist.data.values.reshape((-1, 28, 28)) \n", + "plt.imshow(images[4],cmap=plt.cm.gray_r,interpolation=\"nearest\") \n", + "plt.show()\n", + "print(mnist.target[4])" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "1992f78a", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import fetch_openml \n", + "import matplotlib.pyplot as plt \n", + "mnist = fetch_openml('mnist_784')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c16f01ca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(n_neighbors=10)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "\n", + "echantillon = np.random.randint(70000, size=5000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, \n", + "train_size=0.8)\n", + "\n", + "clf = KNeighborsClassifier(10) \n", + "clf.fit(xtrain, ytrain)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "de3692e9", + "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": [ + "['0']\n" + ] + } + ], + "source": [ + "images = data.reshape((-1, 28, 28)) \n", + "plt.imshow(images[4],cmap=plt.cm.gray_r,interpolation=\"nearest\") \n", + "plt.show()\n", + "\n", + "print(clf.predict([data[4]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "5ad97acb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "test:\n", + "0.928\n", + "train:\n", + "0.938\n" + ] + } + ], + "source": [ + "print(\"test:\")\n", + "print(clf.score(xtest, ytest))\n", + "print(\"train:\")\n", + "print(clf.score(xtrain, ytrain))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "29bae5b3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "max score : 0.9536\n", + "k = 3\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.model_selection import KFold\n", + "from statistics import mean\n", + "import matplotlib.pyplot as plt \n", + "\n", + "mean_list =[]\n", + "index = range(2,15)\n", + "for i in range(2,15):\n", + " clf = KNeighborsClassifier(i) \n", + " clf.fit(xtrain, ytrain)\n", + " kf = KFold(n_splits=10,shuffle=True) \n", + " train = []\n", + " test = []\n", + " for train_index, test_index in kf.split(data):\n", + " X_train, X_test = data[train_index], data[test_index]\n", + " y_train, y_test = target.values[train_index], target.values[test_index]\n", + " test.append(clf.score(X_test, y_test))\n", + " train.append(clf.score(X_train, y_train))\n", + " mean_list.append(mean(test))\n", + "print(\"max score :\", max(mean_list))\n", + "print(\"k = \", mean_list.index(max(mean_list))+2)\n", + "\n", + "plt.plot(index, mean_list)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('nb_neighbors')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "aa975189", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "import matplotlib.pyplot as plt \n", + "import time\n", + "\n", + "echantillon = np.random.randint(70000, size=5000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "\n", + "list_scores = []\n", + "list_percentage = np.arange(0.1, 1, 0.1)\n", + "times = []\n", + "\n", + "for i in list_percentage :\n", + " xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=i)\n", + " start = time.time()\n", + " clf = KNeighborsClassifier(3) \n", + " clf.fit(xtrain, ytrain)\n", + " end = time.time()\n", + " elapsed = end-start\n", + " list_scores.append(clf.score(xtest, ytest))\n", + " times.append(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "27808a60", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(2,1,1)\n", + "plt.plot(list_percentage, list_scores)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('training_percentage')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(list_percentage, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('training_percentage')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "551cdf20", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import time\n", + "\n", + "list_sizes = np.arange(1000, 71000, 1000)\n", + "list_scores = []\n", + "times = []\n", + "for i in list_sizes:\n", + " echantillon = np.random.randint(70000, size=i)\n", + "\n", + " data = mnist.data.values[echantillon]\n", + " target = mnist.target[echantillon]\n", + " \n", + " xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=0.9)\n", + " start = time.time()\n", + " clf = KNeighborsClassifier(3) \n", + " clf.fit(xtrain, ytrain)\n", + " end = time.time()\n", + " elapsed = end-start\n", + " list_scores.append(clf.score(xtest, ytest))\n", + " times.append(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "10e3471f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(2,1,1)\n", + "plt.plot(list_sizes, list_scores)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('sample size')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(list_sizes, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('sample size')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "6b7b2aec", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "import matplotlib.pyplot as plt\n", + "import time\n", + "\n", + "echantillon = np.random.randint(70000, size=5000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "\n", + "list_plot = []\n", + "liste_distance = [1, 2, 3, 4, 5, 6]\n", + "times = []\n", + "\n", + "for j in liste_distance :\n", + " list_score = []\n", + " \n", + " xtrain, xtest, ytrain, ytest = train_test_split(data, target, \n", + " train_size=0.8)\n", + " \n", + " start = time.time()\n", + " clf = KNeighborsClassifier(10, p = j) \n", + " clf.fit(xtrain, ytrain)\n", + " end = time.time()\n", + " elapsed = end-start\n", + " \n", + " list_score.append(clf.score(xtest, ytest))\n", + " list_plot.append(list_score)\n", + " times.append(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "9e50fec9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.subplot(2,1,1)\n", + "plt.scatter(liste_distance, list_plot)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('distance')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(liste_distance, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('distance')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "6575833c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n_jobs = 1, score = 0.929\n", + "Temps d'exécution : 0.01147ms\n" + ] + } + ], + "source": [ + "import time\n", + "\n", + "echantillon = np.random.randint(70000, size=5000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "\n", + "list_score = []\n", + "\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, \n", + "train_size=0.8)\n", + "\n", + "start = time.time()\n", + "clf = KNeighborsClassifier(3, n_jobs = 1) \n", + "clf.fit(xtrain, ytrain)\n", + "\n", + "end = time.time()\n", + "elapsed = end - start\n", + "\n", + "print(\"n_jobs = 1, score = \", clf.score(xtest, ytest))\n", + "print(f'Temps d\\'exécution : {elapsed:.4}ms')" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "0772056d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n_jobs = -1, score = 0.931\n", + "Temps d'exécution : 0.01098ms\n" + ] + } + ], + "source": [ + "echantillon = np.random.randint(70000, size=5000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "\n", + "list_score = []\n", + "\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, \n", + "train_size=0.8)\n", + "\n", + "start = time.time()\n", + "clf = KNeighborsClassifier(3, n_jobs = -1) \n", + "clf.fit(xtrain, ytrain)\n", + "\n", + "end = time.time()\n", + "elapsed = end - start\n", + "\n", + "print(\"n_jobs = -1, score = \", clf.score(xtest, ytest))\n", + "print(f'Temps d\\'exécution : {elapsed:.4}ms')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "94d331a4", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn.metrics import confusion_matrix \n", + "echantillon = np.random.randint(70000, size=20000)\n", + "\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=0.9)\n", + "clf = KNeighborsClassifier(3)\n", + "clf.fit(xtrain, ytrain)\n", + "cm = confusion_matrix(target.values, clf.predict(data))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2fdd3bfd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2009 0 1 0 0 1 5 1 0 1]\n", + " [ 0 2211 2 1 1 0 0 3 0 0]\n", + " [ 13 7 1977 5 1 0 0 21 2 0]\n", + " [ 2 4 14 2037 0 13 0 10 9 4]\n", + " [ 0 10 0 0 1910 0 2 0 0 25]\n", + " [ 3 2 1 14 3 1687 6 1 4 7]\n", + " [ 4 8 0 0 2 3 1892 0 0 0]\n", + " [ 1 24 5 0 2 0 0 2101 1 22]\n", + " [ 5 19 3 14 5 19 4 2 1799 14]\n", + " [ 4 4 3 10 6 2 2 22 1 1967]]\n" + ] + } + ], + "source": [ + "print(cm)" + ] + } + ], + "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.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/svm.ipynb b/svm.ipynb new file mode 100644 index 0000000..2b4c092 --- /dev/null +++ b/svm.ipynb @@ -0,0 +1,400 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 15, + "id": "f574b533", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import fetch_openml \n", + "mnist = fetch_openml('mnist_784')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "18715d1a", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neural_network import MLPClassifier\n", + "import time\n", + "\n", + "echantillon = np.random.randint(70000, size=5000)\n", + "data = mnist.data.values[echantillon]\n", + "target = mnist.target[echantillon]\n", + "xtrain, xtest, ytrain, ytest = train_test_split(data, target, \n", + "train_size=0.7)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "cbc09c8d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "SVC()" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.svm import SVC\n", + "\n", + "classifier = SVC() \n", + "classifier.fit(xtrain, ytrain) " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0bd90d8f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.958\n" + ] + } + ], + "source": [ + "print(classifier.score(xtest, ytest))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "57f74503", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.894\n", + "1.5807139873504639\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clsvm = SVC(kernel='linear')\n", + "clsvm.fit(xtrain, ytrain) \n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clsvm.score(xtest, ytest))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "044cbea3", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9166666666666666\n", + "2.6217856407165527\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clsvm = SVC(kernel='poly')\n", + "clsvm.fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clsvm.score(xtest, ytest))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fe0b2f95", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.934\n", + "2.407616376876831\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clsvm = SVC(kernel='rbf')\n", + "clsvm.fit(xtrain, ytrain)\n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clsvm.score(xtest, ytest))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d70d1956", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.8493333333333334\n", + "2.6164588928222656\n" + ] + } + ], + "source": [ + "start = time.time()\n", + "clsvm = SVC(kernel='sigmoid')\n", + "clsvm.fit(xtrain, ytrain) \n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clsvm.score(xtest, ytest))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "53c212e9", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Precomputed matrix must be a square matrix. Input is a 3500x784 matrix.", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mstart\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mclsvm\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSVC\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkernel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'precomputed'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mclsvm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mxtrain\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mytrain\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mend\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0melapsed\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mend\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mstart\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sklearn\\svm\\_base.py\u001b[0m in \u001b[0;36mfit\u001b[1;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[0;32m 186\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 187\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkernel\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m\"precomputed\"\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mn_samples\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 188\u001b[1;33m raise ValueError(\"Precomputed matrix must be a square matrix.\"\n\u001b[0m\u001b[0;32m 189\u001b[0m \u001b[1;34m\" Input is a {}x{} matrix.\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 190\u001b[0m .format(X.shape[0], X.shape[1]))\n", + "\u001b[1;31mValueError\u001b[0m: Precomputed matrix must be a square matrix. Input is a 3500x784 matrix." + ] + } + ], + "source": [ + "start = time.time()\n", + "clsvm = SVC(kernel='precomputed')\n", + "clsvm.fit(xtrain, ytrain) \n", + "end = time.time()\n", + "elapsed = end - start\n", + "print(clsvm.score(xtest, ytest))\n", + "print(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7ddb1fe8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "kernel_function = ['linear', 'poly', 'rbf', 'sigmoid']\n", + "scores = [0.894, 0.9166666666666666, 0.934, 0.934]\n", + "times = [1.5807139873504639, 2.6217856407165527, 2.407616376876831, 2.6164588928222656]\n", + "\n", + "plt.subplot(2,1,1)\n", + "plt.plot(kernel_function, scores)\n", + "plt.ylabel('scores')\n", + "plt.xlabel('kernel function')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(kernel_function, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('kernel function')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "79cc2019", + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "liste_C = [0.1, 0.3, 0.5, 0.7, 1.0]\n", + "liste_scores_test = []\n", + "liste_scores_train = []\n", + "times = []\n", + "for i in liste_C:\n", + " start = time.time()\n", + " clsvm = SVC(C = i)\n", + " clsvm.fit(xtrain, ytrain) \n", + " clsvm.fit(xtest, ytest)\n", + " end = time.time()\n", + " elapsed = end - start\n", + " liste_scores_test.append(clsvm.score(xtest, ytest))\n", + " liste_scores_train.append(clsvm.score(xtrain, ytrain))\n", + " times.append(elapsed)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "69a91eaf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "\n", + "plt.subplot(2,1,1)\n", + "plt.plot(liste_C, liste_scores_test)\n", + "plt.ylabel('scores test')\n", + "plt.xlabel('tolerance C')\n", + "\n", + "plt.subplot(2,1,2)\n", + "plt.plot(liste_C, times)\n", + "plt.ylabel('time')\n", + "plt.xlabel('tolerance C')\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "7a7ecd10", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[503 0 0 0 0 1 1 0 2 0]\n", + " [ 0 520 0 0 0 0 0 0 1 1]\n", + " [ 2 1 514 2 1 0 2 3 3 1]\n", + " [ 0 1 1 462 0 8 2 1 6 2]\n", + " [ 1 1 0 0 470 0 1 0 0 9]\n", + " [ 0 2 0 5 1 415 2 0 2 0]\n", + " [ 0 0 0 0 2 7 514 0 1 0]\n", + " [ 0 4 2 0 2 1 0 530 0 3]\n", + " [ 3 4 2 4 2 6 2 0 471 1]\n", + " [ 2 3 0 3 4 1 0 5 1 470]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix \n", + "cm = confusion_matrix(target.values, classifier.predict(data))\n", + "print(cm)\n", + "#recall = vrai positif/somme ligne\n", + "#precision = vrai positif/somme colonne\n", + "#matrice de confusion : ligne = chiffre à analyser, colonne chiffre auquel il est comparé" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "14cd493b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sn\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "df_cm = pd.DataFrame(cm, range(10),\n", + " range(10))\n", + "plt.figure(figsize = (15,10))\n", + "sn.set(font_scale=3)#for label size\n", + "sn.heatmap(df_cm, annot=True,annot_kws={\"size\": 32}, fmt='d', cmap=\"icefire\")# font size" + ] + } + ], + "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.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}