Skip to content

Instantly share code, notes, and snippets.

@ia35
Created June 9, 2021 07:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ia35/b98d1797e90a19037136c036ea835d56 to your computer and use it in GitHub Desktop.
Save ia35/b98d1797e90a19037136c036ea835d56 to your computer and use it in GitHub Desktop.
MNIST_0.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "MNIST_0.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyNTX2urdL2jDuoNde73Te1d",
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/ia35/b98d1797e90a19037136c036ea835d56/mnist_0.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QSncrrgiqPNh"
},
"source": [
"[![](http://bec552ebfe.url-de-test.ws/ml/buttonBackProp.png)](https://www.backprop.fr)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OqXy-77tqTY_"
},
"source": [
"[![](https://raw.githubusercontent.com/BackProp-fr/meetup/master/images/LogoBackPropTranspSmall.png)](https://www.backprop.fr)\n",
"\n",
"Le logo BackProp est présenté chaque fois qu'un point important doit être signalé"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rck6RoYgqY02"
},
"source": [
"# <font color=\"teal\">Références</font>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DEAuMec5R1Ky"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5QKZ4IufAegy"
},
"source": [
"- Aurélien Geron : Hands-On Machine Learning withc Scikit-Learn, Keras and TensorFlow\n",
"- Un peu de Machine Learning avec les [SVM](https://zestedesavoir.com/tutoriels/1760/un-peu-de-machine-learning-avec-les-svm/)\n",
"- A Practical Guide to [Support](https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf) Vector Classification\n",
"- Cross-validation: evaluating estimator [performance](https://scikit-learn.org/stable/modules/cross_validation.html#repeated-k-fold)\n",
"- Classifiez vos données en [plus](https://openclassrooms.com/fr/courses/4444646-entrainez-un-modele-predictif-lineaire/4507846-classifiez-vos-donnees-en-plus-de-deux-classes) de deux classes"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DuQRl63fuM15"
},
"source": [
"# <font color=\"teal\">Lecture des données avec Sklearn</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "WCorjoOSqZO1"
},
"source": [
"# Import datasets\n",
"from sklearn import datasets"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "vZe6PKAYzopb"
},
"source": [
"## <font color=\"orange\">load_digits</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "2ocGZxttrFrV"
},
"source": [
"digits = datasets.load_digits()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 103
},
"id": "x2vmDAq5rkWe",
"outputId": "1eafc5fe-c54a-44d7-b582-83ab03a6015c"
},
"source": [
"digits.DESCR"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "string"
},
"text/plain": [
"\".. _digits_dataset:\\n\\nOptical recognition of handwritten digits dataset\\n--------------------------------------------------\\n\\n**Data Set Characteristics:**\\n\\n :Number of Instances: 5620\\n :Number of Attributes: 64\\n :Attribute Information: 8x8 image of integer pixels in the range 0..16.\\n :Missing Attribute Values: None\\n :Creator: E. Alpaydin (alpaydin '@' boun.edu.tr)\\n :Date: July; 1998\\n\\nThis is a copy of the test set of the UCI ML hand-written digits datasets\\nhttps://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits\\n\\nThe data set contains images of hand-written digits: 10 classes where\\neach class refers to a digit.\\n\\nPreprocessing programs made available by NIST were used to extract\\nnormalized bitmaps of handwritten digits from a preprinted form. From a\\ntotal of 43 people, 30 contributed to the training set and different 13\\nto the test set. 32x32 bitmaps are divided into nonoverlapping blocks of\\n4x4 and the number of on pixels are counted in each block. This generates\\nan input matrix of 8x8 where each element is an integer in the range\\n0..16. This reduces dimensionality and gives invariance to small\\ndistortions.\\n\\nFor info on NIST preprocessing routines, see M. D. Garris, J. L. Blue, G.\\nT. Candela, D. L. Dimmick, J. Geist, P. J. Grother, S. A. Janet, and C.\\nL. Wilson, NIST Form-Based Handprint Recognition System, NISTIR 5469,\\n1994.\\n\\n.. topic:: References\\n\\n - C. Kaynak (1995) Methods of Combining Multiple Classifiers and Their\\n Applications to Handwritten Digit Recognition, MSc Thesis, Institute of\\n Graduate Studies in Science and Engineering, Bogazici University.\\n - E. Alpaydin, C. Kaynak (1998) Cascading Classifiers, Kybernetika.\\n - Ken Tang and Ponnuthurai N. Suganthan and Xi Yao and A. Kai Qin.\\n Linear dimensionalityreduction using relevance weighted LDA. School of\\n Electrical and Electronic Engineering Nanyang Technological University.\\n 2005.\\n - Claudio Gentile. A New Approximate Maximal Margin Classification\\n Algorithm. NIPS. 2000.\""
]
},
"metadata": {
"tags": []
},
"execution_count": 3
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "j96qmtHmvS2M",
"outputId": "5efb5d96-adba-4bf2-9bbe-89d0ecefaf60"
},
"source": [
"print(digits.DESCR)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
".. _digits_dataset:\n",
"\n",
"Optical recognition of handwritten digits dataset\n",
"--------------------------------------------------\n",
"\n",
"**Data Set Characteristics:**\n",
"\n",
" :Number of Instances: 5620\n",
" :Number of Attributes: 64\n",
" :Attribute Information: 8x8 image of integer pixels in the range 0..16.\n",
" :Missing Attribute Values: None\n",
" :Creator: E. Alpaydin (alpaydin '@' boun.edu.tr)\n",
" :Date: July; 1998\n",
"\n",
"This is a copy of the test set of the UCI ML hand-written digits datasets\n",
"https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits\n",
"\n",
"The data set contains images of hand-written digits: 10 classes where\n",
"each class refers to a digit.\n",
"\n",
"Preprocessing programs made available by NIST were used to extract\n",
"normalized bitmaps of handwritten digits from a preprinted form. From a\n",
"total of 43 people, 30 contributed to the training set and different 13\n",
"to the test set. 32x32 bitmaps are divided into nonoverlapping blocks of\n",
"4x4 and the number of on pixels are counted in each block. This generates\n",
"an input matrix of 8x8 where each element is an integer in the range\n",
"0..16. This reduces dimensionality and gives invariance to small\n",
"distortions.\n",
"\n",
"For info on NIST preprocessing routines, see M. D. Garris, J. L. Blue, G.\n",
"T. Candela, D. L. Dimmick, J. Geist, P. J. Grother, S. A. Janet, and C.\n",
"L. Wilson, NIST Form-Based Handprint Recognition System, NISTIR 5469,\n",
"1994.\n",
"\n",
".. topic:: References\n",
"\n",
" - C. Kaynak (1995) Methods of Combining Multiple Classifiers and Their\n",
" Applications to Handwritten Digit Recognition, MSc Thesis, Institute of\n",
" Graduate Studies in Science and Engineering, Bogazici University.\n",
" - E. Alpaydin, C. Kaynak (1998) Cascading Classifiers, Kybernetika.\n",
" - Ken Tang and Ponnuthurai N. Suganthan and Xi Yao and A. Kai Qin.\n",
" Linear dimensionalityreduction using relevance weighted LDA. School of\n",
" Electrical and Electronic Engineering Nanyang Technological University.\n",
" 2005.\n",
" - Claudio Gentile. A New Approximate Maximal Margin Classification\n",
" Algorithm. NIPS. 2000.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "79d0cLOGrqAQ",
"outputId": "65e54697-aa99-439a-df03-e16830f8ae9a"
},
"source": [
"digits.keys()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"dict_keys(['data', 'target', 'target_names', 'images', 'DESCR'])"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Al1nYqRmrwXu",
"outputId": "62807f15-fb30-490b-ea5f-17231dd617ca"
},
"source": [
"digits.data"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[ 0., 0., 5., ..., 0., 0., 0.],\n",
" [ 0., 0., 0., ..., 10., 0., 0.],\n",
" [ 0., 0., 0., ..., 16., 9., 0.],\n",
" ...,\n",
" [ 0., 0., 1., ..., 6., 0., 0.],\n",
" [ 0., 0., 2., ..., 12., 0., 0.],\n",
" [ 0., 0., 10., ..., 12., 1., 0.]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hMQqZbnZr2Rn",
"outputId": "6a337de9-7ade-4447-c31e-a25985974b2c"
},
"source": [
"digits.target"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0, 1, 2, ..., 8, 9, 8])"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OYbq5l6Qr4t9",
"outputId": "ac022c6d-184c-42ed-da5d-4a4d3f94d027"
},
"source": [
"digits.target_names"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3HPDCIRpr7dO",
"outputId": "c097d84f-7169-46c8-a1a5-48d8138abb97"
},
"source": [
"digits.images"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[[ 0., 0., 5., ..., 1., 0., 0.],\n",
" [ 0., 0., 13., ..., 15., 5., 0.],\n",
" [ 0., 3., 15., ..., 11., 8., 0.],\n",
" ...,\n",
" [ 0., 4., 11., ..., 12., 7., 0.],\n",
" [ 0., 2., 14., ..., 12., 0., 0.],\n",
" [ 0., 0., 6., ..., 0., 0., 0.]],\n",
"\n",
" [[ 0., 0., 0., ..., 5., 0., 0.],\n",
" [ 0., 0., 0., ..., 9., 0., 0.],\n",
" [ 0., 0., 3., ..., 6., 0., 0.],\n",
" ...,\n",
" [ 0., 0., 1., ..., 6., 0., 0.],\n",
" [ 0., 0., 1., ..., 6., 0., 0.],\n",
" [ 0., 0., 0., ..., 10., 0., 0.]],\n",
"\n",
" [[ 0., 0., 0., ..., 12., 0., 0.],\n",
" [ 0., 0., 3., ..., 14., 0., 0.],\n",
" [ 0., 0., 8., ..., 16., 0., 0.],\n",
" ...,\n",
" [ 0., 9., 16., ..., 0., 0., 0.],\n",
" [ 0., 3., 13., ..., 11., 5., 0.],\n",
" [ 0., 0., 0., ..., 16., 9., 0.]],\n",
"\n",
" ...,\n",
"\n",
" [[ 0., 0., 1., ..., 1., 0., 0.],\n",
" [ 0., 0., 13., ..., 2., 1., 0.],\n",
" [ 0., 0., 16., ..., 16., 5., 0.],\n",
" ...,\n",
" [ 0., 0., 16., ..., 15., 0., 0.],\n",
" [ 0., 0., 15., ..., 16., 0., 0.],\n",
" [ 0., 0., 2., ..., 6., 0., 0.]],\n",
"\n",
" [[ 0., 0., 2., ..., 0., 0., 0.],\n",
" [ 0., 0., 14., ..., 15., 1., 0.],\n",
" [ 0., 4., 16., ..., 16., 7., 0.],\n",
" ...,\n",
" [ 0., 0., 0., ..., 16., 2., 0.],\n",
" [ 0., 0., 4., ..., 16., 2., 0.],\n",
" [ 0., 0., 5., ..., 12., 0., 0.]],\n",
"\n",
" [[ 0., 0., 10., ..., 1., 0., 0.],\n",
" [ 0., 2., 16., ..., 1., 0., 0.],\n",
" [ 0., 0., 15., ..., 15., 0., 0.],\n",
" ...,\n",
" [ 0., 4., 16., ..., 16., 6., 0.],\n",
" [ 0., 8., 16., ..., 16., 8., 0.],\n",
" [ 0., 1., 8., ..., 12., 1., 0.]]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hUXb14Kyr95N",
"outputId": "2f22ed28-0390-4e69-cb44-279657f4f2a1"
},
"source": [
"len(digits.data)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1797"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "DIP9oK7HtlDD",
"outputId": "308d4da5-8915-48df-c635-8380c77e0660"
},
"source": [
"len(digits.images)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1797"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5FDBdTGgtpNe",
"outputId": "3ae2ef5c-d3b5-47e6-a5d1-e958d2cc7b3b"
},
"source": [
"len(digits.data[0])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"64"
]
},
"metadata": {
"tags": []
},
"execution_count": 12
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "81nctBO4tsqb",
"outputId": "bfe65151-b59e-4ddb-8ad5-37a2e410a33f"
},
"source": [
"len(digits.images[0])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"8"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OGWj6kbWtu0f",
"outputId": "048f8b2b-87f4-4b26-84cf-edd97fdb670a"
},
"source": [
"digits.images[0]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[ 0., 0., 5., 13., 9., 1., 0., 0.],\n",
" [ 0., 0., 13., 15., 10., 15., 5., 0.],\n",
" [ 0., 3., 15., 2., 0., 11., 8., 0.],\n",
" [ 0., 4., 12., 0., 0., 8., 8., 0.],\n",
" [ 0., 5., 8., 0., 0., 9., 8., 0.],\n",
" [ 0., 4., 11., 0., 1., 12., 7., 0.],\n",
" [ 0., 2., 14., 5., 10., 12., 0., 0.],\n",
" [ 0., 0., 6., 13., 10., 0., 0., 0.]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Nj8qQQmQtyK1",
"outputId": "53ec420b-2f1a-429c-bfa4-caafa27ee041"
},
"source": [
"digits.data[0]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ 0., 0., 5., 13., 9., 1., 0., 0., 0., 0., 13., 15., 10.,\n",
" 15., 5., 0., 0., 3., 15., 2., 0., 11., 8., 0., 0., 4.,\n",
" 12., 0., 0., 8., 8., 0., 0., 5., 8., 0., 0., 9., 8.,\n",
" 0., 0., 4., 11., 0., 1., 12., 7., 0., 0., 2., 14., 5.,\n",
" 10., 12., 0., 0., 0., 0., 6., 13., 10., 0., 0., 0.])"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "HuxNS-QEt2R6",
"outputId": "12de8d36-67bc-4260-cf3a-a965e3ce9481"
},
"source": [
"print(digits.data.shape)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"(1797, 64)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "FEL50MG-uoov",
"outputId": "5b51e481-fd22-4a57-f78d-535738a89c08"
},
"source": [
"print(digits.images.shape)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"(1797, 8, 8)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "phTRatRB1JJS"
},
"source": [
"monimg = digits.images[0]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Xf9OZ__C1jxX"
},
"source": [
"import matplotlib.pyplot as plt"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uVqLjVeIWfOd",
"outputId": "aa36107a-71b3-473c-eac2-d83c9d76b464"
},
"source": [
"monimg"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[ 0., 0., 5., 13., 9., 1., 0., 0.],\n",
" [ 0., 0., 13., 15., 10., 15., 5., 0.],\n",
" [ 0., 3., 15., 2., 0., 11., 8., 0.],\n",
" [ 0., 4., 12., 0., 0., 8., 8., 0.],\n",
" [ 0., 5., 8., 0., 0., 9., 8., 0.],\n",
" [ 0., 4., 11., 0., 1., 12., 7., 0.],\n",
" [ 0., 2., 14., 5., 10., 12., 0., 0.],\n",
" [ 0., 0., 6., 13., 10., 0., 0., 0.]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 20
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "qbAkQIZ_1v_8",
"outputId": "f82ed809-3c53-44e4-9638-b98137fded68"
},
"source": [
"plt.imshow(monimg)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa968af1a90>"
]
},
"metadata": {
"tags": []
},
"execution_count": 21
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "yNk17RBH1qUK",
"outputId": "2b12be4c-4696-4042-8291-57c137be8bee"
},
"source": [
"plt.imshow(monimg, cmap=\"binary\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa9533c7ed0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Evdvu02-2Aqn"
},
"source": [
"monimg = digits.data[0]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "oZGJn81G2DUl",
"outputId": "945079ff-89f0-4af7-a6ea-4e920289f6ad"
},
"source": [
"monimg.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(64,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "c2r94Dyn2G8_",
"outputId": "4db492b5-648b-45a4-fa65-38ebdc139c72"
},
"source": [
"plt.imshow(monimg.reshape(8,8), cmap=\"binary\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa953356290>"
]
},
"metadata": {
"tags": []
},
"execution_count": 25
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d3BXWxTAz-kW"
},
"source": [
"## <font color=\"orange\">fetch_openml MNIST</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "DPoiXnd6wmcq"
},
"source": [
"from sklearn.datasets import fetch_openml"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "2_RUOcmOMO5Q"
},
"source": [
"[fetch_openml](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_openml.html?highlight=fetch_openml#sklearn.datasets.fetch_openml) : Fetch dataset from openml by name or dataset id. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rVFiRM15MYTB"
},
"source": [
"OpenML : https://www.openml.org"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c2w8HT6UMy_9"
},
"source": [
"[mnist_784](https://www.openml.org/d/554) \n",
"\n",
"The 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",
"\n",
"It 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."
]
},
{
"cell_type": "code",
"metadata": {
"id": "U6DHSQy1ytYa"
},
"source": [
"mnist = fetch_openml('mnist_784')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9014laM90H1S",
"outputId": "a0d8ca98-7b5a-4286-ccd7-089fe88f1c5a"
},
"source": [
"mnist.keys()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"dict_keys(['data', 'target', 'frame', 'feature_names', 'target_names', 'DESCR', 'details', 'categories', 'url'])"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "m_0wW4R1yx3s",
"outputId": "fd47925e-36ef-49ec-aaa8-0e46b263d217"
},
"source": [
"print(mnist.DESCR)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"**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",
"\n",
"The 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",
"\n",
"It 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",
"\n",
"With 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",
"\n",
"The 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",
"\n",
"Downloaded from openml.org.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "CMQPOhWvzAAn",
"outputId": "b9981148-a193-41a6-9f17-a9a4813d83ff"
},
"source": [
"mnist.data.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(70000, 784)"
]
},
"metadata": {
"tags": []
},
"execution_count": 30
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9q8pL76HzKeV",
"outputId": "bc0cb804-ab88-4c70-8ef5-24f7a5f405e9"
},
"source": [
"mnist.target.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(70000,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 31
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "zK4VOc3k32oX"
},
"source": [
"monimg = mnist.data[0]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "RMRBrXIz4AqW",
"outputId": "08671edb-f4df-4e51-89f9-4e150a952c3e"
},
"source": [
"plt.imshow(monimg.reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa95322ca90>"
]
},
"metadata": {
"tags": []
},
"execution_count": 33
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"id": "iPyOyFlk4EjC",
"outputId": "4842e70a-ec04-4eeb-c7cd-4d67c10b1af4"
},
"source": [
"mnist.target[0]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "string"
},
"text/plain": [
"'5'"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2WlzFgJ745yi",
"outputId": "789e9b03-bf33-4607-e8ba-743732b195dd"
},
"source": [
"mnist.target_names"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['class']"
]
},
"metadata": {
"tags": []
},
"execution_count": 35
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "01Lb3vd76nEx"
},
"source": [
"X = mnist.data \n",
"y = mnist.target"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ta6wWIQ1btWc"
},
"source": [
"## <font color=\"orange\">conversion array str</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "tcXpdmcQ7Wxx"
},
"source": [
"import numpy as np"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "BrYgCBoW7TIA"
},
"source": [
"y = y.astype(np.uint8)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "6mBdFw5h5oKf"
},
"source": [
"# <font color=\"teal\">Split des données</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "rBdj5vk-49yK"
},
"source": [
"X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "INyq-jjQ-Ir2",
"outputId": "bc9f0202-9524-4efc-ca7c-686865c1a0fb"
},
"source": [
"X_train.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(60000, 784)"
]
},
"metadata": {
"tags": []
},
"execution_count": 40
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "aZR4h1046h8g",
"outputId": "397e4f15-58dc-4f38-a682-36b8b1aa42a4"
},
"source": [
"X_train[0].shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(784,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 41
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C-sgZgbPmJ5F"
},
"source": [
"## <font color=\"orange\">avec sklearn</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "IL15Zu5p60pm"
},
"source": [
"from sklearn.model_selection import train_test_split"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "2D3VOuCW9sIH"
},
"source": [
"X2_train, X2_test, y2_train, y2_test = train_test_split(X, y, test_size=0.1435, random_state=0)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3_RkVoDh-DaB",
"outputId": "a6764026-7704-4750-e3de-dfb017b7e226"
},
"source": [
"X2_train.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(59955, 784)"
]
},
"metadata": {
"tags": []
},
"execution_count": 44
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_pzEHkXXmPD2"
},
"source": [
"## <font color=\"orange\">distribution</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0nmWKxUz-Fex"
},
"source": [
"import seaborn as sns"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 386
},
"id": "Dr_blZ52kRNU",
"outputId": "4fc265f0-fd31-4ee7-c809-8798277563ea"
},
"source": [
"sns.displot(y_train)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x7fa953285450>"
]
},
"metadata": {
"tags": []
},
"execution_count": 46
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 386
},
"id": "Wc63jXn5kVRM",
"outputId": "4786ffdb-48a7-42b8-8cd2-a33d71794a25"
},
"source": [
"sns.displot(y_test)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x7fa948977cd0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 47
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 386
},
"id": "EdZGoBjGlZX1",
"outputId": "ccbe0309-9624-4f62-c224-6543bfab22ca"
},
"source": [
"sns.displot(y2_train)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x7fa9488f4f90>"
]
},
"metadata": {
"tags": []
},
"execution_count": 48
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pCeNyjo4AaW8"
},
"source": [
"# <font color=\"teal\">Classificateur binaire</font>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1nmtloo3a0Zt"
},
"source": [
"## <font color=\"orange\">5 ou pas ?</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "HMkuQefv_mlb"
},
"source": [
"y_train_5 = (y_train == 5) \n",
"y_test_5 = (y_test == 5)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VLqSPouJB-8Z",
"outputId": "c1a77194-434c-4844-de66-d0ca212ed95f"
},
"source": [
"y_train_5"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ True, False, False, ..., True, False, False])"
]
},
"metadata": {
"tags": []
},
"execution_count": 50
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QwQany1ZfXNf"
},
"source": [
"Linear [classifiers]((https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html)) (SVM, logistic regression, etc.) with SGD training.\n",
"\n",
"This estimator implements regularized linear models with stochastic gradient descent (SGD) learning: the gradient of the loss is estimated each sample at a time and the model is updated along the way with a decreasing strength schedule (aka learning rate). SGD allows minibatch (online/out-of-core) learning via the partial_fit method. For best results using the default learning rate schedule, the data should have zero mean and unit variance."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7C68FQOeCAud",
"outputId": "25d89cea-c6be-44d1-cf67-6a5a936d79b3"
},
"source": [
"from sklearn.linear_model import SGDClassifier\n",
"\n",
"sgd_clf = SGDClassifier(random_state=42)\n",
"sgd_clf.fit(X_train, y_train_5)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"SGDClassifier(alpha=0.0001, average=False, class_weight=None,\n",
" early_stopping=False, epsilon=0.1, eta0=0.0, fit_intercept=True,\n",
" l1_ratio=0.15, learning_rate='optimal', loss='hinge',\n",
" max_iter=1000, n_iter_no_change=5, n_jobs=None, penalty='l2',\n",
" power_t=0.5, random_state=42, shuffle=True, tol=0.001,\n",
" validation_fraction=0.1, verbose=0, warm_start=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 51
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WExX5HmdCixz",
"outputId": "7650c2f8-6108-4053-96e4-6b0beef19d51"
},
"source": [
"y_train_5[:20]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ True, False, False, False, False, False, False, False, False,\n",
" False, False, True, False, False, False, False, False, False,\n",
" False, False])"
]
},
"metadata": {
"tags": []
},
"execution_count": 52
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "F_2lZ35jZ8_q",
"outputId": "72932b7e-145d-485b-8aef-f7db31a5dfa2"
},
"source": [
"plt.imshow(X_train[0].reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa947066e90>"
]
},
"metadata": {
"tags": []
},
"execution_count": 53
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ZFqcaL-JCK_8",
"outputId": "c0cd6bad-5788-4334-fcf6-c74ae9519339"
},
"source": [
"sgd_clf.predict([X[0]])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ True])"
]
},
"metadata": {
"tags": []
},
"execution_count": 54
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "C7zAr38daUYm",
"outputId": "b99ada9c-d08b-43b3-c66d-d0179a47d01e"
},
"source": [
"plt.imshow(X_train[1].reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa946fd6410>"
]
},
"metadata": {
"tags": []
},
"execution_count": 55
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MVO9cSoeCbbC",
"outputId": "1c77a9f7-81e4-46d7-8912-6398c40b3113"
},
"source": [
"sgd_clf.predict([X[1]])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([False])"
]
},
"metadata": {
"tags": []
},
"execution_count": 56
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "86NPaydwaW31",
"outputId": "9e154e88-3a37-4342-ecb2-df5f0b529331"
},
"source": [
"plt.imshow(X_train[11].reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa946fbac10>"
]
},
"metadata": {
"tags": []
},
"execution_count": 57
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LTzuynoFCoHB",
"outputId": "adaeb022-42e4-412f-c312-dd25fa74d50f"
},
"source": [
"sgd_clf.predict([X[11]])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ True])"
]
},
"metadata": {
"tags": []
},
"execution_count": 58
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wWlnTlaZa4p-"
},
"source": [
"## <font color=\"orange\">mesure des performances</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SY-1HJYlCumf"
},
"source": [
"from sklearn.model_selection import StratifiedKFold\n",
"from sklearn.base import clone\n",
"\n",
"skfolds = StratifiedKFold(n_splits=3)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "x07g9PN5g6bf"
},
"source": [
"[Stratified](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold) K-Folds cross-validator.\n",
"\n",
"Provides train/test indices to split data in train/test sets.\n",
"\n",
"This cross-validation object is a variation of KFold that returns stratified folds. The folds are made by preserving the percentage of samples for each class."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dWw0egAweUk-"
},
"source": [
"<img src=\"https://scikit-learn.org/stable/_images/grid_search_cross_validation.png\" width=50% />"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "b20COA0NgHiS"
},
"source": [
"[clone](https://scikit-learn.org/stable/modules/generated/sklearn.base.clone.html?highlight=clone#sklearn.base.clone)\n",
"\n",
"Constructs a new unfitted estimator with the same parameters.\n",
"\n",
"Clone does a deep copy of the model in an estimator without actually copying attached data. It yields a new estimator with the same parameters that has not been fitted on any data."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MjmQ4YWqbu89",
"outputId": "67f7f400-898c-4983-dd22-7ba0c60d0919"
},
"source": [
"for train_index, test_index in skfolds.split(X_train, y_train_5):\n",
" clone_clf = clone(sgd_clf)\n",
" X_train_folds = X_train[train_index]\n",
" y_train_folds = y_train_5[train_index]\n",
" X_test_fold = X_train[test_index]\n",
" y_test_fold = y_train_5[test_index]\n",
"\n",
" clone_clf.fit(X_train_folds, y_train_folds)\n",
" y_pred = clone_clf.predict(X_test_fold)\n",
" n_correct = sum(y_pred == y_test_fold)\n",
" print(n_correct / len(y_pred))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.95035\n",
"0.96035\n",
"0.9604\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "7iVJpVLDcFUq"
},
"source": [
"from sklearn.model_selection import cross_val_score"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "qEIk-1FT5Opg"
},
"source": [
"cross_val_score?"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7IKgMN3Revqh",
"outputId": "41a6e966-0084-431e-d85c-e3b3ca3d3dee"
},
"source": [
"scores = cross_val_score(sgd_clf, X_train, y_train_5, cv=5)\n",
"scores"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0.95466667, 0.96975 , 0.9635 , 0.96533333, 0.94841667])"
]
},
"metadata": {
"tags": []
},
"execution_count": 65
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "n7DDVwrviTrE"
},
"source": [
"## <font color=\"orange\">matrice de confusion</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "mBPUKawRfDi-"
},
"source": [
"from sklearn.model_selection import cross_val_predict"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "HXHYAm7Aiqkr"
},
"source": [
"y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Jrx94-y-i82i",
"outputId": "698c8aab-d181-4785-d29f-0a253d4ecfa5"
},
"source": [
"y_train_pred.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(60000,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 68
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "N1kC3mk_jNbY",
"outputId": "5f2a341e-00b7-4011-80c7-f596325c0960"
},
"source": [
"y_train_pred[:10]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ True, False, False, False, False, False, False, False, False,\n",
" False])"
]
},
"metadata": {
"tags": []
},
"execution_count": 69
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3bJCCDkHjRZ8"
},
"source": [
"from sklearn.metrics import confusion_matrix"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2fZhqM32jkHz",
"outputId": "6ab99a9f-7ac6-400b-b80c-2e738591052d"
},
"source": [
"conf_mx = confusion_matrix(y_train_5, y_train_pred)\n",
"conf_mx"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[53892, 687],\n",
" [ 1891, 3530]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 71
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Fvx1elENia36"
},
"source": [
"## <font color=\"orange\">precision, recall, f1</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "IkyhD492_kAm"
},
"source": [
"import pandas as pd"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "4uzWAwJF-Nym"
},
"source": [
"y_train_5_df=pd.DataFrame(y_train_5)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "zy0jDwC_Cbsf"
},
"source": [
"y_train_5_df.columns = ['actual value']"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "ujg8N8vB8DpF",
"outputId": "63b15805-5668-4bf2-9f07-34133994188b"
},
"source": [
"y_train_5_df.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>actual value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" actual value\n",
"0 True\n",
"1 False\n",
"2 False\n",
"3 False\n",
"4 False"
]
},
"metadata": {
"tags": []
},
"execution_count": 81
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "hGKwl95a-W3n"
},
"source": [
"y_train_pred_df=pd.DataFrame(y_train_pred)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "QAhfqKSgCrUz"
},
"source": [
"y_train_pred_df.columns = ['predicted value']"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "7DXtps0lABNp",
"outputId": "7a04f739-8dd9-40a2-ab0c-29d7161a35ec"
},
"source": [
"y_train_pred_df.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>predicted value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" predicted value\n",
"0 True\n",
"1 False\n",
"2 False\n",
"3 False\n",
"4 False"
]
},
"metadata": {
"tags": []
},
"execution_count": 85
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "0_7P4SlrAI4_",
"outputId": "ae9640ca-fd67-4a32-fcdf-616b4af6ec7d"
},
"source": [
"df = pd.concat([y_train_5_df, y_train_pred_df], axis=1)\n",
"df.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>actual value</th>\n",
" <th>predicted value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" actual value predicted value\n",
"0 True True\n",
"1 False False\n",
"2 False False\n",
"3 False False\n",
"4 False False"
]
},
"metadata": {
"tags": []
},
"execution_count": 86
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_-IuKp8lm43A"
},
"source": [
"<img src=\"https://www.mydatamodels.com/wp-content/uploads/2020/10/1.-Machine-Learning.png\" width=50% />"
]
},
{
"cell_type": "code",
"metadata": {
"id": "rtmm6-TLF4nb"
},
"source": [
"def tp_row (row):\n",
" return row['actual value'] & row['predicted value']\n",
"\n",
"def fn_row (row):\n",
" return row['actual value'] & ~row['predicted value']\n",
"\n",
"def fp_row (row):\n",
" return ~row['actual value'] & row['predicted value']\n",
"\n",
"def tn_row (row):\n",
" return ~row['actual value'] & ~row['predicted value']"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "BD0CbNWoFniS"
},
"source": [
"df['tp'] = df.apply (lambda row: tp_row(row), axis=1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "hFsfpXswPbfU"
},
"source": [
"df['fn'] = df.apply (lambda row: fn_row(row), axis=1)\n",
"df['fp'] = df.apply (lambda row: fp_row(row), axis=1)\n",
"df['tn'] = df.apply (lambda row: tn_row(row), axis=1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 514
},
"id": "bxCEwyg2GTxN",
"outputId": "e5f4ebab-6882-4e04-ec3a-4f8ae8a951c4"
},
"source": [
"df.head(15)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>actual value</th>\n",
" <th>predicted value</th>\n",
" <th>tp</th>\n",
" <th>fn</th>\n",
" <th>fp</th>\n",
" <th>tn</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" actual value predicted value tp fn fp tn\n",
"0 True True True False False False\n",
"1 False False False False False True\n",
"2 False False False False False True\n",
"3 False False False False False True\n",
"4 False False False False False True\n",
"5 False False False False False True\n",
"6 False False False False False True\n",
"7 False False False False False True\n",
"8 False False False False False True\n",
"9 False False False False False True\n",
"10 False False False False False True\n",
"11 True False False True False False\n",
"12 False False False False False True\n",
"13 False False False False False True\n",
"14 False False False False False True"
]
},
"metadata": {
"tags": []
},
"execution_count": 77
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "XwN2gY6OHdTN",
"outputId": "107deacf-7e45-447a-bc3e-8568eda2861c"
},
"source": [
"plt.imshow(X_train[0].reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f475cb69f50>"
]
},
"metadata": {
"tags": []
},
"execution_count": 78
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uyRzSZSHW6nM",
"outputId": "84ae2fb6-a0d1-4b90-eca9-0762c1921c31"
},
"source": [
"tp = df.tp.sum()\n",
"tp"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"3530"
]
},
"metadata": {
"tags": []
},
"execution_count": 79
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "mC3EdfW-PnbK",
"outputId": "c72c251a-56b7-46eb-f530-0a40ce3de18c"
},
"source": [
"fn = df.fn.sum()\n",
"fn"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1891"
]
},
"metadata": {
"tags": []
},
"execution_count": 80
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yWy97XODQveO",
"outputId": "0058b46b-1f88-4048-fb68-f77d2160dd3f"
},
"source": [
"fp = df.fp.sum()\n",
"fp"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"687"
]
},
"metadata": {
"tags": []
},
"execution_count": 81
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2KKsSF59Q0D-",
"outputId": "e0c0ec2f-532a-45ab-f0d3-4b6da8cc68e8"
},
"source": [
"tn = df.tn.sum() \n",
"tn"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"53892"
]
},
"metadata": {
"tags": []
},
"execution_count": 82
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "ExuVdQTzj3hI",
"outputId": "baeda8de-46e6-4def-c388-fb6deaf29f69"
},
"source": [
"sns.heatmap(conf_mx, annot=True, cmap=\"YlGnBu\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f475c9f28d0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 83
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZNRx_-SztF1d"
},
"source": [
"- Vrai Positif (TP) : VRAI calculé VRAI\n",
"- Vrai Négatif (TN) : FAUX calculé FAUX\n",
"- Faux Positif (FP) : FAUX calculé VRAI \n",
"- Faux Négatif (FN) : VRAI calculé FAUX "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MowrFZjBun3q"
},
"source": [
"### <font color=\"green\">precision</font>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ow-3nEwSvLuf"
},
"source": [
"$precision = \\frac{TP}{TP + FP}$"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uqRvEznQcpbB"
},
"source": [
"Calcul le pourcentage de vrais chiffres 5 calculés comme étant des 5 "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "d3vFVRCR4EYm",
"outputId": "83820330-8db0-4f2f-8bdc-dfd443319221"
},
"source": [
"from sklearn.metrics import precision_score, recall_score\n",
"precision_score(y_train_5, y_train_pred)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.8370879772350012"
]
},
"metadata": {
"tags": []
},
"execution_count": 87
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SiAFJP2vXegb",
"outputId": "ab7bb5cb-d24e-4f43-d204-7136a062937e"
},
"source": [
"precision = tp / (tp + fp)\n",
"precision"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.8370879772350012"
]
},
"metadata": {
"tags": []
},
"execution_count": 85
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WMGQ8j9yvxRq"
},
"source": [
"### <font color=\"green\">recall</font>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u7HpsXUKv5bY"
},
"source": [
"$recall = \\frac{TP}{TP + FN}$"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RvX_ZGj1dnYv"
},
"source": [
"Calcul le pourcentage de chiffres 5 calculés comme étant des 5 "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2mGEO7eRkJK4",
"outputId": "a62f40f2-5f3a-4d58-aea4-7a6c8a74c4dc"
},
"source": [
"recall_score(y_train_5, y_train_pred)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.6511713705958311"
]
},
"metadata": {
"tags": []
},
"execution_count": 88
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8AVAo2qL5zC9",
"outputId": "5c8f4e06-7948-4903-b275-fdd6ec0336a7"
},
"source": [
"recall = tp / (tp + fn)\n",
"recall"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.6511713705958311"
]
},
"metadata": {
"tags": []
},
"execution_count": 87
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "f8MM16GIeO4X"
},
"source": [
"### <font color=\"green\">f1 score</font>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "huvJ7sYTenZ9"
},
"source": [
"$f1 = 2 * \\frac{precision * recall}{precision + recall} $"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Wt7JbBOAXmoC",
"outputId": "d965ec30-a6ac-46bb-8627-ba33e46fbf87"
},
"source": [
"2 * (precision*recall)/(precision+recall)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.7325171197343846"
]
},
"metadata": {
"tags": []
},
"execution_count": 88
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "pO-G5HIxe4U7"
},
"source": [
"from sklearn.metrics import f1_score"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "d9lyczTUe9NT",
"outputId": "8a80a026-d775-41d8-c82c-814833bcdb8d"
},
"source": [
"f1_score(y_train_5, y_train_pred)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.7325171197343846"
]
},
"metadata": {
"tags": []
},
"execution_count": 90
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D2k_HdRioCa9"
},
"source": [
"## <font color=\"orange\">precision/recall trade-off</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "lmkOJFwee-5E"
},
"source": [
"y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method=\"decision_function\")"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "GI78FZm4ovhr",
"outputId": "c52ef0a3-6888-4eb4-9719-500fb4d859a7"
},
"source": [
"y_scores.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(60000,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 92
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "n_YRXt6lo6yy",
"outputId": "b47b7189-0804-42a4-c89a-f8c3808c6d7c"
},
"source": [
"y_scores[:10]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ 1200.93051237, -26883.79202424, -33072.03475406, -15919.5480689 ,\n",
" -20003.53970191, -16652.87731528, -14276.86944263, -23328.13728948,\n",
" -5172.79611432, -13873.5025381 ])"
]
},
"metadata": {
"tags": []
},
"execution_count": 93
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "coPnSEoxpARO"
},
"source": [
"y_scores_df=pd.DataFrame(y_scores)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"id": "LTb3GzwJpGwJ",
"outputId": "fd861059-dfcc-4930-d483-722d73cf6070"
},
"source": [
"y_scores_df.describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>60000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>-18071.705388</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>14097.003181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-146348.567262</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-24771.698440</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>-16790.668763</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>-10242.078378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>49441.437659</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"count 60000.000000\n",
"mean -18071.705388\n",
"std 14097.003181\n",
"min -146348.567262\n",
"25% -24771.698440\n",
"50% -16790.668763\n",
"75% -10242.078378\n",
"max 49441.437659"
]
},
"metadata": {
"tags": []
},
"execution_count": 95
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5FqnusjUpJ2B",
"outputId": "49e12e7b-1cf4-4e58-8998-6e73ad0a052e"
},
"source": [
"y_scores_0 = sgd_clf.decision_function([X_train[0]])\n",
"y_scores_0"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([2164.22030239])"
]
},
"metadata": {
"tags": []
},
"execution_count": 96
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2Nu3LQhFqIDh"
},
"source": [
"from sklearn.metrics import precision_recall_curve\n",
"precisions, recalls, thresholds = precision_recall_curve(y_train_5, y_scores)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Y0Jj1L9dqdAg",
"outputId": "c9cbae50-aa68-4c97-ecb3-d50357435ec1"
},
"source": [
"precisions.shape, recalls.shape, thresholds.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((59967,), (59967,), (59966,))"
]
},
"metadata": {
"tags": []
},
"execution_count": 98
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "T69h-Cimrb10",
"outputId": "a0fe6ba2-07da-4952-cf70-3a9d1bd74f65"
},
"source": [
"precisions[:10]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0.09040123, 0.09038606, 0.09038757, 0.09038907, 0.09039058,\n",
" 0.09039209, 0.0903936 , 0.0903951 , 0.09039661, 0.09039812])"
]
},
"metadata": {
"tags": []
},
"execution_count": 99
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "0icfjam0qibQ"
},
"source": [
"def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):\n",
" plt.plot(thresholds, precisions[:-1], \"b--\", label=\"Precision\")\n",
" plt.plot(thresholds, recalls[:-1], \"g-\", label=\"Recall\")"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 265
},
"id": "c2ftZdjRq89D",
"outputId": "6fa1d5d2-417d-4065-dafd-712020a42c8d"
},
"source": [
"plot_precision_recall_vs_threshold(precisions, recalls, thresholds)"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3VxuxU4kB1YK"
},
"source": [
"# <font color=\"teal\">Multiclass Classification</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "VUpQZLjwrDd4"
},
"source": [
"from sklearn.svm import SVC"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Brly6LkYKU0N"
},
"source": [
"[SVC](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html?highlight=decision_function#sklearn.svm.SVC.decision_function)\n",
"\n",
"The fit time scales at least quadratically with the number of samples and may be impractical beyond tens of thousands of samples. For large datasets consider using LinearSVC or SGDClassifier instead, possibly after a Nystroem transformer.\n",
"\n",
"The multiclass support is handled according to a one-vs-one scheme."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lr2Lc_SbLfMn"
},
"source": [
"- OvO One versus One\n",
"- OvR One versus Rest (All)"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "jTxjkG-ECCD3",
"outputId": "3c24e602-b31b-4b5b-98fe-a55ab88f6d5b"
},
"source": [
"svm_clf = SVC()\n",
"svm_clf.fit(X_train, y_train)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,\n",
" decision_function_shape='ovr', degree=3, gamma='scale', kernel='rbf',\n",
" max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
" tol=0.001, verbose=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "rIsQt0dFCgC1",
"outputId": "bc758d45-a657-43d1-c552-7e66e4513589"
},
"source": [
"plt.imshow(X_test[0].reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6209fa7210>"
]
},
"metadata": {
"tags": []
},
"execution_count": 12
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OECuHIJ1CCvO",
"outputId": "eacc79d2-111c-4ca8-8453-d713fece2e73"
},
"source": [
"svm_clf.predict([X_test[0]])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([7], dtype=uint8)"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "O06DI1vBHAcd",
"outputId": "c226e6fc-69c1-49f3-9460-458a0372f846"
},
"source": [
"digit_scores = svm_clf.decision_function([X_test[0]])\n",
"digit_scores"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[ 3.80895496, -0.30212376, 6.19343167, 8.29375992, 1.71167996,\n",
" 4.76436748, 0.69153837, 9.31783975, 2.75699419, 7.28292338]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LShdswrlHOgk",
"outputId": "7e0eb898-da3b-4e93-c07f-425c83ef850b"
},
"source": [
"np.argmax(digit_scores)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"7"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "IneYlQZ8HTKA",
"outputId": "e71deb26-cd82-419d-c5bf-10e7545ce2c6"
},
"source": [
"svm_clf.classes_"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hzAHO5l0HXWc",
"outputId": "d5399a15-897e-4fe1-b1b5-c8b073a8be7b"
},
"source": [
"svm_clf.classes_[7]"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"7"
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cmixl_FXWQnO"
},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "woR91POuLuU3"
},
"source": [
"## <font color=\"orange\">Random Forest Classifier</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "oAsNrwwOMi8L"
},
"source": [
"from sklearn import datasets\n",
"from sklearn.datasets import fetch_openml\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.metrics import confusion_matrix\n",
"from sklearn.model_selection import cross_val_predict"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "dhX9GVURHq65"
},
"source": [
"from sklearn.ensemble import RandomForestClassifier"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "2W_3_FWhM5Hy"
},
"source": [
"mnist = fetch_openml('mnist_784')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "tH7DnxhWN365"
},
"source": [
"X = mnist.data \n",
"y = mnist.target"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "9PATr4OUOCCs"
},
"source": [
"y = y.astype(np.uint8)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "jh_g7BrxOKsa"
},
"source": [
"X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0-Sp31fsMFee",
"outputId": "ade7fa62-45fd-467f-a868-6fd05cda2183"
},
"source": [
"clf = RandomForestClassifier(max_depth=2, random_state=0)\n",
"clf.fit(X_train, y_train)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
" criterion='gini', max_depth=2, max_features='auto',\n",
" max_leaf_nodes=None, max_samples=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, n_estimators=100,\n",
" n_jobs=None, oob_score=False, random_state=0, verbose=0,\n",
" warm_start=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 96
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"background_save": true,
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "2ztNUAuZOi0K",
"outputId": "c8b9ae72-cc1b-4e2c-b7a5-fc9ae5b95826"
},
"source": [
"plt.imshow(X_test[0].reshape(28,28))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fa944f86fd0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 0
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "anXBinxxOMBf",
"outputId": "41c71e34-776f-4848-df14-0d2cf5a7787b"
},
"source": [
"clf.predict([X_test[0]])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([7], dtype=uint8)"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "joR_k6hQO3Q1",
"outputId": "0209fc45-a7b3-4f91-eba9-d2de2278bc0d"
},
"source": [
"cross_val_score(clf, X_train, y_train, cv=3, scoring=\"accuracy\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0.621 , 0.6216 , 0.63945])"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "T_8FmHL7ShBv"
},
"source": [
"## <font color=\"orange\">SGD Classifier</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "fe0wlmpLTRR6"
},
"source": [
"from sklearn.linear_model import SGDClassifier"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "JxIztxwuTDdX"
},
"source": [
"sgd_clf = SGDClassifier()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hhUJGHncTWkc",
"outputId": "6c832e0a-e2e3-482c-9157-f2e9ff4e3c1b"
},
"source": [
"sgd_clf.fit(X_train, y_train)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"SGDClassifier(alpha=0.0001, average=False, class_weight=None,\n",
" early_stopping=False, epsilon=0.1, eta0=0.0, fit_intercept=True,\n",
" l1_ratio=0.15, learning_rate='optimal', loss='hinge',\n",
" max_iter=1000, n_iter_no_change=5, n_jobs=None, penalty='l2',\n",
" power_t=0.5, random_state=None, shuffle=True, tol=0.001,\n",
" validation_fraction=0.1, verbose=0, warm_start=False)"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Vewozyh_UIRd",
"outputId": "06b54587-88c0-49a9-9c08-fd5f723d3e7d"
},
"source": [
"sgd_clf.predict([X_test[0]])"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([7], dtype=uint8)"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dNt1OOOxUP_A",
"outputId": "a766e8d2-a250-4eae-c813-694e1f936b93"
},
"source": [
"cross_val_score(sgd_clf, X_train, y_train, cv=3, scoring=\"accuracy\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0.86565, 0.86605, 0.8748 ])"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uQ1N8y7zQBDl"
},
"source": [
"### <font color=\"green\">Scaling</font>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "KWglURY7PNyO"
},
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"scaler = StandardScaler()\n",
"X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1PAs110EQRRA",
"outputId": "93d4a8a0-312d-40a4-defd-d6d4941f44ed"
},
"source": [
"cross_val_score(sgd_clf, X_train_scaled, y_train, cv=3, scoring=\"accuracy\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0.90035, 0.8874 , 0.90125])"
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ECXyFqbvQXbr",
"outputId": "1a45f986-9f17-434d-d06d-0a54e53da860"
},
"source": [
"y_train_pred = cross_val_predict(sgd_clf, X_train_scaled, y_train, cv=3)\n",
"conf_mx = confusion_matrix(y_train, y_train_pred)\n",
"conf_mx"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[5588, 0, 23, 5, 9, 51, 37, 6, 203, 1],\n",
" [ 0, 6403, 39, 23, 4, 45, 4, 7, 200, 17],\n",
" [ 27, 27, 5255, 90, 72, 29, 67, 40, 339, 12],\n",
" [ 25, 17, 120, 5234, 2, 218, 27, 38, 371, 79],\n",
" [ 10, 14, 49, 12, 5220, 13, 36, 26, 286, 176],\n",
" [ 26, 15, 32, 169, 52, 4492, 75, 16, 476, 68],\n",
" [ 29, 15, 48, 2, 43, 98, 5559, 4, 119, 1],\n",
" [ 18, 10, 53, 28, 50, 12, 3, 5711, 153, 227],\n",
" [ 16, 65, 47, 85, 3, 132, 25, 11, 5416, 51],\n",
" [ 22, 18, 30, 65, 121, 36, 1, 182, 304, 5170]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "tuTIjEK8Qs_S"
},
"source": [
"import seaborn as sns"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "zpyjFtO4RVI8",
"outputId": "df7cae06-a687-4b52-aee8-dd82c04b0509"
},
"source": [
"sns.heatmap(conf_mx, annot=True, fmt=\"d\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f0f9b5406d0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 20
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 285
},
"id": "7CoB_R3HRWyn",
"outputId": "83861b41-0820-4cd7-db60-4ca0cd6e3afa"
},
"source": [
"sns.heatmap(conf_mx, annot=True, fmt=\"d\", cmap='coolwarm')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f0f9a9a0fd0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "zM4yKRTNgdsD"
},
"source": [
"row_sums = conf_mx.sum(axis=1, keepdims=True)\n",
"norm_conf_mx = conf_mx / row_sums"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "oDbTVz7WiGSL"
},
"source": [
"np.fill_diagonal(norm_conf_mx, 0)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 285
},
"id": "nAlNf4ORiS_l",
"outputId": "5fe0ce0e-ee08-4e00-f04f-4d1cff0d8d86"
},
"source": [
"sns.heatmap(norm_conf_mx, cmap='coolwarm')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f0f9a3bd310>"
]
},
"metadata": {
"tags": []
},
"execution_count": 36
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "_ZMVgxLWjGR1"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment