machinelearning

Machine learning code
git clone git://git.laack.co/machinelearning.git
Log | Files | Refs

logisticRegression.ipynb (51017B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "code",
      5    "execution_count": 1,
      6    "metadata": {},
      7    "outputs": [],
      8    "source": [
      9     "from sklearn.datasets import load_iris\n",
     10     "iris = load_iris(as_frame=True)"
     11    ]
     12   },
     13   {
     14    "cell_type": "code",
     15    "execution_count": 2,
     16    "metadata": {},
     17    "outputs": [
     18     {
     19      "data": {
     20       "text/plain": [
     21        "['data',\n",
     22        " 'target',\n",
     23        " 'frame',\n",
     24        " 'target_names',\n",
     25        " 'DESCR',\n",
     26        " 'feature_names',\n",
     27        " 'filename',\n",
     28        " 'data_module']"
     29       ]
     30      },
     31      "execution_count": 2,
     32      "metadata": {},
     33      "output_type": "execute_result"
     34     }
     35    ],
     36    "source": [
     37     "list(iris)"
     38    ]
     39   },
     40   {
     41    "cell_type": "code",
     42    "execution_count": 3,
     43    "metadata": {},
     44    "outputs": [
     45     {
     46      "data": {
     47       "text/html": [
     48        "<div>\n",
     49        "<style scoped>\n",
     50        "    .dataframe tbody tr th:only-of-type {\n",
     51        "        vertical-align: middle;\n",
     52        "    }\n",
     53        "\n",
     54        "    .dataframe tbody tr th {\n",
     55        "        vertical-align: top;\n",
     56        "    }\n",
     57        "\n",
     58        "    .dataframe thead th {\n",
     59        "        text-align: right;\n",
     60        "    }\n",
     61        "</style>\n",
     62        "<table border=\"1\" class=\"dataframe\">\n",
     63        "  <thead>\n",
     64        "    <tr style=\"text-align: right;\">\n",
     65        "      <th></th>\n",
     66        "      <th>sepal length (cm)</th>\n",
     67        "      <th>sepal width (cm)</th>\n",
     68        "      <th>petal length (cm)</th>\n",
     69        "      <th>petal width (cm)</th>\n",
     70        "    </tr>\n",
     71        "  </thead>\n",
     72        "  <tbody>\n",
     73        "    <tr>\n",
     74        "      <th>0</th>\n",
     75        "      <td>5.1</td>\n",
     76        "      <td>3.5</td>\n",
     77        "      <td>1.4</td>\n",
     78        "      <td>0.2</td>\n",
     79        "    </tr>\n",
     80        "    <tr>\n",
     81        "      <th>1</th>\n",
     82        "      <td>4.9</td>\n",
     83        "      <td>3.0</td>\n",
     84        "      <td>1.4</td>\n",
     85        "      <td>0.2</td>\n",
     86        "    </tr>\n",
     87        "    <tr>\n",
     88        "      <th>2</th>\n",
     89        "      <td>4.7</td>\n",
     90        "      <td>3.2</td>\n",
     91        "      <td>1.3</td>\n",
     92        "      <td>0.2</td>\n",
     93        "    </tr>\n",
     94        "  </tbody>\n",
     95        "</table>\n",
     96        "</div>"
     97       ],
     98       "text/plain": [
     99        "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)\n",
    100        "0                5.1               3.5                1.4               0.2\n",
    101        "1                4.9               3.0                1.4               0.2\n",
    102        "2                4.7               3.2                1.3               0.2"
    103       ]
    104      },
    105      "execution_count": 3,
    106      "metadata": {},
    107      "output_type": "execute_result"
    108     }
    109    ],
    110    "source": [
    111     "iris.data.head(3)"
    112    ]
    113   },
    114   {
    115    "cell_type": "code",
    116    "execution_count": 4,
    117    "metadata": {},
    118    "outputs": [
    119     {
    120      "data": {
    121       "text/plain": [
    122        "0    0\n",
    123        "1    0\n",
    124        "2    0\n",
    125        "Name: target, dtype: int64"
    126       ]
    127      },
    128      "execution_count": 4,
    129      "metadata": {},
    130      "output_type": "execute_result"
    131     }
    132    ],
    133    "source": [
    134     "iris.target.head(3)"
    135    ]
    136   },
    137   {
    138    "cell_type": "code",
    139    "execution_count": 5,
    140    "metadata": {},
    141    "outputs": [
    142     {
    143      "data": {
    144       "text/plain": [
    145        "array(['setosa', 'versicolor', 'virginica'], dtype='<U10')"
    146       ]
    147      },
    148      "execution_count": 5,
    149      "metadata": {},
    150      "output_type": "execute_result"
    151     }
    152    ],
    153    "source": [
    154     "iris.target_names"
    155    ]
    156   },
    157   {
    158    "cell_type": "code",
    159    "execution_count": 6,
    160    "metadata": {},
    161    "outputs": [
    162     {
    163      "data": {
    164       "text/html": [
    165        "<style>#sk-container-id-1 {\n",
    166        "  /* Definition of color scheme common for light and dark mode */\n",
    167        "  --sklearn-color-text: black;\n",
    168        "  --sklearn-color-line: gray;\n",
    169        "  /* Definition of color scheme for unfitted estimators */\n",
    170        "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
    171        "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
    172        "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
    173        "  --sklearn-color-unfitted-level-3: chocolate;\n",
    174        "  /* Definition of color scheme for fitted estimators */\n",
    175        "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
    176        "  --sklearn-color-fitted-level-1: #d4ebff;\n",
    177        "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
    178        "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
    179        "\n",
    180        "  /* Specific color for light theme */\n",
    181        "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
    182        "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
    183        "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
    184        "  --sklearn-color-icon: #696969;\n",
    185        "\n",
    186        "  @media (prefers-color-scheme: dark) {\n",
    187        "    /* Redefinition of color scheme for dark theme */\n",
    188        "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
    189        "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
    190        "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
    191        "    --sklearn-color-icon: #878787;\n",
    192        "  }\n",
    193        "}\n",
    194        "\n",
    195        "#sk-container-id-1 {\n",
    196        "  color: var(--sklearn-color-text);\n",
    197        "}\n",
    198        "\n",
    199        "#sk-container-id-1 pre {\n",
    200        "  padding: 0;\n",
    201        "}\n",
    202        "\n",
    203        "#sk-container-id-1 input.sk-hidden--visually {\n",
    204        "  border: 0;\n",
    205        "  clip: rect(1px 1px 1px 1px);\n",
    206        "  clip: rect(1px, 1px, 1px, 1px);\n",
    207        "  height: 1px;\n",
    208        "  margin: -1px;\n",
    209        "  overflow: hidden;\n",
    210        "  padding: 0;\n",
    211        "  position: absolute;\n",
    212        "  width: 1px;\n",
    213        "}\n",
    214        "\n",
    215        "#sk-container-id-1 div.sk-dashed-wrapped {\n",
    216        "  border: 1px dashed var(--sklearn-color-line);\n",
    217        "  margin: 0 0.4em 0.5em 0.4em;\n",
    218        "  box-sizing: border-box;\n",
    219        "  padding-bottom: 0.4em;\n",
    220        "  background-color: var(--sklearn-color-background);\n",
    221        "}\n",
    222        "\n",
    223        "#sk-container-id-1 div.sk-container {\n",
    224        "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
    225        "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
    226        "     so we also need the `!important` here to be able to override the\n",
    227        "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
    228        "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
    229        "  display: inline-block !important;\n",
    230        "  position: relative;\n",
    231        "}\n",
    232        "\n",
    233        "#sk-container-id-1 div.sk-text-repr-fallback {\n",
    234        "  display: none;\n",
    235        "}\n",
    236        "\n",
    237        "div.sk-parallel-item,\n",
    238        "div.sk-serial,\n",
    239        "div.sk-item {\n",
    240        "  /* draw centered vertical line to link estimators */\n",
    241        "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
    242        "  background-size: 2px 100%;\n",
    243        "  background-repeat: no-repeat;\n",
    244        "  background-position: center center;\n",
    245        "}\n",
    246        "\n",
    247        "/* Parallel-specific style estimator block */\n",
    248        "\n",
    249        "#sk-container-id-1 div.sk-parallel-item::after {\n",
    250        "  content: \"\";\n",
    251        "  width: 100%;\n",
    252        "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
    253        "  flex-grow: 1;\n",
    254        "}\n",
    255        "\n",
    256        "#sk-container-id-1 div.sk-parallel {\n",
    257        "  display: flex;\n",
    258        "  align-items: stretch;\n",
    259        "  justify-content: center;\n",
    260        "  background-color: var(--sklearn-color-background);\n",
    261        "  position: relative;\n",
    262        "}\n",
    263        "\n",
    264        "#sk-container-id-1 div.sk-parallel-item {\n",
    265        "  display: flex;\n",
    266        "  flex-direction: column;\n",
    267        "}\n",
    268        "\n",
    269        "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
    270        "  align-self: flex-end;\n",
    271        "  width: 50%;\n",
    272        "}\n",
    273        "\n",
    274        "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
    275        "  align-self: flex-start;\n",
    276        "  width: 50%;\n",
    277        "}\n",
    278        "\n",
    279        "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
    280        "  width: 0;\n",
    281        "}\n",
    282        "\n",
    283        "/* Serial-specific style estimator block */\n",
    284        "\n",
    285        "#sk-container-id-1 div.sk-serial {\n",
    286        "  display: flex;\n",
    287        "  flex-direction: column;\n",
    288        "  align-items: center;\n",
    289        "  background-color: var(--sklearn-color-background);\n",
    290        "  padding-right: 1em;\n",
    291        "  padding-left: 1em;\n",
    292        "}\n",
    293        "\n",
    294        "\n",
    295        "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
    296        "clickable and can be expanded/collapsed.\n",
    297        "- Pipeline and ColumnTransformer use this feature and define the default style\n",
    298        "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
    299        "*/\n",
    300        "\n",
    301        "/* Pipeline and ColumnTransformer style (default) */\n",
    302        "\n",
    303        "#sk-container-id-1 div.sk-toggleable {\n",
    304        "  /* Default theme specific background. It is overwritten whether we have a\n",
    305        "  specific estimator or a Pipeline/ColumnTransformer */\n",
    306        "  background-color: var(--sklearn-color-background);\n",
    307        "}\n",
    308        "\n",
    309        "/* Toggleable label */\n",
    310        "#sk-container-id-1 label.sk-toggleable__label {\n",
    311        "  cursor: pointer;\n",
    312        "  display: block;\n",
    313        "  width: 100%;\n",
    314        "  margin-bottom: 0;\n",
    315        "  padding: 0.5em;\n",
    316        "  box-sizing: border-box;\n",
    317        "  text-align: center;\n",
    318        "}\n",
    319        "\n",
    320        "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
    321        "  /* Arrow on the left of the label */\n",
    322        "  content: \"▸\";\n",
    323        "  float: left;\n",
    324        "  margin-right: 0.25em;\n",
    325        "  color: var(--sklearn-color-icon);\n",
    326        "}\n",
    327        "\n",
    328        "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
    329        "  color: var(--sklearn-color-text);\n",
    330        "}\n",
    331        "\n",
    332        "/* Toggleable content - dropdown */\n",
    333        "\n",
    334        "#sk-container-id-1 div.sk-toggleable__content {\n",
    335        "  max-height: 0;\n",
    336        "  max-width: 0;\n",
    337        "  overflow: hidden;\n",
    338        "  text-align: left;\n",
    339        "  /* unfitted */\n",
    340        "  background-color: var(--sklearn-color-unfitted-level-0);\n",
    341        "}\n",
    342        "\n",
    343        "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
    344        "  /* fitted */\n",
    345        "  background-color: var(--sklearn-color-fitted-level-0);\n",
    346        "}\n",
    347        "\n",
    348        "#sk-container-id-1 div.sk-toggleable__content pre {\n",
    349        "  margin: 0.2em;\n",
    350        "  border-radius: 0.25em;\n",
    351        "  color: var(--sklearn-color-text);\n",
    352        "  /* unfitted */\n",
    353        "  background-color: var(--sklearn-color-unfitted-level-0);\n",
    354        "}\n",
    355        "\n",
    356        "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
    357        "  /* unfitted */\n",
    358        "  background-color: var(--sklearn-color-fitted-level-0);\n",
    359        "}\n",
    360        "\n",
    361        "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
    362        "  /* Expand drop-down */\n",
    363        "  max-height: 200px;\n",
    364        "  max-width: 100%;\n",
    365        "  overflow: auto;\n",
    366        "}\n",
    367        "\n",
    368        "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
    369        "  content: \"▾\";\n",
    370        "}\n",
    371        "\n",
    372        "/* Pipeline/ColumnTransformer-specific style */\n",
    373        "\n",
    374        "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    375        "  color: var(--sklearn-color-text);\n",
    376        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    377        "}\n",
    378        "\n",
    379        "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    380        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    381        "}\n",
    382        "\n",
    383        "/* Estimator-specific style */\n",
    384        "\n",
    385        "/* Colorize estimator box */\n",
    386        "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    387        "  /* unfitted */\n",
    388        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    389        "}\n",
    390        "\n",
    391        "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    392        "  /* fitted */\n",
    393        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    394        "}\n",
    395        "\n",
    396        "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
    397        "#sk-container-id-1 div.sk-label label {\n",
    398        "  /* The background is the default theme color */\n",
    399        "  color: var(--sklearn-color-text-on-default-background);\n",
    400        "}\n",
    401        "\n",
    402        "/* On hover, darken the color of the background */\n",
    403        "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
    404        "  color: var(--sklearn-color-text);\n",
    405        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    406        "}\n",
    407        "\n",
    408        "/* Label box, darken color on hover, fitted */\n",
    409        "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
    410        "  color: var(--sklearn-color-text);\n",
    411        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    412        "}\n",
    413        "\n",
    414        "/* Estimator label */\n",
    415        "\n",
    416        "#sk-container-id-1 div.sk-label label {\n",
    417        "  font-family: monospace;\n",
    418        "  font-weight: bold;\n",
    419        "  display: inline-block;\n",
    420        "  line-height: 1.2em;\n",
    421        "}\n",
    422        "\n",
    423        "#sk-container-id-1 div.sk-label-container {\n",
    424        "  text-align: center;\n",
    425        "}\n",
    426        "\n",
    427        "/* Estimator-specific */\n",
    428        "#sk-container-id-1 div.sk-estimator {\n",
    429        "  font-family: monospace;\n",
    430        "  border: 1px dotted var(--sklearn-color-border-box);\n",
    431        "  border-radius: 0.25em;\n",
    432        "  box-sizing: border-box;\n",
    433        "  margin-bottom: 0.5em;\n",
    434        "  /* unfitted */\n",
    435        "  background-color: var(--sklearn-color-unfitted-level-0);\n",
    436        "}\n",
    437        "\n",
    438        "#sk-container-id-1 div.sk-estimator.fitted {\n",
    439        "  /* fitted */\n",
    440        "  background-color: var(--sklearn-color-fitted-level-0);\n",
    441        "}\n",
    442        "\n",
    443        "/* on hover */\n",
    444        "#sk-container-id-1 div.sk-estimator:hover {\n",
    445        "  /* unfitted */\n",
    446        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    447        "}\n",
    448        "\n",
    449        "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
    450        "  /* fitted */\n",
    451        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    452        "}\n",
    453        "\n",
    454        "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
    455        "\n",
    456        "/* Common style for \"i\" and \"?\" */\n",
    457        "\n",
    458        ".sk-estimator-doc-link,\n",
    459        "a:link.sk-estimator-doc-link,\n",
    460        "a:visited.sk-estimator-doc-link {\n",
    461        "  float: right;\n",
    462        "  font-size: smaller;\n",
    463        "  line-height: 1em;\n",
    464        "  font-family: monospace;\n",
    465        "  background-color: var(--sklearn-color-background);\n",
    466        "  border-radius: 1em;\n",
    467        "  height: 1em;\n",
    468        "  width: 1em;\n",
    469        "  text-decoration: none !important;\n",
    470        "  margin-left: 1ex;\n",
    471        "  /* unfitted */\n",
    472        "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
    473        "  color: var(--sklearn-color-unfitted-level-1);\n",
    474        "}\n",
    475        "\n",
    476        ".sk-estimator-doc-link.fitted,\n",
    477        "a:link.sk-estimator-doc-link.fitted,\n",
    478        "a:visited.sk-estimator-doc-link.fitted {\n",
    479        "  /* fitted */\n",
    480        "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
    481        "  color: var(--sklearn-color-fitted-level-1);\n",
    482        "}\n",
    483        "\n",
    484        "/* On hover */\n",
    485        "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
    486        ".sk-estimator-doc-link:hover,\n",
    487        "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
    488        ".sk-estimator-doc-link:hover {\n",
    489        "  /* unfitted */\n",
    490        "  background-color: var(--sklearn-color-unfitted-level-3);\n",
    491        "  color: var(--sklearn-color-background);\n",
    492        "  text-decoration: none;\n",
    493        "}\n",
    494        "\n",
    495        "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
    496        ".sk-estimator-doc-link.fitted:hover,\n",
    497        "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
    498        ".sk-estimator-doc-link.fitted:hover {\n",
    499        "  /* fitted */\n",
    500        "  background-color: var(--sklearn-color-fitted-level-3);\n",
    501        "  color: var(--sklearn-color-background);\n",
    502        "  text-decoration: none;\n",
    503        "}\n",
    504        "\n",
    505        "/* Span, style for the box shown on hovering the info icon */\n",
    506        ".sk-estimator-doc-link span {\n",
    507        "  display: none;\n",
    508        "  z-index: 9999;\n",
    509        "  position: relative;\n",
    510        "  font-weight: normal;\n",
    511        "  right: .2ex;\n",
    512        "  padding: .5ex;\n",
    513        "  margin: .5ex;\n",
    514        "  width: min-content;\n",
    515        "  min-width: 20ex;\n",
    516        "  max-width: 50ex;\n",
    517        "  color: var(--sklearn-color-text);\n",
    518        "  box-shadow: 2pt 2pt 4pt #999;\n",
    519        "  /* unfitted */\n",
    520        "  background: var(--sklearn-color-unfitted-level-0);\n",
    521        "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
    522        "}\n",
    523        "\n",
    524        ".sk-estimator-doc-link.fitted span {\n",
    525        "  /* fitted */\n",
    526        "  background: var(--sklearn-color-fitted-level-0);\n",
    527        "  border: var(--sklearn-color-fitted-level-3);\n",
    528        "}\n",
    529        "\n",
    530        ".sk-estimator-doc-link:hover span {\n",
    531        "  display: block;\n",
    532        "}\n",
    533        "\n",
    534        "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
    535        "\n",
    536        "#sk-container-id-1 a.estimator_doc_link {\n",
    537        "  float: right;\n",
    538        "  font-size: 1rem;\n",
    539        "  line-height: 1em;\n",
    540        "  font-family: monospace;\n",
    541        "  background-color: var(--sklearn-color-background);\n",
    542        "  border-radius: 1rem;\n",
    543        "  height: 1rem;\n",
    544        "  width: 1rem;\n",
    545        "  text-decoration: none;\n",
    546        "  /* unfitted */\n",
    547        "  color: var(--sklearn-color-unfitted-level-1);\n",
    548        "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
    549        "}\n",
    550        "\n",
    551        "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
    552        "  /* fitted */\n",
    553        "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
    554        "  color: var(--sklearn-color-fitted-level-1);\n",
    555        "}\n",
    556        "\n",
    557        "/* On hover */\n",
    558        "#sk-container-id-1 a.estimator_doc_link:hover {\n",
    559        "  /* unfitted */\n",
    560        "  background-color: var(--sklearn-color-unfitted-level-3);\n",
    561        "  color: var(--sklearn-color-background);\n",
    562        "  text-decoration: none;\n",
    563        "}\n",
    564        "\n",
    565        "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
    566        "  /* fitted */\n",
    567        "  background-color: var(--sklearn-color-fitted-level-3);\n",
    568        "}\n",
    569        "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(random_state=10)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(random_state=10)</pre></div> </div></div></div></div>"
    570       ],
    571       "text/plain": [
    572        "LogisticRegression(random_state=10)"
    573       ]
    574      },
    575      "execution_count": 6,
    576      "metadata": {},
    577      "output_type": "execute_result"
    578     }
    579    ],
    580    "source": [
    581     "from sklearn.linear_model import LogisticRegression\n",
    582     "from sklearn.model_selection import train_test_split\n",
    583     "\n",
    584     "X = iris.data[['petal width (cm)']].values\n",
    585     "\n",
    586     "# Is current virginica?\n",
    587     "y = iris.target_names[iris.target] == 'virginica'\n",
    588     "\n",
    589     "# Split\n",
    590     "X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=10)\n",
    591     "\n",
    592     "# Train\n",
    593     "\n",
    594     "log_reg = LogisticRegression(random_state=10)\n",
    595     "log_reg.fit(X_train,y_train)"
    596    ]
    597   },
    598   {
    599    "cell_type": "code",
    600    "execution_count": 7,
    601    "metadata": {},
    602    "outputs": [],
    603    "source": [
    604     "import numpy as np\n",
    605     "\n",
    606     "# Predict probability on 1,000 evenly spaced values from 0 to 3\n",
    607     "X_new = np.linspace(0,3,1000).reshape(-1,1)\n",
    608     "y_proba = log_reg.predict_proba(X_new)"
    609    ]
    610   },
    611   {
    612    "cell_type": "code",
    613    "execution_count": 8,
    614    "metadata": {},
    615    "outputs": [
    616     {
    617      "data": {
    618       "text/plain": [
    619        "<matplotlib.collections.PathCollection at 0x7feb4bf61bd0>"
    620       ]
    621      },
    622      "execution_count": 8,
    623      "metadata": {},
    624      "output_type": "execute_result"
    625     },
    626     {
    627      "data": {
    628       "image/png": "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",
    629       "text/plain": [
    630        "<Figure size 640x480 with 1 Axes>"
    631       ]
    632      },
    633      "metadata": {},
    634      "output_type": "display_data"
    635     }
    636    ],
    637    "source": [
    638     "import matplotlib.pyplot as plt\n",
    639     "\n",
    640     "# First probability is the likelihood it is not\n",
    641     "# then the second is the likelihood it is thus\n",
    642     "# below we want the second one to show the probability\n",
    643     "# that a given value is a virginica iris.\n",
    644     "\n",
    645     "\n",
    646     "plt.plot(X_new,y_proba[:,1]) # Slicing notation. We want all rows\n",
    647     "                             # and then the comma\n",
    648     "                             # specifies the wanted columns.\n",
    649     "\n",
    650     "\n",
    651     "plt.scatter(X_train, y_train, s=60, cmap='jet', c=y_train, marker='^')"
    652    ]
    653   },
    654   {
    655    "cell_type": "code",
    656    "execution_count": 20,
    657    "metadata": {},
    658    "outputs": [
    659     {
    660      "data": {
    661       "text/plain": [
    662        "1.6486486486486487"
    663       ]
    664      },
    665      "execution_count": 20,
    666      "metadata": {},
    667      "output_type": "execute_result"
    668     }
    669    ],
    670    "source": [
    671     "# First get the array of only values where the second column is >= 50% probability.\n",
    672     "# Then, get the first x val.\n",
    673     "decision_boundary = X_new[y_proba[:, 1] >= 0.5][0, 0]\n",
    674     "decision_boundary"
    675    ]
    676   },
    677   {
    678    "cell_type": "code",
    679    "execution_count": 18,
    680    "metadata": {},
    681    "outputs": [
    682     {
    683      "data": {
    684       "text/plain": [
    685        "array([False,  True])"
    686       ]
    687      },
    688      "execution_count": 18,
    689      "metadata": {},
    690      "output_type": "execute_result"
    691     }
    692    ],
    693    "source": [
    694     "log_reg.predict([[1.5], [1.7]])"
    695    ]
    696   }
    697  ],
    698  "metadata": {
    699   "kernelspec": {
    700    "display_name": "notebook",
    701    "language": "python",
    702    "name": "notebook"
    703   },
    704   "language_info": {
    705    "codemirror_mode": {
    706     "name": "ipython",
    707     "version": 3
    708    },
    709    "file_extension": ".py",
    710    "mimetype": "text/x-python",
    711    "name": "python",
    712    "nbconvert_exporter": "python",
    713    "pygments_lexer": "ipython3",
    714    "version": "3.11.2"
    715   }
    716  },
    717  "nbformat": 4,
    718  "nbformat_minor": 2
    719 }