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\"> 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 }