{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "43a29e2e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import required libraries\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
    "from sklearn.metrics import accuracy_score, classification_report"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "cb820368",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>SepalLengthCm</th>\n",
       "      <th>SepalWidthCm</th>\n",
       "      <th>PetalLengthCm</th>\n",
       "      <th>PetalWidthCm</th>\n",
       "      <th>Species</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm      Species\n",
       "0   1            5.1           3.5            1.4           0.2  Iris-setosa\n",
       "1   2            4.9           3.0            1.4           0.2  Iris-setosa\n",
       "2   3            4.7           3.2            1.3           0.2  Iris-setosa\n",
       "3   4            4.6           3.1            1.5           0.2  Iris-setosa\n",
       "4   5            5.0           3.6            1.4           0.2  Iris-setosa"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load the Iris dataset\n",
    "data = pd.read_csv(\"Iris.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "5a97fe9f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Separate features and species labels\n",
    "X = data.drop(columns=[\"Id\", \"Species\"])\n",
    "y = data[\"Species\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1f11d581",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Split the dataset into training and testing sets\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.2, random_state=42, stratify=y\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5810fde5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Standardize the feature values\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6246d4ac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>.sk-global {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "}\n",
       "\n",
       ".sk-global.light {\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: black;\n",
       "  --sklearn-color-background: white;\n",
       "  --sklearn-color-border-box: black;\n",
       "  --sklearn-color-icon: #696969;\n",
       "}\n",
       "\n",
       ".sk-global.dark {\n",
       "  --sklearn-color-text-on-default-background: white;\n",
       "  --sklearn-color-background: #111;\n",
       "  --sklearn-color-border-box: white;\n",
       "  --sklearn-color-icon: #878787;\n",
       "}\n",
       "\n",
       ".sk-global {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       ".sk-global pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       ".sk-global input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip-path: inset(100%);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       ".sk-global div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       ".sk-global div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       ".sk-global div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       ".sk-global label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: center;\n",
       "  justify-content: center;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       ".sk-global label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       ".sk-global label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       ".sk-global label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       ".sk-global div.sk-toggleable__content {\n",
       "  display: none;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       ".sk-global input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  overflow: visible;\n",
       "}\n",
       "\n",
       ".sk-global input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       ".sk-global div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       ".sk-global div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-label label.sk-toggleable__label,\n",
       ".sk-global div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       ".sk-global div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       ".sk-global div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       ".sk-global div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       ".sk-global div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       ".sk-global div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       ".sk-global div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       ".sk-global div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-3) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-0);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-0);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       ".sk-global a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       ".sk-global a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       ".sk-global a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       ".sk-global a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-top-container.sk-global {\n",
       "  /* pydata-sphinx-theme hides overflow, so scrolling is disabled.\n",
       "   We need to set it to !important and add tabindex=\"0\" in the HTML\n",
       "   to allow keyboard-only users to navigate the display. */\n",
       "  overflow-x: scroll !important;\n",
       "  max-width: 100%;\n",
       "}\n",
       "\n",
       ".estimator-table {\n",
       "    font-family: monospace;\n",
       "}\n",
       "\n",
       ".estimator-table summary {\n",
       "    padding: .5rem;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".estimator-table summary::marker {\n",
       "    font-size: 0.7rem;\n",
       "}\n",
       "\n",
       ".estimator-table details[open] {\n",
       "    padding-left: 0.1rem;\n",
       "    padding-right: 0.1rem;\n",
       "    padding-bottom: 0.3rem;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table {\n",
       "    margin-left: auto !important;\n",
       "    margin-right: auto !important;\n",
       "    margin-top: 0;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(odd) {\n",
       "    background-color: #fff;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(even) {\n",
       "    background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:hover td {\n",
       "    background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".estimator-table table :is(td, th) {\n",
       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "}\n",
       "\n",
       "/*\n",
       "    `table td`is set in notebook with right text-align.\n",
       "    We need to overwrite it.\n",
       "*/\n",
       ".estimator-table table td.param {\n",
       "    text-align: left;\n",
       "    position: relative;\n",
       "    padding: 0;\n",
       "}\n",
       "\n",
       ".user-set td {\n",
       "    color:rgb(255, 94, 0);\n",
       "    text-align: left !important;\n",
       "}\n",
       "\n",
       ".user-set td.value {\n",
       "    color:rgb(255, 94, 0);\n",
       "    background-color: transparent;\n",
       "}\n",
       "\n",
       ".default td, .estimator-table th {\n",
       "    color: black;\n",
       "    text-align: left !important;\n",
       "}\n",
       "\n",
       ".user-set td i,\n",
       ".default td i {\n",
       "    color: black;\n",
       "}\n",
       "\n",
       "td.fitted-att-type {\n",
       "    white-space: preserve nowrap;\n",
       "}\n",
       "\n",
       "/*\n",
       "    Styles for parameter documentation links\n",
       "    We need styling for visited so jupyter doesn't overwrite it\n",
       "*/\n",
       "a.param-doc-link,\n",
       "a.param-doc-link:link,\n",
       "a.param-doc-link:visited {\n",
       "    text-decoration: underline dashed;\n",
       "    text-underline-offset: .3em;\n",
       "    color: inherit;\n",
       "    display: block;\n",
       "    padding: .5em;\n",
       "}\n",
       "\n",
       "@supports(anchor-name: --doc-link) {\n",
       "    a.param-doc-link,\n",
       "    a.param-doc-link:link,\n",
       "    a.param-doc-link:visited {\n",
       "    anchor-name: --doc-link;\n",
       "    }\n",
       "}\n",
       "\n",
       "/* \"hack\" to make the entire area of the cell containing the link clickable */\n",
       "a.param-doc-link::before {\n",
       "    position: absolute;\n",
       "    content: \"\";\n",
       "    inset: 0;\n",
       "}\n",
       "\n",
       ".param-doc-description {\n",
       "    display: none;\n",
       "    position: absolute;\n",
       "    z-index: 9999;\n",
       "    left: 0;\n",
       "    padding: .5ex;\n",
       "    margin-left: 1.5em;\n",
       "    color: var(--sklearn-color-text);\n",
       "    box-shadow: .3em .3em .4em #999;\n",
       "    width: max-content;\n",
       "    text-align: left;\n",
       "    max-height: 10em;\n",
       "    overflow-y: auto;\n",
       "\n",
       "    /* unfitted */\n",
       "    background: var(--sklearn-color-unfitted-level-0);\n",
       "    border: thin solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       "@supports(position-area: center right) {\n",
       "    .param-doc-description {\n",
       "    position-area: center right;\n",
       "    position: fixed;\n",
       "    margin-left: 0;\n",
       "    }\n",
       "}\n",
       "\n",
       "/* Fitted state for parameter tooltips */\n",
       ".fitted .param-doc-description {\n",
       "    /* fitted */\n",
       "    background: var(--sklearn-color-fitted-level-0);\n",
       "    border: thin solid var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".param-doc-link:hover .param-doc-description {\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".copy-paste-icon {\n",
       "    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
       "    background-repeat: no-repeat;\n",
       "    background-size: 14px 14px;\n",
       "    background-position: 0;\n",
       "    display: inline-block;\n",
       "    width: 14px;\n",
       "    height: 14px;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".features {\n",
       "  font-family: monospace;\n",
       "  cursor: pointer;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: .20em;\n",
       "  margin-bottom: 0.5em;\n",
       "  font-size: inherit; /* Needed for jupyter */\n",
       "}\n",
       "\n",
       ".features.fitted {\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       ".features summary {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  margin-bottom: 0;\n",
       "  text-align: center;\n",
       "  align-items: center;\n",
       "  justify-content: center;\n",
       "  gap: 0.5em;\n",
       "  padding: .25em;\n",
       "}\n",
       "\n",
       ".features details[open] > summary {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "  border-radius: .20em 0 0 0;\n",
       "}\n",
       "\n",
       ".features.fitted details[open] > summary {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "  border-radius: .20em 0 0 0;\n",
       "}\n",
       "\n",
       ".features details > summary .arrow::before {\n",
       "  content: \"▸\";\n",
       "  color: grey;\n",
       "}\n",
       "\n",
       ".features details[open] > summary .arrow::before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       ".features details:hover > summary {\n",
       "  margin: 0;\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       ".features.fitted details:hover > summary {\n",
       "  margin: 0;\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       ".features .features-container {\n",
       "  max-width: 15em;\n",
       "  max-height: 10em;\n",
       "  overflow: auto;\n",
       "  scrollbar-width: thin;\n",
       "  padding: .25em 0.1rem;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 0 0 .5em .5em;\n",
       "}\n",
       "\n",
       ".features.fitted .features-container {\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       ".features .image-container {\n",
       "  block-size: 1em;\n",
       "  inline-size: 1em;\n",
       "  padding: 0;\n",
       "  margin: 0%;\n",
       "  display: flex;\n",
       "  justify-content: center;\n",
       "  align-items: center;\n",
       "}\n",
       "\n",
       ".features .copy-paste-icon {\n",
       "  background-size: 1em 1em;\n",
       "  width: 1em;\n",
       "  height: 1em;\n",
       "  filter: grayscale(100%) opacity(60%);\n",
       "}\n",
       "\n",
       ".features .features-container table {\n",
       "  width: 100%;\n",
       "  margin: 0.01em;\n",
       "}\n",
       "\n",
       ".features .features-container table tr:nth-child(odd) {\n",
       "  background-color: #fff;\n",
       "}\n",
       "\n",
       ".features .features-container table tr:nth-child(even) {\n",
       "  background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".features .features-container table tr:hover {\n",
       "  background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".features .features-container table {\n",
       "  table-layout: inherit;\n",
       "}\n",
       "\n",
       ".features .features-container table td {\n",
       "  text-align: left;\n",
       "  padding: 0 0.5em;\n",
       "  border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "  white-space: nowrap;\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       ".total_features {\n",
       "  display: flex;\n",
       "  justify-content: center;\n",
       "  margin-top: 0.5em;\n",
       "}\n",
       "</style><body><div id=\"sk-container-id-2\" tabindex=\"0\" class=\"sk-top-container sk-global\"><div class=\"sk-text-repr-fallback\"><pre>LinearDiscriminantAnalysis()</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 sk-global\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearDiscriminantAnalysis</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html\">?<span>Documentation for LinearDiscriminantAnalysis</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Parameters</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('solver',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-solver;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=solver,-%7B%27svd%27%2C%20%27lsqr%27%2C%20%27eigen%27%7D%2C%20default%3D%27svd%27\">\n",
       "            solver\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-solver;\">\n",
       "            solver: {&#x27;svd&#x27;, &#x27;lsqr&#x27;, &#x27;eigen&#x27;}, default=&#x27;svd&#x27;<br><br>Solver to use, possible values:<br>  - &#x27;svd&#x27;: Singular value decomposition (default).<br>    Does not compute the covariance matrix, therefore this solver is<br>    recommended for data with a large number of features.<br>  - &#x27;lsqr&#x27;: Least squares solution.<br>    Can be combined with shrinkage or custom covariance estimator.<br>  - &#x27;eigen&#x27;: Eigenvalue decomposition.<br>    Can be combined with shrinkage or custom covariance estimator.<br><br>.. versionchanged:: 1.2<br>    `solver=&quot;svd&quot;` now has experimental Array API support. See the<br>    :ref:`Array API User Guide &lt;array_api&gt;` for more details.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">&#x27;svd&#x27;</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('shrinkage',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-shrinkage;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=shrinkage,-%27auto%27%20or%20float%2C%20default%3DNone\">\n",
       "            shrinkage\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-shrinkage;\">\n",
       "            shrinkage: &#x27;auto&#x27; or float, default=None<br><br>Shrinkage parameter, possible values:<br>  - None: no shrinkage (default).<br>  - &#x27;auto&#x27;: automatic shrinkage using the Ledoit-Wolf lemma.<br>  - float between 0 and 1: fixed shrinkage parameter.<br><br>This should be left to None if `covariance_estimator` is used.<br>Note that shrinkage works only with &#x27;lsqr&#x27; and &#x27;eigen&#x27; solvers.<br><br>For a usage example, see<br>:ref:`sphx_glr_auto_examples_classification_plot_lda.py`.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('priors',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-priors;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=priors,-array-like%20of%20shape%20%28n_classes%2C%29%2C%20default%3DNone\">\n",
       "            priors\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-priors;\">\n",
       "            priors: array-like of shape (n_classes,), default=None<br><br>The class prior probabilities. By default, the class proportions are<br>inferred from the training data.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('n_components',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-n_components;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=n_components,-int%2C%20default%3DNone\">\n",
       "            n_components\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-n_components;\">\n",
       "            n_components: int, default=None<br><br>Number of components (&lt;= min(n_classes - 1, n_features)) for<br>dimensionality reduction. If None, will be set to<br>min(n_classes - 1, n_features). This parameter only affects the<br>`transform` method.<br><br>For a usage example, see<br>:ref:`sphx_glr_auto_examples_decomposition_plot_pca_vs_lda.py`.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('store_covariance',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-store_covariance;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=store_covariance,-bool%2C%20default%3DFalse\">\n",
       "            store_covariance\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-store_covariance;\">\n",
       "            store_covariance: bool, default=False<br><br>If True, explicitly compute the weighted within-class covariance<br>matrix when solver is &#x27;svd&#x27;. The matrix is always computed<br>and stored for the other solvers.<br><br>.. versionadded:: 0.17</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">False</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('tol',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-tol;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=tol,-float%2C%20default%3D1.0e-4\">\n",
       "            tol\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-tol;\">\n",
       "            tol: float, default=1.0e-4<br><br>Absolute threshold for a singular value of X to be considered<br>significant, used to estimate the rank of X. Dimensions whose<br>singular values are non-significant are discarded. Only used if<br>solver is &#x27;svd&#x27;.<br><br>.. versionadded:: 0.17</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">0.0001</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('covariance_estimator',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-covariance_estimator;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=covariance_estimator,-covariance%20estimator%2C%20default%3DNone\">\n",
       "            covariance_estimator\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-covariance_estimator;\">\n",
       "            covariance_estimator: covariance estimator, default=None<br><br>If not None, `covariance_estimator` is used to estimate<br>the covariance matrices instead of relying on the empirical<br>covariance estimator (with potential shrinkage).<br>The object should have a fit method and a ``covariance_`` attribute<br>like the estimators in :mod:`sklearn.covariance`.<br>if None the shrinkage parameter drives the estimate.<br><br>This should be left to None if `shrinkage` is used.<br>Note that `covariance_estimator` works only with &#x27;lsqr&#x27; and &#x27;eigen&#x27;<br>solvers.<br><br>.. versionadded:: 0.24</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    \n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Fitted attributes</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                    <tbody>\n",
       "                        <tr>\n",
       "                        <th>Name</th>\n",
       "                        <th>Type</th>\n",
       "                        <th>Value</th>\n",
       "                        </tr>\n",
       "                        \n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-classes_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=classes_,-array-like%20of%20shape%20%28n_classes%2C%29\">\n",
       "            classes_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-classes_;\">\n",
       "            classes_: array-like of shape (n_classes,)<br><br>Unique class labels.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[&lt;U15](3,)</td>\n",
       "           <td>[&#x27;Iris-setosa&#x27;,&#x27;Iris-versicolor&#x27;,&#x27;Iris-virginica&#x27;]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-coef_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=coef_,-ndarray%20of%20shape%20%28n_features%2C%29%20or%20%28n_classes%2C%20n_features%29\">\n",
       "            coef_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-coef_;\">\n",
       "            coef_: ndarray of shape (n_features,) or (n_classes, n_features)<br><br>Weight vector(s).</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](3, 4)</td>\n",
       "           <td>[[  5.74,  4.98,-30.94,-15.61],\n",
       " [ -1.52, -1.73,  8.65,  1.95],\n",
       " [ -4.22, -3.25, 22.3 , 13.66]]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-explained_variance_ratio_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=explained_variance_ratio_,-ndarray%20of%20shape%20%28n_components%2C%29\">\n",
       "            explained_variance_ratio_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-explained_variance_ratio_;\">\n",
       "            explained_variance_ratio_: ndarray of shape (n_components,)<br><br>Percentage of variance explained by each of the selected components.<br>If ``n_components`` is not set then all components are stored and the<br>sum of explained variances is equal to 1.0. Only available when eigen<br>or svd solver is used.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](2,)</td>\n",
       "           <td>[0.99,0.01]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-intercept_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=intercept_,-ndarray%20of%20shape%20%28n_classes%2C%29\">\n",
       "            intercept_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-intercept_;\">\n",
       "            intercept_: ndarray of shape (n_classes,)<br><br>Intercept term.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](3,)</td>\n",
       "           <td>[-30.07, -2.92,-18.36]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-means_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=means_,-array-like%20of%20shape%20%28n_classes%2C%20n_features%29\">\n",
       "            means_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-means_;\">\n",
       "            means_: array-like of shape (n_classes, n_features)<br><br>Class-wise means.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](3, 4)</td>\n",
       "           <td>[[-1.02, 0.81,-1.3 ,-1.25],\n",
       " [ 0.11,-0.66, 0.27, 0.15],\n",
       " [ 0.92,-0.14, 1.03, 1.1 ]]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-n_features_in_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=n_features_in_,-int\">\n",
       "            n_features_in_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-n_features_in_;\">\n",
       "            n_features_in_: int<br><br>Number of features seen during :term:`fit`.<br><br>.. versionadded:: 0.24</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">int</td>\n",
       "           <td>4</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-priors_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=priors_,-array-like%20of%20shape%20%28n_classes%2C%29\">\n",
       "            priors_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-priors_;\">\n",
       "            priors_: array-like of shape (n_classes,)<br><br>Class priors (sum to 1).</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](3,)</td>\n",
       "           <td>[0.33,0.33,0.33]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-scalings_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=scalings_,-array-like%20of%20shape%20%28rank%2C%20n_classes%20-%201%29\">\n",
       "            scalings_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-scalings_;\">\n",
       "            scalings_: array-like of shape (rank, n_classes - 1)<br><br>Scaling of the features in the space spanned by the class centroids.<br>Only available for &#x27;svd&#x27; and &#x27;eigen&#x27; solvers.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](4, 2)</td>\n",
       "           <td>[[ 0.75,-0.27],\n",
       " [ 0.63,-0.83],\n",
       " [-4.  , 2.15],\n",
       " [-2.12,-2.37]]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "\n",
       "       <tr class=\"default\">\n",
       "           <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            style=\"anchor-name: --doc-link-xbar_;\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#:~:text=xbar_,-array-like%20of%20shape%20%28n_features%2C%29\">\n",
       "            xbar_\n",
       "            <span class=\"param-doc-description\"\n",
       "            style=\"position-anchor: --doc-link-xbar_;\">\n",
       "            xbar_: array-like of shape (n_features,)<br><br>Overall mean. Only present if solver is &#x27;svd&#x27;.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "           <td class=\"fitted-att-type\">ndarray[float64](4,)</td>\n",
       "           <td>[-0., 0., 0., 0.]</td>\n",
       "\n",
       "\n",
       "       </tr>\n",
       "    \n",
       "                    </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    </div></div></div>\n",
       "        <div class=\"features fitted\">\n",
       "          <details>\n",
       "            <summary>\n",
       "              <div class=\"arrow\"></div>\n",
       "              <div>2 features</div>\n",
       "              <div class=\"image-container\" title=\"Copy all output features\">\n",
       "                <i class=\"copy-paste-icon\"\n",
       "                  onclick=\"\n",
       "                  event.stopPropagation();\n",
       "                  event.preventDefault();\n",
       "                  copyFeatureNamesToClipboard(this);\n",
       "                  \"\n",
       "                >\n",
       "                </i>\n",
       "              </div>\n",
       "            </summary>\n",
       "            <div class=\"features-container\">\n",
       "                <table class=\"features-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr>\n",
       "          <td>lineardiscriminantanalysis0</td>\n",
       "        </tr>\n",
       "\n",
       "    \n",
       "        <tr>\n",
       "          <td>lineardiscriminantanalysis1</td>\n",
       "        </tr>\n",
       "\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </div>\n",
       "          </details>\n",
       "        </div>\n",
       "    </div></div><script>/*  Authors: The scikit-learn developers\n",
       " SPDX-License-Identifier: BSD-3-Clause\n",
       "*/\n",
       "\n",
       "function copyToClipboard(text, element) {\n",
       "    // Get the parameter prefix from the closest toggleable content\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
       "\n",
       "    const originalStyle = element.style;\n",
       "    const computedStyle = window.getComputedStyle(element);\n",
       "    const originalWidth = computedStyle.width;\n",
       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
       "\n",
       "    navigator.clipboard.writeText(fullParamName)\n",
       "        .then(() => {\n",
       "            element.style.width = originalWidth;\n",
       "            element.style.color = 'green';\n",
       "            element.innerHTML = \"Copied!\";\n",
       "\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'red';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "\n",
       "document.querySelectorAll('.copy-paste-icon').forEach(function(element) {\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "\n",
       "    const parent = element.parentElement;\n",
       "    if (!parent || !parent.nextElementSibling) {\n",
       "        console.warn('Expected copy-paste icon is missing from the DOM structure');\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    const paramName = element.parentElement.nextElementSibling\n",
       "        .textContent.trim().split(' ')[0];\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
       "\n",
       "    element.setAttribute('title', fullParamName);\n",
       "});\n",
       "\n",
       "/**\n",
       " * Copy the list of feature names formatted as a Python list.\n",
       " *\n",
       " * @param {HTMLElement} element - The copy button inside a `.features` block; its siblings\n",
       " *   contain a `details` element and a table containing feature named.\n",
       " * @returns {boolean} Always returns `false` so callers can prevent the default click behavior.\n",
       " */\n",
       "function copyFeatureNamesToClipboard(element) {\n",
       "    var detailsElem = element.closest('.features').querySelector('details');\n",
       "    var wasOpen = detailsElem.open;\n",
       "    detailsElem.open = true;\n",
       "    var content = element.closest('.features').querySelector('tbody')\n",
       "                  .innerText.trim();\n",
       "    if (!wasOpen) detailsElem.open = false;\n",
       "    const rows = content.split('\\n').map(row => `    \"${row}\"`);\n",
       "    const formattedText = `[\\n${rows.join(',\\n')},\\n]`;\n",
       "    const originalHTML = element.innerHTML.replace('âœ”', '');\n",
       "    const originalStyle = element.style;\n",
       "    const copyMark = document.createElement('span');\n",
       "    copyMark.innerHTML = 'âœ”';\n",
       "    copyMark.style.color = 'blue';\n",
       "    copyMark.style.fontSize = '1em';\n",
       "\n",
       "    navigator.clipboard.writeText(formattedText)\n",
       "        .then(() => {\n",
       "            element.style.display = 'none';\n",
       "            element.parentElement.appendChild(copyMark);\n",
       "\n",
       "            setTimeout(() => {\n",
       "                copyMark.remove();\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 1000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'orange';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 1000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "/**\n",
       " * Adapted from Skrub\n",
       " * https://github.com/skrub-data/skrub/blob/403466d1d5d4dc76a7ef569b3f8228db59a31dc3/skrub/_reporting/_data/templates/report.js#L789\n",
       " * @returns \"light\" or \"dark\"\n",
       " */\n",
       "function detectTheme(element) {\n",
       "    const body = document.querySelector('body');\n",
       "\n",
       "    // Check VSCode theme\n",
       "    const themeKindAttr = body.getAttribute('data-vscode-theme-kind');\n",
       "    const themeNameAttr = body.getAttribute('data-vscode-theme-name');\n",
       "\n",
       "    if (themeKindAttr && themeNameAttr) {\n",
       "        const themeKind = themeKindAttr.toLowerCase();\n",
       "        const themeName = themeNameAttr.toLowerCase();\n",
       "\n",
       "        if (themeKind.includes(\"dark\") || themeName.includes(\"dark\")) {\n",
       "            return \"dark\";\n",
       "        }\n",
       "        if (themeKind.includes(\"light\") || themeName.includes(\"light\")) {\n",
       "            return \"light\";\n",
       "        }\n",
       "    }\n",
       "\n",
       "    // Check Jupyter theme\n",
       "    if (body.getAttribute('data-jp-theme-light') === 'false') {\n",
       "        return 'dark';\n",
       "    } else if (body.getAttribute('data-jp-theme-light') === 'true') {\n",
       "        return 'light';\n",
       "    }\n",
       "\n",
       "    // Guess based on a parent element's color\n",
       "    const color = window.getComputedStyle(element.parentNode, null).getPropertyValue('color');\n",
       "    const match = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i);\n",
       "    if (match) {\n",
       "        const [r, g, b] = [\n",
       "            parseFloat(match[1]),\n",
       "            parseFloat(match[2]),\n",
       "            parseFloat(match[3])\n",
       "        ];\n",
       "\n",
       "        // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness\n",
       "        const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n",
       "\n",
       "        if (luma > 180) {\n",
       "            // If the text is very bright we have a dark theme\n",
       "            return 'dark';\n",
       "        }\n",
       "        if (luma < 75) {\n",
       "            // If the text is very dark we have a light theme\n",
       "            return 'light';\n",
       "        }\n",
       "        // Otherwise fall back to the next heuristic.\n",
       "    }\n",
       "\n",
       "    // Fallback to system preference\n",
       "    return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n",
       "}\n",
       "\n",
       "\n",
       "function forceTheme(elementId) {\n",
       "    const estimatorElement = document.querySelector(`#${elementId}`);\n",
       "    if (estimatorElement === null) {\n",
       "        console.error(`Element with id ${elementId} not found.`);\n",
       "    } else {\n",
       "        const theme = detectTheme(estimatorElement);\n",
       "        estimatorElement.classList.add(theme);\n",
       "    }\n",
       "}\n",
       "\n",
       "forceTheme('sk-container-id-2');</script></body>"
      ],
      "text/plain": [
       "LinearDiscriminantAnalysis()"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Train the LDA classifier\n",
    "lda = LinearDiscriminantAnalysis()\n",
    "lda.fit(X_train_scaled, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "ebd5a631",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 1.0\n",
      "                 precision    recall  f1-score   support\n",
      "\n",
      "    Iris-setosa       1.00      1.00      1.00        10\n",
      "Iris-versicolor       1.00      1.00      1.00        10\n",
      " Iris-virginica       1.00      1.00      1.00        10\n",
      "\n",
      "       accuracy                           1.00        30\n",
      "      macro avg       1.00      1.00      1.00        30\n",
      "   weighted avg       1.00      1.00      1.00        30\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Predict species and display model accuracy\n",
    "y_pred = lda.predict(X_test_scaled)\n",
    "print(\"Accuracy:\", accuracy_score(y_test, y_pred))\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "5ad1370c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Predicted species: Iris-setosa\n"
     ]
    }
   ],
   "source": [
    "# Predict the species of a new flower using measurements in centimeters\n",
    "new_flower = pd.DataFrame(\n",
    "    [[5.1, 3.5, 1.4, 0.2]],\n",
    "    columns=[\"SepalLengthCm\", \"SepalWidthCm\", \"PetalLengthCm\", \"PetalWidthCm\"]\n",
    ")\n",
    "new_flower_scaled = scaler.transform(new_flower)\n",
    "print(\"Predicted species:\", lda.predict(new_flower_scaled)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a3649d7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAIiCAYAAAA0HyvDAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAi01JREFUeJzt3Ql4E+XWB/DTQqEUKLKVsskuiGyyCQoIyo6IuF6QxQ03XBDvvUWvCrhSr+Iu7tcVN1ABvwqCgqCARRYFAVFANikFRAqUpbT5nv9bpibpJJkkk2Rm8v89T0gzM0km0zScvHPecxJcLpdLiIiIiIhsJjHWO0BEREREFAoGskRERERkSwxkiYiIiMiWGMgSERERkS0xkCUiIiIiW2IgS0RERES2xECWiIiIiGyJgSwRERER2RIDWSIim+ratatMmjQp1rtBRBQzDGSJyBIee+wxadGihezZsyfgNriceeaZ0r59e7nwwgvljjvukKysLCksLPT7HBdddJG670cffSRW1K9fPxk6dKjh7X/99VfJyckx7bm1Y9uyZUvp3LmzDB48WB544AFZu3ZtWI/doUMHefjhh8UqrLY/RBS6smHcl4jINAhgf/nlFykoKAi4zaJFi6RWrVpy4sQJ2b17tyxcuFCGDx8ujRo1ko8//liaNm1a6r4rV66U//u//5PKlSvL888/L1deeaXlfnubN2+WSpUqGd5++fLl6vWY9dxJSUny6aefqttHjhyRLVu2yCeffCJt27aVkSNHyiuvvCLly5cP+rHxOzMr4DaD1faHiELHQJaIbKdJkyZSr1499XObNm3UaOJNN92kTrX37dtXfv75Z6lQoYLHfV599VVJT0+XRx55RK6//nrZuHGjGn20M72APRwIUt2PCUYur7jiCjVKfNVVV0m5cuXUcSQisgqmFhCRI2A09qGHHpKtW7fK//73P491+fn58v7778sNN9wgV199tdSoUUNee+21oB4f6QgXX3yxGp3s0aOHOjV96NAhj21atWoljz/+uNqHUaNGSbt27WTQoEFqBDlU2mMijWD06NHqMbXXp5cj+8MPP6jtunTpIuedd56MHTtWjbaGA6PXeO1vvPGGem0aLNPSEbCfSPPAvh47dkyt/+uvv9Q6HP/33nuvZNvrrrvO8GME+7q+/fZbGTFihEo76dSpk4wbN07++OMPw/tD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cZcjS0REROYpLCxU+ZN2hv0vW7asHDt2TL0eivwxQp5tmTJlwn4cBrJEREQUUp3PnJwc+euvvxzxWtLT01VFI9aYj94xOu2009RjhvN4DGSJiIgoaFoQm5aWpmaz2zkARLOkw4cPS6VKlfwW349nRSYeIwTF+fn5kpubq27Xrl075MdiIEtERERBwallLYitXr26I4K0EydOSHJyMgPZKB0jlEAFBLN4H4WaZsCvHURERBQULScWI7FEodLeP+HkWDOQJSIiopDYOZ2AnPH+YSBLRERERLbEQJaIiIjIzQ8//KBGC51QkcHpGMgSERFRXPjtt99UgPrtt9+KlS1fvlztJ6oEkH+sWkBEREQxUVjkkuytf0ruoWOSVjlZOjeqJmUSY59327FjR1UiiqyPI7JERN6KCkW2LhFZO6P4GreJyFRz1+2Wbplfy7BXl8udH6xR17iN5dGyaNEiNfL59ttvy9lnny3lypVTo7XeqQVHjhyR66+/XmrVqqWK+A8aNEh++eUXn48baPuNGzfKRRddJJUrV5aaNWvKFVdcITt37iwZNe7atav6GeuxHyNGjFC3sW9YhxJYeOw77rhDddoy8rx4fDwWLnidzZs3l2eeeUbsjoEsEZG79bNFnm4l8tZFIjOvL77GbSwnIlMgWL3l3VWy++DfQRjkHDymlkczmIWXX35ZPvroIzl+/Lh069at1PpHHnlEVq9eLcuWLVMB4Z133ilvvvmmz8fztz0aSfTo0UPOPfdc+f3332X9+vWSmpoqgwcPlpMnT0rTpk3V/eDQoUNqZPjdd9+V3bt3S//+/aVnz57yxx9/SFZWlnz++edy9913G3reevXqqcfCBY87bdo0efjhh+Xjjz8WO2MgS0SkQbD60SiRvD88j0ne7uLlDGaJTEknmDxnveiduNeWYT22i5ann35amjVr5rMcFAJOpBs0btxYdbbq27evPPbYYz4fz9/2CCBbtmwp9957r2omgRHZF154QX7++WdZuXKlz8fENghGH330UalWrZp06NBBHn/8cXnllVdKRo6N7mf58uXlggsuUKO3DGSJiJwA6QNzM9z+K3V3atncCUwzIAoTcmK9R2K9/9qwHttFy1lnneV3/bXXXivTp09Xp+qff/55+fXXX0PeHmkLixcvlrJly6puVuiShS5XaAqwZcsWn4+JkdvOnTt7BNtd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t++RwkCWiIiIogultVBiC9UL3Cd+YaQWQWyESm8hEHTPS0VQhtvaqfqS3UhNLZW/itFX94YFRqDCAC6+oK4rLnpat27t835IKdDLez3zzDN1t8dILC6+IDDHRY/2mN7HyN99/O272RjIEhERUfQhWEWJrRh29iL7YyBLREREsYGgNUoltsiZONmLiIiIiGyJI7JEUVJYVOjRDax9WnvVWIGIiIhCw0CWKAoWbFsgU7KnyJ78vwt810qpJRM6T1Atb4mIiCh4TC0gikIQO37ReI8gFnLzc9VyrCciIqLgMZAlinA6AUZiXR51EotpyzKzM9V2REREFBwGskQRhJxY75FY72A2Jz9HbUdERETBYSBLFEGY2GXmdkREFHm5ubny9NNPy/HjxyPy+IsWLVJdv8zw7rvvyurVqyN+H6tiIEsUQahOYOZ2REQUuoMHD6oA9Y8/3LqJ6di+fbvcddddcvTo0Ygc7hkzZsjrr79uymNNmTJFvvnmm4jfx6oYyBJFEEpsoTpBgtY/3AuWp6ekq+2IiCiy9u7dqwLULVu2+N0ObWPvvPNOKV++fET2o1evXjJ48GBTHmvkyJFy9tlnR/w+VsXyW0QRhDqxKLGF6gQIWt0nfWnBbUbnDNaTJaK4FOv62jt37lSjo7fccot88cUXsm/fPrnssstUANuwYUNJTPx7vG/Pnj3y9ddfq3SDLl26SIsWLXQf8+eff5YlS5bIzTff7LEcp/J/+OEHGTNmjFSvXl3KlStXsu7LL78Ul8slbdq0kfnz56ufR48erdZt2rRJpSIguO7Ro4fatkmTJtKxY0e1vm7dupKamlryWG+88Yacc845UrZsWfn++++lQoUKMmDAAKlUqVLJNt73gcOHD6vnxjHA62vdunXJuk8++US2bdumXvvpp58u3bp1U9dWYLsRWQz3f/zxx/Lpp5/Krl27Yr07RAGhTuzUnlMlLSXNYzlGarGcdWSJKB6h9GC/mf3kunnXScaSDHWN29EsSfjbb7+pEdqePXuqU/2//vqrCta8Uwu+++47FTy+//778u2338qVV14pTzzxhO5jJicnq8B4zZo1HssnTZqkAlK91ILp06erEeDu3burYBkBNnz44YfSqlUrlU+L50bwevfdd8uCBQt8pgk8+OCDct1118nll1+uAmrcxugrAlVf91m2bJl6fY888ogsX75c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6CMpKipSQRAC0LPPPluSkpJK1rs/1++//y6bNm2SDh066AbcMHbsWBkxYkTJ7RUrVsjQoUNl69at8umnn+q+HigoKJDly5er/cXrwOtxd+jQIbUeI78Yua5cubLf/atdu7bPY5aTk6OOGXqia8fsp59+Uvt41llnSdOmTcM+9sEcV73HweucNWuW+nnu3Lmybt06NTJ84YUXljrmGPFGP/l58+bJbbfdpvt7ISIHcBERWVBBQYELH1HvvPOO7vq9e/eq9atXr1a3t27dqm4PHjzY1bJlS9egQYNclSpVct1+++0e95sxY4aratWqrh49erj69+/vqlKliuv555/32Gb48OGuq666ynXZZZe5mjVrph5v+/btJeu157roootczZs3d11xxRWuJUuWBPUaZs2apdZ9//33uq9nx44drsaNG7tatWrluvjii9XPkydPLrn/xx9/rPa9Xbt2rr59+6r9XL58ud/983XMzj//fFfr1q1dAwYMcCUlJbnGjx/vGjZsmKtt27bqGJUvX9711ltvhX3sjR5XX49TWFjoGjJkiNoG+4XHmjhxosufV199Ve0/ETkTA1kiclQge91117mKiorUskWLFrkSEhJc27ZtU7e3bNniqlixolquWbFihSs5Odm1YcMG3edB8ITA65prrilZpj3XlVdeqdaH8hqOHz+ugsbHH39c9/VMmjTJde6553rsx2effaZ+/vXXX13lypVzPf300yXrc3JyXMuWLfO7f76O2Q033FByzKZNm6aW3XbbbSX3++9//+uqX79+WMc+mOPq73F2796ttlm7dq3LCAayRM7G1AIicpSbbrpJTayCbt26SWJiojq1jlPm77//vlSvXl327t0rH3/8sTpVDdWqVVOnoVu0aFHyOOvXr5ctW7bI4cOH1enrxYsX66YM4PFDUa5cOfW82Bc9yJ3dv3+/yu+sW7euep4hQ4aodXgd6enpcscdd5Rsj/QI7xQJo/t34403lhwzpChoyzRY9q9//UuOHj1aktMb7LEP5rgaeRwiImAgS0SOguBQg1zMsmXLqpnugHxRlI6aMWOGx326d+8uNWrUUD8jWBs8eLCakd+pUyeVB7pjxw6Vs+kNOafhQDBXsWJF3XW33HKLrFmzRpo1ayYtW7aUPn36qFxPBLXbt29XOatasOeL0f1zn7SF/FdfyzBZzV8g6+/YB3Nc/T0OEZE7BrJEFDdSU1NVgIYaqL6gSsKvv/6qKgtUqlRJLXv++edl0qRJpbYNFEj6g4lUmNzkq3wVJm5Nnz5dbfPdd9/Jc889Jx07dlRVD0477TQ1WhtIOPtntmCOKxGRUWyIQERxo3///mom/DfffFNq9j8ugNn7GPXUgi2YOXOmqfuBkc2MjAxp2LChqoeqBykFgBHbvn37qlJS2DcEgriNQBgjtu58pSlYgVnHVbs/R2iJCDgiS0SWhvJSOLXsDnmT3g0FjOjdu7fK/UR5p9tvv12aNGkiv/zyiyqB9eWXX6pRUKx76KGHZNy4capxAdYhYMQp7nBfA9IaNm/erHJcUYZq9uzZKldWz7Rp01SJsIEDB6oR2Pfee0/atGkjZ5xxhko1GDlypCo7deedd0paWppqEjBq1CgZPny4WJFZxxWBbPPmzSUzM1OVMENesF75LRw7BP0odYZjrY3CI0UDedJE5AwckSUiS8IEHxTdRxcpBGnuF4xWehflx8glbmu1VDVXXnmlGgnUvPzyyypHFvmpS5cuVYEQgp5GjRqp9e3bt1cTv06ePKlO6Q8aNEg++eQTufTSS0sew9dz+XsNqH+6cOFCVRsWxfoxMty6deuSbb1fz8MPPyz333+/7N69WwXCCNqwX1pQ/+abb8prr70mf/zxh6qnevfdd5cEsb72z8gxQ/oFlqWkpHjkrGKZFnSHcuzDOa7ev8PPP/9cGjduLFlZWeox9SCAxXsFXb3wHNp758CBA35/Z0RkL2xRS0RERES2xBFZIiIiIrIlBrJEREREZEsMZImIiIjIlhjIEhEREZEtMZAlIiIiIltiIEtEREREtsRAloiIiIhsiYEsEREREdkSA1kiIiIisiUGskRERERkSwxkiYiIiMiWGMgSERERkdjR/wNm4gvaPVYMdQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the flowers using the two LDA components\n",
    "X_scaled = scaler.transform(X)\n",
    "X_lda = lda.transform(X_scaled)\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "for species in sorted(y.unique()):\n",
    "    rows = y == species\n",
    "    plt.scatter(X_lda[rows, 0], X_lda[rows, 1], label=species)\n",
    "\n",
    "plt.xlabel(\"Linear Discriminant 1\")\n",
    "plt.ylabel(\"Linear Discriminant 2\")\n",
    "plt.title(\"LDA on Iris Dataset\")\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  }
 ],
 "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",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
