Skip to content
Snippets Groups Projects
01-Simple-Perceptron.ipynb 46.8 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n",
    "\n",
    "# <!-- TITLE --> [PER57] - Perceptron Model 1957\n",
    "<!-- DESC --> A simple perceptron, with the IRIS dataset.\n",
    "<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n",
    "\n",
    "## Objectives :\n",
    " - Implement a historical linear classifier with a historical dataset !\n",
    " - The objective is to predict the type of Iris from the size of the leaves.\n",
    " - Identifying its limitations  \n",
    "\n",
    "The [IRIS dataset](https://archive.ics.uci.edu/ml/datasets/Iris) is probably one of the oldest datasets, dating back to 1936 .\n",
    "\n",
    "## What we're going to do :\n",
    " - Retrieve the dataset, via scikit learn\n",
    " - training and classifying\n",
    "\n",
    "## Step 1 - Import and init"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "\n",
       "div.warn {    \n",
       "    background-color: #fcf2f2;\n",
       "    border-color: #dFb5b4;\n",
       "    border-left: 5px solid #dfb5b4;\n",
       "    padding: 0.5em;\n",
       "    font-weight: bold;\n",
       "    font-size: 1.1em;;\n",
       "    }\n",
       "\n",
       "\n",
       "\n",
       "div.nota {    \n",
       "    background-color: #DAFFDE;\n",
       "    border-left: 5px solid #92CC99;\n",
       "    padding: 0.5em;\n",
       "    }\n",
       "\n",
       "div.todo:before { content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My44OTEyIiBoZWlnaHQ9IjE0My4zOTAyIiB2aWV3Qm94PSIwIDAgNTMuODkxMiAxNDMuMzkwMiI+PHRpdGxlPjAwLUJvYi10b2RvPC90aXRsZT48cGF0aCBkPSJNMjMuNDU2OCwxMTQuMzAxNmExLjgwNjMsMS44MDYzLDAsMSwxLDEuODE1NywxLjgyNEExLjgyMDksMS44MjA5LDAsMCwxLDIzLjQ1NjgsMTE0LjMwMTZabS0xMC42NjEyLDEuODIyQTEuODI3MiwxLjgyNzIsMCwxLDAsMTAuOTgsMTE0LjMsMS44MiwxLjgyLDAsMCwwLDEyLjc5NTYsMTE2LjEyMzZabS03LjcwNyw0LjU4NzR2LTVzLjQ4NjMtOS4xMjIzLDguMDIxNS0xMS45Njc1YTE5LjIwODIsMTkuMjA4MiwwLDAsMSw2LjA0ODYtMS4yNDU0LDE5LjE3NzgsMTkuMTc3OCwwLDAsMSw2LjA0ODcsMS4yNDc1YzcuNTM1MSwyLjgzNDcsOC4wMTc0LDExLjk2NzQsOC4wMTc0LDExLjk2NzR2NS4wMjM0bC4wMDQyLDcuNjgydjIuNGMuMDE2Ny4xOTkyLjAzMzYuMzkyMS4wMzM2LjU4NzEsMCwuMjEzOC0uMDE2OC40MTA5LS4wMzM2LjYzMzJ2LjA1ODdoLS4wMDg0YTguMzcxOSw4LjM3MTksMCwwLDEtNy4zNzM4LDcuNjU0N3MtLjk5NTMsMy42MzgtNi42OTMzLDMuNjM4LTYuNjkzNC0zLjYzOC02LjY5MzQtMy42MzhhOC4zNyw4LjM3LDAsMCwxLTcuMzcxNi03LjY1NDdINS4wODQzdi0uMDU4N2MtLjAxODktLjIyLS4wMjk0LS40MTk0LS4wMjk0LS42MzMyLDAtLjE5MjkuMDE2Ny0uMzgzNy4wMjk0LS41ODcxdi0yLjRtMTguMDkzNy00LjA0YTEuMTU2NSwxLjE1NjUsMCwxLDAtMi4zMTI2LDAsMS4xNTY0LDEuMTU2NCwwLDEsMCwyLjMxMjYsMFptNC4wODM0LDBhMS4xNTk1LDEuMTU5NSwwLDEsMC0xLjE2MzYsMS4xN0ExLjE3NSwxLjE3NSwwLDAsMCwyNy4yNjE0LDEyNC4zNzc5Wk05LjM3MzksMTE0LjYzNWMwLDMuMTA5MywyLjQxMzIsMy4zMSwyLjQxMzIsMy4zMWExMzMuOTI0MywxMzMuOTI0MywwLDAsMCwxNC43MzQ4LDBzMi40MTExLS4xOTI5LDIuNDExMS0zLjMxYTguMDc3Myw4LjA3NzMsMCwwLDAtMi40MTExLTUuNTUxOWMtNC41LTMuNTAzMy05LjkxMjYtMy41MDMzLTE0Ljc0MTEsMEE4LjA4NTEsOC4wODUxLDAsMCwwLDkuMzczOSwxMTQuNjM1WiIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjMzLjE0MzYiIGN5PSIxMjQuNTM0IiByPSIzLjgzNjMiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48cmVjdCB4PSIzNS42NjU5IiB5PSIxMTIuOTYyNSIgd2lkdGg9IjIuMDc3IiBoZWlnaHQ9IjEwLjU0NTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjYgMjQxLjExMjEpIHJvdGF0ZSgtMTU1Ljc0NikiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48Y2lyY2xlIGN4PSIzOC44NzA0IiBjeT0iMTEzLjQyNzkiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjUuMjI0OCIgY3k9IjEyNC41MzQiIHI9IjMuODM2MyIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxyZWN0IHg9IjEuNDE2NCIgeT0iMTI0LjYzMDEiIHdpZHRoPSIyLjA3NyIgaGVpZ2h0PSIxMC41NDU4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjkwOTcgMjU5LjgwNikgcm90YXRlKC0xODApIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PGNpcmNsZSBjeD0iMi40MDkxIiBjeT0iMTM3LjA5OTYiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxwYXRoIGQ9Ik0xOC4wNTExLDEwMC4xMDY2aC0uMDE0NlYxMDIuNjFoMi4zdi0yLjQyNzlhMi40MjI5LDIuNDIyOSwwLDEsMC0yLjI4NTQtLjA3NTVaIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PHBhdGggZD0iTTM5LjQyMTQsMjcuMjU4djEuMDVBMTEuOTQ1MiwxMS45NDUyLDAsMCwwLDQ0LjU5NTQsNS43OWEuMjQ0OS4yNDQ5LDAsMCwxLS4wMjM1LS40MjI3TDQ2Ljc1LDMuOTUxNWEuMzg5Mi4zODkyLDAsMCwxLC40MjYyLDAsMTQuODQ0MiwxNC44NDQyLDAsMCwxLTcuNzU0MywyNy4yNTkxdjEuMDY3YS40NS40NSwwLDAsMS0uNzA0Ny4zNzU4bC0zLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsMC0uNzUxNmwzLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsLjY5NDYuMzc1OFpNNDMuMjMsMi41ODkyLDM5LjM4NzguMDc5NGEuNDUuNDUsMCwwLDAtLjcwNDYuMzc1OHYxLjA2N2ExNC44NDQyLDE0Ljg0NDIsMCwwLDAtNy43NTQzLDI3LjI1OTEuMzg5LjM4OSwwLDAsMCwuNDI2MSwwbDIuMTc3Ny0xLjQxOTNhLjI0NS4yNDUsMCwwLDAtLjAyMzUtLjQyMjgsMTEuOTQ1MSwxMS45NDUxLDAsMCwxLDUuMTc0LTIyLjUxNDZ2MS4wNWEuNDUuNDUsMCwwLDAsLjcwNDYuMzc1OGwzLjg1NTMtMi41MWEuNDUuNDUsMCwwLDAsMC0uNzUxNlpNMzkuMDUyMywxNC4yNDU4YTIuMTIwNiwyLjEyMDYsMCwxLDAsMi4xMjA2LDIuMTIwNmgwQTIuMTI0LDIuMTI0LDAsMCwwLDM5LjA1MjMsMTQuMjQ1OFptNi4wNzMyLTQuNzc4MS44MjU0LjgyNTVhMS4wNTY4LDEuMDU2OCwwLDAsMSwuMTE3NSwxLjM0MjFsLS44MDIsMS4xNDQyYTcuMTAxOCw3LjEwMTgsMCwwLDEsLjcxMTQsMS43MTEybDEuMzc1Ny4yNDE2YTEuMDU2OSwxLjA1NjksMCwwLDEsLjg3NTcsMS4wNHYxLjE2NDNhMS4wNTY5LDEuMDU2OSwwLDAsMS0uODc1NywxLjA0bC0xLjM3MjQuMjQxNkE3LjExLDcuMTEsMCwwLDEsNDUuMjcsMTkuOTNsLjgwMTksMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLS4xMTc0LDEuMzQyMmwtLjgyODguODQ4OWExLjA1NywxLjA1NywwLDAsMS0xLjM0MjEuMTE3NGwtMS4xNDQyLS44MDE5YTcuMTMzOCw3LjEzMzgsMCwwLDEtMS43MTEzLjcxMTNsLS4yNDE2LDEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLTEuMDQuODc1N0gzOC40Njg0YTEuMDU2OCwxLjA1NjgsMCwwLDEtMS4wNC0uODc1N2wtLjI0MTYtMS4zNzI0YTcuMTM1NSw3LjEzNTUsMCwwLDEtMS43MTEzLS43MTEzbC0xLjE0NDEuODAxOWExLjA1NzEsMS4wNTcxLDAsMCwxLTEuMzQyMi0uMTE3NGwtLjgzNTUtLjgyNTVhMS4wNTcsMS4wNTcsMCwwLDEtLjExNzQtMS4zNDIxbC44MDE5LTEuMTQ0MmE3LjEyMSw3LjEyMSwwLDAsMS0uNzExMy0xLjcxMTJsLTEuMzcyNC0uMjQxNmExLjA1NjksMS4wNTY5LDAsMCwxLS44NzU3LTEuMDRWMTUuNzgyNmExLjA1NjksMS4wNTY5LDAsMCwxLC44NzU3LTEuMDRsMS4zNzU3LS4yNDE2YTcuMTEsNy4xMSwwLDAsMSwuNzExNC0xLjcxMTJsLS44MDItMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLC4xMTc1LTEuMzQyMmwuODI1NC0uODI1NEExLjA1NjgsMS4wNTY4LDAsMCwxLDM0LjMyNDUsOS4zNmwxLjE0NDIuODAxOUE3LjEzNTUsNy4xMzU1LDAsMCwxLDM3LjE4LDkuNDUxbC4yNDE2LTEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLDEuMDQtLjg3NTdoMS4xNjc3YTEuMDU2OSwxLjA1NjksMCwwLDEsMS4wNC44NzU3bC4yNDE2LDEuMzcyNGE3LjEyNSw3LjEyNSwwLDAsMSwxLjcxMTIuNzExM0w0My43NjY2LDkuMzZBMS4wNTY5LDEuMDU2OSwwLDAsMSw0NS4xMjU1LDkuNDY3N1ptLTIuMDMsNi44OTg3QTQuMDQzMyw0LjA0MzMsMCwxLDAsMzkuMDUyMywyMC40MWgwQTQuMDQ2NSw0LjA0NjUsMCwwLDAsNDMuMDk1NSwxNi4zNjY0WiIgc3R5bGU9ImZpbGw6I2UxMjIyOSIvPjxwb2x5Z29uIHBvaW50cz0iMzkuNDEzIDM0Ljc1NyAzOS41MzcgMzQuNzU3IDM5LjY3NSAzNC43NTcgMzkuNjc1IDEwOS41MSAzOS41MzcgMTA5LjUxIDM5LjQxMyAxMDkuNTEgMzkuNDEzIDM0Ljc1NyAzOS40MTMgMzQuNzU3IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjMwODg1NDQ1MDU2MDE2MThweDtmaWxsLXJ1bGU6ZXZlbm9kZCIvPjwvc3ZnPg==);\n",
       "    float:left;\n",
       "    margin-right:20px;\n",
       "    margin-top:-20px;\n",
       "    margin-bottom:20px;\n",
       "}\n",
       "div.todo{\n",
       "    font-weight: bold;\n",
       "    font-size: 1.1em;\n",
       "    margin-top:40px;\n",
       "}\n",
       "div.todo ul{\n",
       "    margin: 0.2em;\n",
       "}\n",
       "div.todo li{\n",
       "    margin-left:60px;\n",
       "    margin-top:0;\n",
       "    margin-bottom:0;\n",
       "}\n",
       "\n",
       "\n",
       "</style>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "FIDLE 2020 - Practical Work Module\n",
      "Version              : 0.6.1 DEV\n",
      "Notebook id          : PER57\n",
      "Run time             : Tuesday 15 December 2020, 21:49:41\n",
      "TensorFlow version   : 2.0.0\n",
      "Keras version        : 2.2.4-tf\n",
      "Datasets dir         : /home/pjluc/datasets/fidle\n",
      "Update keras cache   : False\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn.datasets     import load_iris\n",
    "from sklearn.linear_model import Perceptron\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib\n",
    "\n",
    "import os,sys\n",
    "\n",
    "sys.path.append('..')\n",
    "import fidle.pwk as pwk\n",
    "datasets_dir = pwk.init('PER57')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 2 - IRIS Data Recovery\n",
    "\n",
    "Retrieve a dataset : http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets  \n",
    "About the datesets : http://scikit-learn.org/stable/datasets/index.html  \n",
    "\n",
    "Data fields (X) :\n",
    "- 0 : sepal length in cm\n",
    "- 1 : sepal width in cm\n",
    "- 2 : petal length in cm\n",
    "- 3 : petal width in cm  \n",
    "\n",
    "Class (y) :\n",
    "- 0 : class 0=Iris-Setosa, 1=Iris-Versicolour, 2=Iris-Virginica\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Examples :\n",
      "Length   Width   Iris Setosa (0/1)\n",
      "  x1       x2          y\n",
      " 1.4      1.4          1\n",
      " 1.6      1.6          1\n",
      " 1.4      1.4          1\n",
      " 1.5      1.5          1\n",
      " 1.4      1.4          1\n",
      " 4.7      4.7          0\n",
      " 4.5      4.5          0\n",
      " 4.9      4.9          0\n",
      " 4.0      4.0          0\n",
      " 4.6      4.6          0\n",
      "\n",
      "X shape : (150, 2)\n",
      "y shape : (150,)\n"
     ]
    }
   ],
   "source": [
    "X0,y0 = load_iris(return_X_y=True)\n",
    "\n",
    "X = X0[:, (2,3)]     # We only keep fields 2 and 3\n",
    "y = y0.copy()\n",
    "\n",
    "y[ y0==0 ] = 1       # 1 = Iris setosa\n",
    "y[ y0>=1 ] = 0       # 0 = not iris setosa\n",
    "\n",
    "print('Examples :')\n",
    "print('Length   Width   Iris Setosa (0/1)')\n",
    "print('  x1       x2          y')\n",
    "for i in range(45,55):\n",
    "    print(f\" {X[i][0]:3.1f}      {X[i][0]:3.1f}          {y[i]}\")\n",
    "print(f'\\nX shape : {X.shape}')\n",
    "print(f'y shape : {y.shape}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 3 - Get a perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Perceptron(max_iter=100, random_state=82, tol=0.01)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pct = Perceptron(max_iter=100, random_state=82, tol=0.01)\n",
    "pct.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 4 - Prédictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Petal : length=2.0, width=2.0  => is setosa : 1\n",
      "Petal : length=5.0, width=5.0  => is setosa : 0\n"
     ]
    }
   ],
   "source": [
    "X_pred = np.array( [ [2.0, 0.5], [5.0, 1.5] ] )\n",
    "\n",
    "y_pred = pct.predict(X_pred) \n",
    "\n",
    "for i,x in enumerate(X_pred):\n",
    "    print(f'Petal : length={x[0]}, width={x[0]}  => is setosa : {y_pred[i]}')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 5 - Visualisation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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jBkzhuzsbPbdd1+/QxKRFJFKlZvatWsXtm76IYccQs+ePWnXrh0DBgxg7Nix/PjjjwB8++231K1bd/vr5ptvBuDoo49m2bJlzJgxg9NPP52vvvqKXr16cdFFFwHw+eefs3nzZk444YQdPj927Fi++eabGmP57bffKCkp4aijjtphe5cuXfj8888BGDhwIJs3b6Zly5b8+c9/5qWXXmLLli3bj/3mm28466yz2G+//ahXrx5NmjShvLycb7/9tnY3MAIlgpIQ4f5KTKW/NDOdMYbrrruOL774ghNOOGH7dq0mIJLZUqly0y67hJ+Mkp2dzbRp05g2bRoHH3wwjz32GK1bt+aTTz6hqKiIRYsWbX9dfPHF2z+Xm5tL165dueaaa5g2bRqjR4/m4YcfZsWKFZSXu6NWr7322g6f/+yzz5g2bVrEmKsr6Vexbe+99+bLL7/koYceol69elxxxRUcdthh20vE9e3blx9//JGHHnqI+fPn8/HHH5OTk5OwoWElgpIQ4f5KTKW/NMW13377bf/39OnT6dy5MyUl4Z8VFZH0FbTKTcYYOnfuzA033MDChQspKipi/Pjx5OTk0KpVq+2vcLONDzroIADWr1/PQQcdRH5+PitXrtzh861atdo+/FyxSH9Z2R8zq+vVq0dRURHvvffeDm2/995729sHd7i7T58+3H333SxcuJDPPvuMOXPm8PPPP7NkyRL++c9/0rNnT9q0acPvv/9OaWniOkb0f9oM0nyPukkZHo70V2L39kVM+fi7sMPDmVgjOBU4jsM111zDBx98QKdOnZg8eTIHH3yw32GJSJJVVG6KtI5gKiz1NW/ePN5++22OP/54mjRpwscff8x33323Q+JV1bHHHsugQYPo2LEju+++O59//jn//Oc/OeCAA2jTpg3Z2dlceeWVXHnllTiOw9FHH8369euZN28eWVlZDB06lMaNG1NYWMibb75JixYtKCgooH79+lx11VVcf/31tG7dmsMOO4xx48Yxe/ZsPvzwQwCefPJJSktL6dSpE3Xr1mX8+PHk5ubSunVrdtttNxo1asQjjzzC3nvvzerVq7nqqqvIyUlcuqYewQwSbZ3geEX6KzFof2lmEmMMU6ZM4aijjmLVqlV06dKFN9980++wRMQHh7dqzINDu9L70H2ok5+DAerk59D70H14cGjXhCwmXRv169dnzpw5nHTSSbRu3ZorrriCkSNHcvbZZ9f4meOPP55nnnmG448/ngMPPBDLsujatStvvfUW2dnZAIwePZpRo0Zxxx130LZtW4477jgmTpy4fdmYnJwc7r33Xh599FGKioro168fAJdeeilXXXUV//jHP2jXrh0vv/wyEydOpEOHDoA7We+xxx6ja9eutGvXjokTJzJp0iRatmxJVlYW48eP59NPP6Vdu3YMHz6c0aNHh31GMl6qLBKjoFcWeXbWV2GXkDn3mNas/nlD2CVkDmnekC9Kfo1rtXm/VqyX6GzevJnzzz+fF154gezsbB544IHtD1GLSDB4UWJOgkOVRSQqg4/en7Z7N4xYWeSw/faIWFkknvq+FX9pqkZwaiooKODZZ59l33335eabb+biiy9mzZo1XH/99X6HJiIiHlKPYIyC3iMoEqvHH3+cv/71r0yePHn7yvkikvrUI5hZatsjqGcERSSsCy64gBUrVuyQBCZqGQMREUkuDQ2nkJJ1G5g4bxkzFpewaWsphXk5dG9fxIDifWMaKl20/KewQ78T5n7DE+98SWnZH73BOdmG87sdwGmd3WVErn9hAfO//nGntju13oObzjyCWyZ9xMzPvt9p/7Ft9+La/ocC8Pj0Jbz4/jIq9zkb4PQj9+WCHm08u16v2pGaVaygDzB58mQuv/xyXn31VQ488EAfoxIRkXhpaDhGiRoa9mryRKTJIE3qF7Dm18017j+keUOW/vArG7aU1XhMJA3q5LJb3XyWr615qZom9Qv4ZeO2uK9Xk06Sy3EcevTowTvvvEODBg14+eWXNVwskqI0NJxZNDQcYCXrNjB6wkds2Va209p6ZeUOW7aVMXrCR5Ss2xC2nUXLfwqbBAJhk0CAT1auiysJBPhl47awSWBFHPFer1f3TaJnjOG1116jX79+/PLLL/Tq1Yunn37a77BERKSWlAimgInzllFaVh72mNKycibNXx72GPvNz7wMy1fRXK9X901is8suuzBx4kQuv/xytm3bxnnnnceoUaNUlk5EJICUCKaAGYtLwlbZALeHa/ri1WGPSUbVkGSJ5nq9um8Su+zsbO666y7uv/9+srKyuPHGG7nsssv8DktERGKkRDAFbNoaXQ3BTVsSV2swFUW6Xt03/w0fPpxXX32VRo0aMWjQIL/DERGRGGnWcAoozMthYxRJTWF+Zn27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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = -pct.coef_[0][0] / pct.coef_[0][1]\n",
    "b = -pct.intercept_ / pct.coef_[0][1]\n",
    "box=[X.min(axis=0)[0],X.max(axis=0)[0],X.min(axis=0)[1],X.max(axis=0)[1]]\n",
    "mx=(box[1]-box[0])/20\n",
    "my=(box[3]-box[2])/20\n",
    "box=[box[0]-mx,box[1]+mx,box[2]-my,box[3]+my]\n",
    "\n",
    "fig, axs = plt.subplots(1, 1)\n",
    "fig.set_size_inches(10,6)\n",
    "axs.plot(X[y==1, 0], X[y==1, 1], \"o\", label=\"Iris-Setosa\")\n",
    "axs.plot(X[y==0, 0], X[y==0, 1], \"o\", label=\"Autres\")\n",
    "axs.plot([box[0], box[1]], [a*box[0]+b, a*box[1]+b], \"k--\", linewidth=2)\n",
    "axs.set_xlabel(\"Petal length (cm)\", labelpad=15) #, fontsize=14)\n",
    "axs.set_ylabel(\"Petal width (cm)\",  labelpad=15) #, fontsize=14)\n",
    "axs.legend(loc=\"lower right\", fontsize=14)\n",
    "axs.set_xlim(box[0],box[1])\n",
    "axs.set_ylim(box[2],box[3])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "End time is : Tuesday 15 December 2020, 21:49:41\n",
      "Duration is : 00:00:00 203ms\n",
      "This notebook ends here\n"
     ]
    }
   ],
   "source": [
    "pwk.end()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "<img width=\"80px\" src=\"../fidle/img/00-Fidle-logo-01.svg\"></img>"
   ]
  }
 ],
 "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",
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}