machinelearning

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

pcaWithDecisionTree.ipynb (39671B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "code",
      5    "execution_count": 44,
      6    "metadata": {},
      7    "outputs": [
      8     {
      9      "data": {
     10       "text/html": [
     11        "<style>#sk-container-id-4 {\n",
     12        "  /* Definition of color scheme common for light and dark mode */\n",
     13        "  --sklearn-color-text: black;\n",
     14        "  --sklearn-color-line: gray;\n",
     15        "  /* Definition of color scheme for unfitted estimators */\n",
     16        "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
     17        "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
     18        "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
     19        "  --sklearn-color-unfitted-level-3: chocolate;\n",
     20        "  /* Definition of color scheme for fitted estimators */\n",
     21        "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
     22        "  --sklearn-color-fitted-level-1: #d4ebff;\n",
     23        "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
     24        "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
     25        "\n",
     26        "  /* Specific color for light theme */\n",
     27        "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
     28        "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
     29        "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
     30        "  --sklearn-color-icon: #696969;\n",
     31        "\n",
     32        "  @media (prefers-color-scheme: dark) {\n",
     33        "    /* Redefinition of color scheme for dark theme */\n",
     34        "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
     35        "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
     36        "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
     37        "    --sklearn-color-icon: #878787;\n",
     38        "  }\n",
     39        "}\n",
     40        "\n",
     41        "#sk-container-id-4 {\n",
     42        "  color: var(--sklearn-color-text);\n",
     43        "}\n",
     44        "\n",
     45        "#sk-container-id-4 pre {\n",
     46        "  padding: 0;\n",
     47        "}\n",
     48        "\n",
     49        "#sk-container-id-4 input.sk-hidden--visually {\n",
     50        "  border: 0;\n",
     51        "  clip: rect(1px 1px 1px 1px);\n",
     52        "  clip: rect(1px, 1px, 1px, 1px);\n",
     53        "  height: 1px;\n",
     54        "  margin: -1px;\n",
     55        "  overflow: hidden;\n",
     56        "  padding: 0;\n",
     57        "  position: absolute;\n",
     58        "  width: 1px;\n",
     59        "}\n",
     60        "\n",
     61        "#sk-container-id-4 div.sk-dashed-wrapped {\n",
     62        "  border: 1px dashed var(--sklearn-color-line);\n",
     63        "  margin: 0 0.4em 0.5em 0.4em;\n",
     64        "  box-sizing: border-box;\n",
     65        "  padding-bottom: 0.4em;\n",
     66        "  background-color: var(--sklearn-color-background);\n",
     67        "}\n",
     68        "\n",
     69        "#sk-container-id-4 div.sk-container {\n",
     70        "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
     71        "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
     72        "     so we also need the `!important` here to be able to override the\n",
     73        "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
     74        "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
     75        "  display: inline-block !important;\n",
     76        "  position: relative;\n",
     77        "}\n",
     78        "\n",
     79        "#sk-container-id-4 div.sk-text-repr-fallback {\n",
     80        "  display: none;\n",
     81        "}\n",
     82        "\n",
     83        "div.sk-parallel-item,\n",
     84        "div.sk-serial,\n",
     85        "div.sk-item {\n",
     86        "  /* draw centered vertical line to link estimators */\n",
     87        "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
     88        "  background-size: 2px 100%;\n",
     89        "  background-repeat: no-repeat;\n",
     90        "  background-position: center center;\n",
     91        "}\n",
     92        "\n",
     93        "/* Parallel-specific style estimator block */\n",
     94        "\n",
     95        "#sk-container-id-4 div.sk-parallel-item::after {\n",
     96        "  content: \"\";\n",
     97        "  width: 100%;\n",
     98        "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
     99        "  flex-grow: 1;\n",
    100        "}\n",
    101        "\n",
    102        "#sk-container-id-4 div.sk-parallel {\n",
    103        "  display: flex;\n",
    104        "  align-items: stretch;\n",
    105        "  justify-content: center;\n",
    106        "  background-color: var(--sklearn-color-background);\n",
    107        "  position: relative;\n",
    108        "}\n",
    109        "\n",
    110        "#sk-container-id-4 div.sk-parallel-item {\n",
    111        "  display: flex;\n",
    112        "  flex-direction: column;\n",
    113        "}\n",
    114        "\n",
    115        "#sk-container-id-4 div.sk-parallel-item:first-child::after {\n",
    116        "  align-self: flex-end;\n",
    117        "  width: 50%;\n",
    118        "}\n",
    119        "\n",
    120        "#sk-container-id-4 div.sk-parallel-item:last-child::after {\n",
    121        "  align-self: flex-start;\n",
    122        "  width: 50%;\n",
    123        "}\n",
    124        "\n",
    125        "#sk-container-id-4 div.sk-parallel-item:only-child::after {\n",
    126        "  width: 0;\n",
    127        "}\n",
    128        "\n",
    129        "/* Serial-specific style estimator block */\n",
    130        "\n",
    131        "#sk-container-id-4 div.sk-serial {\n",
    132        "  display: flex;\n",
    133        "  flex-direction: column;\n",
    134        "  align-items: center;\n",
    135        "  background-color: var(--sklearn-color-background);\n",
    136        "  padding-right: 1em;\n",
    137        "  padding-left: 1em;\n",
    138        "}\n",
    139        "\n",
    140        "\n",
    141        "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
    142        "clickable and can be expanded/collapsed.\n",
    143        "- Pipeline and ColumnTransformer use this feature and define the default style\n",
    144        "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
    145        "*/\n",
    146        "\n",
    147        "/* Pipeline and ColumnTransformer style (default) */\n",
    148        "\n",
    149        "#sk-container-id-4 div.sk-toggleable {\n",
    150        "  /* Default theme specific background. It is overwritten whether we have a\n",
    151        "  specific estimator or a Pipeline/ColumnTransformer */\n",
    152        "  background-color: var(--sklearn-color-background);\n",
    153        "}\n",
    154        "\n",
    155        "/* Toggleable label */\n",
    156        "#sk-container-id-4 label.sk-toggleable__label {\n",
    157        "  cursor: pointer;\n",
    158        "  display: block;\n",
    159        "  width: 100%;\n",
    160        "  margin-bottom: 0;\n",
    161        "  padding: 0.5em;\n",
    162        "  box-sizing: border-box;\n",
    163        "  text-align: center;\n",
    164        "}\n",
    165        "\n",
    166        "#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n",
    167        "  /* Arrow on the left of the label */\n",
    168        "  content: \"▸\";\n",
    169        "  float: left;\n",
    170        "  margin-right: 0.25em;\n",
    171        "  color: var(--sklearn-color-icon);\n",
    172        "}\n",
    173        "\n",
    174        "#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n",
    175        "  color: var(--sklearn-color-text);\n",
    176        "}\n",
    177        "\n",
    178        "/* Toggleable content - dropdown */\n",
    179        "\n",
    180        "#sk-container-id-4 div.sk-toggleable__content {\n",
    181        "  max-height: 0;\n",
    182        "  max-width: 0;\n",
    183        "  overflow: hidden;\n",
    184        "  text-align: left;\n",
    185        "  /* unfitted */\n",
    186        "  background-color: var(--sklearn-color-unfitted-level-0);\n",
    187        "}\n",
    188        "\n",
    189        "#sk-container-id-4 div.sk-toggleable__content.fitted {\n",
    190        "  /* fitted */\n",
    191        "  background-color: var(--sklearn-color-fitted-level-0);\n",
    192        "}\n",
    193        "\n",
    194        "#sk-container-id-4 div.sk-toggleable__content pre {\n",
    195        "  margin: 0.2em;\n",
    196        "  border-radius: 0.25em;\n",
    197        "  color: var(--sklearn-color-text);\n",
    198        "  /* unfitted */\n",
    199        "  background-color: var(--sklearn-color-unfitted-level-0);\n",
    200        "}\n",
    201        "\n",
    202        "#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n",
    203        "  /* unfitted */\n",
    204        "  background-color: var(--sklearn-color-fitted-level-0);\n",
    205        "}\n",
    206        "\n",
    207        "#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
    208        "  /* Expand drop-down */\n",
    209        "  max-height: 200px;\n",
    210        "  max-width: 100%;\n",
    211        "  overflow: auto;\n",
    212        "}\n",
    213        "\n",
    214        "#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
    215        "  content: \"▾\";\n",
    216        "}\n",
    217        "\n",
    218        "/* Pipeline/ColumnTransformer-specific style */\n",
    219        "\n",
    220        "#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    221        "  color: var(--sklearn-color-text);\n",
    222        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    223        "}\n",
    224        "\n",
    225        "#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    226        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    227        "}\n",
    228        "\n",
    229        "/* Estimator-specific style */\n",
    230        "\n",
    231        "/* Colorize estimator box */\n",
    232        "#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    233        "  /* unfitted */\n",
    234        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    235        "}\n",
    236        "\n",
    237        "#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
    238        "  /* fitted */\n",
    239        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    240        "}\n",
    241        "\n",
    242        "#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n",
    243        "#sk-container-id-4 div.sk-label label {\n",
    244        "  /* The background is the default theme color */\n",
    245        "  color: var(--sklearn-color-text-on-default-background);\n",
    246        "}\n",
    247        "\n",
    248        "/* On hover, darken the color of the background */\n",
    249        "#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n",
    250        "  color: var(--sklearn-color-text);\n",
    251        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    252        "}\n",
    253        "\n",
    254        "/* Label box, darken color on hover, fitted */\n",
    255        "#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
    256        "  color: var(--sklearn-color-text);\n",
    257        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    258        "}\n",
    259        "\n",
    260        "/* Estimator label */\n",
    261        "\n",
    262        "#sk-container-id-4 div.sk-label label {\n",
    263        "  font-family: monospace;\n",
    264        "  font-weight: bold;\n",
    265        "  display: inline-block;\n",
    266        "  line-height: 1.2em;\n",
    267        "}\n",
    268        "\n",
    269        "#sk-container-id-4 div.sk-label-container {\n",
    270        "  text-align: center;\n",
    271        "}\n",
    272        "\n",
    273        "/* Estimator-specific */\n",
    274        "#sk-container-id-4 div.sk-estimator {\n",
    275        "  font-family: monospace;\n",
    276        "  border: 1px dotted var(--sklearn-color-border-box);\n",
    277        "  border-radius: 0.25em;\n",
    278        "  box-sizing: border-box;\n",
    279        "  margin-bottom: 0.5em;\n",
    280        "  /* unfitted */\n",
    281        "  background-color: var(--sklearn-color-unfitted-level-0);\n",
    282        "}\n",
    283        "\n",
    284        "#sk-container-id-4 div.sk-estimator.fitted {\n",
    285        "  /* fitted */\n",
    286        "  background-color: var(--sklearn-color-fitted-level-0);\n",
    287        "}\n",
    288        "\n",
    289        "/* on hover */\n",
    290        "#sk-container-id-4 div.sk-estimator:hover {\n",
    291        "  /* unfitted */\n",
    292        "  background-color: var(--sklearn-color-unfitted-level-2);\n",
    293        "}\n",
    294        "\n",
    295        "#sk-container-id-4 div.sk-estimator.fitted:hover {\n",
    296        "  /* fitted */\n",
    297        "  background-color: var(--sklearn-color-fitted-level-2);\n",
    298        "}\n",
    299        "\n",
    300        "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
    301        "\n",
    302        "/* Common style for \"i\" and \"?\" */\n",
    303        "\n",
    304        ".sk-estimator-doc-link,\n",
    305        "a:link.sk-estimator-doc-link,\n",
    306        "a:visited.sk-estimator-doc-link {\n",
    307        "  float: right;\n",
    308        "  font-size: smaller;\n",
    309        "  line-height: 1em;\n",
    310        "  font-family: monospace;\n",
    311        "  background-color: var(--sklearn-color-background);\n",
    312        "  border-radius: 1em;\n",
    313        "  height: 1em;\n",
    314        "  width: 1em;\n",
    315        "  text-decoration: none !important;\n",
    316        "  margin-left: 1ex;\n",
    317        "  /* unfitted */\n",
    318        "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
    319        "  color: var(--sklearn-color-unfitted-level-1);\n",
    320        "}\n",
    321        "\n",
    322        ".sk-estimator-doc-link.fitted,\n",
    323        "a:link.sk-estimator-doc-link.fitted,\n",
    324        "a:visited.sk-estimator-doc-link.fitted {\n",
    325        "  /* fitted */\n",
    326        "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
    327        "  color: var(--sklearn-color-fitted-level-1);\n",
    328        "}\n",
    329        "\n",
    330        "/* On hover */\n",
    331        "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
    332        ".sk-estimator-doc-link:hover,\n",
    333        "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
    334        ".sk-estimator-doc-link:hover {\n",
    335        "  /* unfitted */\n",
    336        "  background-color: var(--sklearn-color-unfitted-level-3);\n",
    337        "  color: var(--sklearn-color-background);\n",
    338        "  text-decoration: none;\n",
    339        "}\n",
    340        "\n",
    341        "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
    342        ".sk-estimator-doc-link.fitted:hover,\n",
    343        "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
    344        ".sk-estimator-doc-link.fitted:hover {\n",
    345        "  /* fitted */\n",
    346        "  background-color: var(--sklearn-color-fitted-level-3);\n",
    347        "  color: var(--sklearn-color-background);\n",
    348        "  text-decoration: none;\n",
    349        "}\n",
    350        "\n",
    351        "/* Span, style for the box shown on hovering the info icon */\n",
    352        ".sk-estimator-doc-link span {\n",
    353        "  display: none;\n",
    354        "  z-index: 9999;\n",
    355        "  position: relative;\n",
    356        "  font-weight: normal;\n",
    357        "  right: .2ex;\n",
    358        "  padding: .5ex;\n",
    359        "  margin: .5ex;\n",
    360        "  width: min-content;\n",
    361        "  min-width: 20ex;\n",
    362        "  max-width: 50ex;\n",
    363        "  color: var(--sklearn-color-text);\n",
    364        "  box-shadow: 2pt 2pt 4pt #999;\n",
    365        "  /* unfitted */\n",
    366        "  background: var(--sklearn-color-unfitted-level-0);\n",
    367        "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
    368        "}\n",
    369        "\n",
    370        ".sk-estimator-doc-link.fitted span {\n",
    371        "  /* fitted */\n",
    372        "  background: var(--sklearn-color-fitted-level-0);\n",
    373        "  border: var(--sklearn-color-fitted-level-3);\n",
    374        "}\n",
    375        "\n",
    376        ".sk-estimator-doc-link:hover span {\n",
    377        "  display: block;\n",
    378        "}\n",
    379        "\n",
    380        "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
    381        "\n",
    382        "#sk-container-id-4 a.estimator_doc_link {\n",
    383        "  float: right;\n",
    384        "  font-size: 1rem;\n",
    385        "  line-height: 1em;\n",
    386        "  font-family: monospace;\n",
    387        "  background-color: var(--sklearn-color-background);\n",
    388        "  border-radius: 1rem;\n",
    389        "  height: 1rem;\n",
    390        "  width: 1rem;\n",
    391        "  text-decoration: none;\n",
    392        "  /* unfitted */\n",
    393        "  color: var(--sklearn-color-unfitted-level-1);\n",
    394        "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
    395        "}\n",
    396        "\n",
    397        "#sk-container-id-4 a.estimator_doc_link.fitted {\n",
    398        "  /* fitted */\n",
    399        "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
    400        "  color: var(--sklearn-color-fitted-level-1);\n",
    401        "}\n",
    402        "\n",
    403        "/* On hover */\n",
    404        "#sk-container-id-4 a.estimator_doc_link:hover {\n",
    405        "  /* unfitted */\n",
    406        "  background-color: var(--sklearn-color-unfitted-level-3);\n",
    407        "  color: var(--sklearn-color-background);\n",
    408        "  text-decoration: none;\n",
    409        "}\n",
    410        "\n",
    411        "#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n",
    412        "  /* fitted */\n",
    413        "  background-color: var(--sklearn-color-fitted-level-3);\n",
    414        "}\n",
    415        "</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>DecisionTreeClassifier(max_depth=2, 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-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier(max_depth=2, random_state=10)</pre></div> </div></div></div></div>"
    416       ],
    417       "text/plain": [
    418        "DecisionTreeClassifier(max_depth=2, random_state=10)"
    419       ]
    420      },
    421      "execution_count": 44,
    422      "metadata": {},
    423      "output_type": "execute_result"
    424     }
    425    ],
    426    "source": [
    427     "from sklearn.decomposition import PCA\n",
    428     "from sklearn.pipeline import make_pipeline\n",
    429     "from sklearn.preprocessing import StandardScaler\n",
    430     "from sklearn.tree import DecisionTreeClassifier\n",
    431     "from sklearn.datasets import load_iris\n",
    432     "\n",
    433     "data = load_iris(as_frame=True)\n",
    434     "\n",
    435     "X_iris = data.data\n",
    436     "y_iris = data.target\n",
    437     "\n",
    438     "pca_pipeline = make_pipeline(StandardScaler(), PCA())\n",
    439     "X_iris_rotated = pca_pipeline.fit_transform(X_iris)\n",
    440     "tree_clf_pca = DecisionTreeClassifier(max_depth=2, random_state=10)\n",
    441     "tree_clf_pca.fit(X_iris_rotated, y_iris)"
    442    ]
    443   },
    444   {
    445    "cell_type": "code",
    446    "execution_count": 45,
    447    "metadata": {},
    448    "outputs": [
    449     {
    450      "data": {
    451       "text/plain": [
    452        "<matplotlib.collections.PathCollection at 0x7f5faed588d0>"
    453       ]
    454      },
    455      "execution_count": 45,
    456      "metadata": {},
    457      "output_type": "execute_result"
    458     },
    459     {
    460      "data": {
    461       "image/png": "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q7q6WldffbX27dsXdpOM89xzz2n58uW66KKLlEql9O///u9hN8k4Gzdu1Ic+9CHV1NRo6tSpuvHGG/Xaa6+F3SzjbNmyRe9///sHi5jNnz9f3/ve98JuViAiH4gsWrRI3/rWt/Taa6/p29/+tg4dOqRPfOITYTfLKAcOHFA2m9VDDz2kV155Rffdd58efPBBffGLXwy7acY5e/asbrrpJq1evTrsphjl8ccf15133qn169dr//79uuqqq/TRj35Ub7zxRthNM0pvb6+uuuoqbd68OeymGOvZZ5/VmjVrtHfvXu3evVvnzp3TRz7yEfX29obdNKNccskl+upXv6oXX3xRP/7xj7V48WLdcMMNeuWVV8Jumv+smNm5c6eVSqWss2fPht0Uo/3d3/2d1djYGHYzjLV161YrnU6H3QxjzJ0711qzZs3g//v7+62LLrrI2rhxY4itMpska8eOHWE3w3hvvPGGJcl69tlnw26K8SZNmmT90z/9U9jN8F3ke0SG6u7u1je/+U0tWLBAY8eODbs5RstkMqqrqwu7GYiAs2fP6sUXX9SSJUsGv1dRUaElS5aotbU1xJYhDjKZjCRxPcqjv79fjz32mHp7ezV//vywm+O7WAQid911lyZMmKDJkyfr6NGj2rlzZ9hNMtrBgwf1wAMP6LOf/WzYTUEEnDx5Uv39/brwwguHff/CCy9UV1dXSK1CHGSzWd1+++265pprNHPmzLCbY5yXX35Z559/vqqqqnTbbbdpx44dampqCrtZvjMyELn77ruVSqXyfh04cGBw+y984Qt66aWX9P3vf19jxozRn/7pn8pKQMFYr8dJko4fP65ly5bppptu0qpVq0JqeXkVc5wABG/NmjVqb2/XY489FnZTjPSe97xHbW1t+uEPf6jVq1dr5cqV6ujoCLtZvjOyxPubb76pU6dO5d3m8ssvV2Vl5ajv//KXv9S0adP0X//1X7HswhrK63E6ceKEFi5cqHnz5umRRx5RRYWRcajvivk8PfLII7r99tv19ttvB9w68509e1bjx4/Xv/3bv+nGG28c/P7KlSv19ttv0wPpIJVKaceOHcOOGX5n7dq12rlzp5577jk1NjaG3ZxIWLJkiWbMmKGHHnoo7Kb46rywG5DLlClTNGXKlKJem81mJUl9fX1+NslIXo7T8ePHtWjRIs2ZM0dbt25NTBAilfZ5glRZWak5c+boqaeeGrypZrNZPfXUU1q7dm24jUPkWJalv/zLv9SOHTv0zDPPEIR4kM1mY3lvMzIQceuHP/yhfvSjH+naa6/VpEmTdOjQId1zzz2aMWNG7HtDvDh+/LgWLlyoyy67TPfee6/efPPNwZ/V19eH2DLzHD16VN3d3Tp69Kj6+/vV1tYmSbriiit0/vnnh9u4EN15551auXKlPvjBD2ru3Lm6//771dvbq1tvvTXsphnl17/+tQ4ePDj4/8OHD6utrU11dXW69NJLQ2yZOdasWaPt27dr586dqqmpGcwzSqfTGjduXMitM8e6det03XXX6dJLL9Xp06e1fft2PfPMM/rP//zPsJvmv3An7ZTmpz/9qbVo0SKrrq7OqqqqsqZPn27ddttt1i9/+cuwm2aUrVu3WpJyfmG4lStX5jxOTz/9dNhNC90DDzxgXXrppVZlZaU1d+5ca+/evWE3yThPP/10zs/PypUrw26aMZyuRVu3bg27aUb5sz/7M+uyyy6zKisrrSlTplh/+Id/aH3/+98Pu1mBMDJHBAAAJENyEgUAAIBxCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBoCEQAAEBo/j/d4YdIWQo6PwAAAABJRU5ErkJggg==",
    462       "text/plain": [
    463        "<Figure size 640x480 with 1 Axes>"
    464       ]
    465      },
    466      "metadata": {},
    467      "output_type": "display_data"
    468     }
    469    ],
    470    "source": [
    471     "import matplotlib.pyplot as plt\n",
    472     "\n",
    473     "\n",
    474     "plt.scatter(X_iris_rotated[:,0], X_iris_rotated[:,1]) "
    475    ]
    476   }
    477  ],
    478  "metadata": {
    479   "kernelspec": {
    480    "display_name": "notebook",
    481    "language": "python",
    482    "name": "notebook"
    483   },
    484   "language_info": {
    485    "codemirror_mode": {
    486     "name": "ipython",
    487     "version": 3
    488    },
    489    "file_extension": ".py",
    490    "mimetype": "text/x-python",
    491    "name": "python",
    492    "nbconvert_exporter": "python",
    493    "pygments_lexer": "ipython3",
    494    "version": "3.11.2"
    495   }
    496  },
    497  "nbformat": 4,
    498  "nbformat_minor": 2
    499 }