{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5ade661c",
   "metadata": {},
   "source": [
    "# Criando um LDA para Iris Flower"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6c701269",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c6d4b4ea",
   "metadata": {},
   "source": [
    "## Importando dados do excel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "581724da",
   "metadata": {},
   "outputs": [],
   "source": [
    "df=pd.read_excel('IrisData.xls',sheet_name='Data')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "537b75b2",
   "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>Species_No</th>\n",
       "      <th>Petal_width</th>\n",
       "      <th>Petal_length</th>\n",
       "      <th>Sepal_width</th>\n",
       "      <th>Sepal_length</th>\n",
       "      <th>Species_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.4</td>\n",
       "      <td>3.5</td>\n",
       "      <td>5.1</td>\n",
       "      <td>Setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.4</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.9</td>\n",
       "      <td>Setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>3.2</td>\n",
       "      <td>4.7</td>\n",
       "      <td>Setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.5</td>\n",
       "      <td>3.1</td>\n",
       "      <td>4.6</td>\n",
       "      <td>Setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.4</td>\n",
       "      <td>3.6</td>\n",
       "      <td>5.0</td>\n",
       "      <td>Setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>145</th>\n",
       "      <td>3</td>\n",
       "      <td>2.3</td>\n",
       "      <td>5.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>6.7</td>\n",
       "      <td>Verginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146</th>\n",
       "      <td>3</td>\n",
       "      <td>1.9</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>6.3</td>\n",
       "      <td>Verginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "      <td>5.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>6.5</td>\n",
       "      <td>Verginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>3</td>\n",
       "      <td>2.3</td>\n",
       "      <td>5.4</td>\n",
       "      <td>3.4</td>\n",
       "      <td>6.2</td>\n",
       "      <td>Verginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>3</td>\n",
       "      <td>1.8</td>\n",
       "      <td>5.1</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.9</td>\n",
       "      <td>Verginica</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>150 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Species_No  Petal_width  Petal_length  Sepal_width  Sepal_length  \\\n",
       "0             1          0.2           1.4          3.5           5.1   \n",
       "1             1          0.2           1.4          3.0           4.9   \n",
       "2             1          0.2           1.3          3.2           4.7   \n",
       "3             1          0.2           1.5          3.1           4.6   \n",
       "4             1          0.2           1.4          3.6           5.0   \n",
       "..          ...          ...           ...          ...           ...   \n",
       "145           3          2.3           5.2          3.0           6.7   \n",
       "146           3          1.9           5.0          2.5           6.3   \n",
       "147           3          2.0           5.2          3.0           6.5   \n",
       "148           3          2.3           5.4          3.4           6.2   \n",
       "149           3          1.8           5.1          3.0           5.9   \n",
       "\n",
       "    Species_name  \n",
       "0         Setosa  \n",
       "1         Setosa  \n",
       "2         Setosa  \n",
       "3         Setosa  \n",
       "4         Setosa  \n",
       "..           ...  \n",
       "145    Verginica  \n",
       "146    Verginica  \n",
       "147    Verginica  \n",
       "148    Verginica  \n",
       "149    Verginica  \n",
       "\n",
       "[150 rows x 6 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23eed81c",
   "metadata": {},
   "source": [
    "# Usando seaborn para plotar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "33b3eb95",
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e7ce174",
   "metadata": {},
   "source": [
    "### Usando pairplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8c42719c",
   "metadata": {},
   "outputs": [],
   "source": [
    "fig=sns.pairplot(df[df.columns[1:]],hue='Species_name') "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a795a61",
   "metadata": {},
   "source": [
    "### Usando PairGrid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "74d72fe6",
   "metadata": {},
   "outputs": [],
   "source": [
    "#criando os eixos\n",
    "pair_grid = sns.PairGrid(df[df.columns[1:-1]]) \n",
    "\n",
    "#cria uma linha de regressão e scatter, na parte de cima (map_upper)\n",
    "pair_grid = pair_grid.map_upper(sns.regplot)   \n",
    "\n",
    "#mostra as curvas de contorno na parte de baixo (map_lower)\n",
    "pair_grid = pair_grid.map_lower(sns.kdeplot)   \n",
    "pair_grid = pair_grid.map_diag(sns.histplot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a9bc91e3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "7c5cea50",
   "metadata": {},
   "source": [
    "### Extraindo as classes ou grupos\n",
    "#### Coluna Species_No, primeira coluna"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9f880ab4",
   "metadata": {},
   "outputs": [],
   "source": [
    "classe=np.array(df[df.columns[0]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fa4ba9e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "classe"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05e58358",
   "metadata": {},
   "source": [
    "### Transformando os dados do dataframe em um tabela \n",
    "#### A coluna Species_name não interessa"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8d198993",
   "metadata": {},
   "outputs": [],
   "source": [
    "Xtab=np.array(df[df.columns[1:-1]],dtype=float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "79174658",
   "metadata": {},
   "outputs": [],
   "source": [
    "Xtab"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c9880e9",
   "metadata": {},
   "source": [
    "### Dimensão de Xtab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d7874fb4",
   "metadata": {},
   "outputs": [],
   "source": [
    "[n,d]=Xtab.shape\n",
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0116edf",
   "metadata": {},
   "source": [
    "## Notação algébrica de Xtab (X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bfa9b22d",
   "metadata": {},
   "outputs": [],
   "source": [
    "X=Xtab.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cf028fa5",
   "metadata": {},
   "outputs": [],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "88576ecc",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "f26f8ced",
   "metadata": {},
   "source": [
    "### Médias de cada classe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b461de1d",
   "metadata": {},
   "outputs": [],
   "source": [
    "uClasse=np.array(df[df.columns[:-1]].groupby('Species_No').mean())\n",
    "uClasse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "40f69c0b",
   "metadata": {},
   "outputs": [],
   "source": [
    "nomeEspecie=np.array(df[df.columns[1:]].groupby('Species_name').mean().index)\n",
    "nomeEspecie"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "184457ef",
   "metadata": {},
   "source": [
    "### Numero de elementos por classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "730b2eed",
   "metadata": {},
   "outputs": [],
   "source": [
    "nEl=df.groupby('Species_No')['Species_No'].count()\n",
    "numElClasses=np.array(nEl)\n",
    "classes=np.array(nEl.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "33c69156",
   "metadata": {},
   "outputs": [],
   "source": [
    "numElClasses"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bdb508f",
   "metadata": {},
   "source": [
    "### Identificação das classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81049901",
   "metadata": {},
   "outputs": [],
   "source": [
    "classes"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f8005b5",
   "metadata": {},
   "source": [
    "### Número de classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "29824643",
   "metadata": {},
   "outputs": [],
   "source": [
    "nClasse=classes.size\n",
    "nClasse"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1414e64c",
   "metadata": {},
   "source": [
    "### Média geral, em notação algébrica"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8e070f96",
   "metadata": {},
   "outputs": [],
   "source": [
    "u=(np.array(df[df.columns[1:-1]].mean(),dtype=float)).reshape(d,1)\n",
    "u"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b1448725",
   "metadata": {},
   "source": [
    "### Caso queira repetir cada média em n colunas\n",
    "#### Veja em Dicas.pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3c05e3b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "uCol=u@np.ones((1,n))\n",
    "uCol"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c06a959f",
   "metadata": {},
   "source": [
    "### Daí podemos subtrair as médias de X com X-uCol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "247c5326",
   "metadata": {},
   "outputs": [],
   "source": [
    "X-uCol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7816e5f9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2fcdd081",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2924c5d1",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c83d60f6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "900dc90e",
   "metadata": {},
   "source": [
    "## Maximizando a dispersão entre classes\n",
    "### Soma dos desvios da média geral com as médias das classes $S_{inter}$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7dffa1a",
   "metadata": {},
   "source": [
    "$$S_{inter}=\\sum\\limits_{i=1}^{nC} n_{C_i} (u_{C_i}-u)(u_{C_i}-u)^T$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39fa3f0f",
   "metadata": {},
   "outputs": [],
   "source": [
    "#dispInterClasses é uma matriz quadrada\n",
    "dispInterClasses=np.zeros((d,d),dtype=float)\n",
    "\n",
    "for c,_ in enumerate(classes):\n",
    "    #Coloca a média da classe c como vetor algébrico\n",
    "    #Obs.: Se convertessemos em notação algébrica antes \n",
    "    #teríamos que fazer reshape do mesmo modo, pois o \n",
    "    #python forneceria um vetor linha\n",
    "    uc=uClasse[c].reshape(d,1)\n",
    "    dispInterClasses=dispInterClasses+numElClasses[c]*((u-uc)@(u-uc).T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7733a0e1",
   "metadata": {},
   "outputs": [],
   "source": [
    "dispInterClasses"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "796f81c8",
   "metadata": {},
   "source": [
    "## Maximizando a dispersão entre classes\n",
    "### Soma dos desvios da média geral com as médias das classes $S_{intra}$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38df0cbc",
   "metadata": {},
   "source": [
    "$$S_{i}=\\sum\\limits_{k \\in C_i} (x_k - u_{C_i})(x_k - u_{C_i})^T$$\n",
    "$$S_{intra} = \\sum\\limits_{i=1}^{nC} S_i$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "044d0337",
   "metadata": {},
   "outputs": [],
   "source": [
    "dispIntraClasses=np.zeros((d,d))\n",
    "for i,c in enumerate(classes):\n",
    "    #Xc em notação algébrica\n",
    "    Xc=np.array(df[df['Species_No']==c])[:,1:-1].T\n",
    "    #A linha acima retorna um array do tipo tobject, devido ao valor string de Species_name\n",
    "    #Dando um cast para float em Xc\n",
    "    Xc=np.array(Xc, dtype=float)\n",
    "    #uc em notação algébrica    \n",
    "    uc=uClasse[i].reshape(d,1)    \n",
    "    dispIntraClasses=dispIntraClasses+(Xc-uc)@(Xc-uc).T\n",
    "dispIntraClasses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b1b8ba1e",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "9a3690b9",
   "metadata": {},
   "source": [
    "## Calcular os autovetores ordenados por ordem de autovalores da matriz $$S_{intra}^{-1}S_{inter}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cedfe35c",
   "metadata": {},
   "outputs": [],
   "source": [
    "M=np.linalg.inv(dispIntraClasses)@dispInterClasses\n",
    "M"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f8d3dda",
   "metadata": {},
   "outputs": [],
   "source": [
    "[autoVal,V]=np.linalg.eig(M)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58d5897a",
   "metadata": {},
   "source": [
    "#### Mostrando os autovalores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e3d0aeb1",
   "metadata": {},
   "outputs": [],
   "source": [
    "autoVal"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64937f09",
   "metadata": {},
   "source": [
    "#### Mostrando os autovetores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e19c76fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "V"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7266ad5",
   "metadata": {},
   "source": [
    "#### Encontrando os índices em ordem decrescente ([::-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b993191f",
   "metadata": {},
   "outputs": [],
   "source": [
    "i=np.argsort(autoVal)[::-1]\n",
    "i"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f700222",
   "metadata": {},
   "source": [
    "#### Mostrando os autovalores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7a2ccef3",
   "metadata": {},
   "outputs": [],
   "source": [
    "autoVal=autoVal[i]\n",
    "print(autoVal)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b304463",
   "metadata": {},
   "source": [
    "#### Mostrando os autovetores ordenados por autovalores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b0ca511c",
   "metadata": {},
   "outputs": [],
   "source": [
    "V[:,i]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf625442",
   "metadata": {},
   "source": [
    "#### Porcentagem explicativa"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad7960cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "pe=np.cumsum(autoVal)/np.sum(autoVal)\n",
    "print(pe)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d8f506a0",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "e757b2b4",
   "metadata": {},
   "source": [
    "#### Autovetores reduzidos a dois eixos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b19e1a0e",
   "metadata": {},
   "outputs": [],
   "source": [
    "O = V[:,:2]\n",
    "O"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca1ef1e6",
   "metadata": {},
   "source": [
    "### Encontrando a nova tabela transformada (Ytab)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0a2d01a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "Ytab=Xtab@O\n",
    "Ytab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dccc2208",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.figure(figsize=(5,5))\n",
    "plt.plot(Ytab[0:50,0],Ytab[0:50,1],'or',Ytab[50:100,0],Ytab[50:100,1],'og',Ytab[100:150,0],Ytab[100:150,1],'ob')\n",
    "\n",
    "plt.title(\"Rotação dos eixos principais de X. Ou seja, gerar um Y=XO\") #título do gráfico\n",
    "plt.xlabel('Eixo 1') #nome para eixo x\n",
    "plt.ylabel('Eixo 2') #nome para eixo y\n",
    "plt.legend(['Setosa','Versicolor', 'Verginica'],loc='best') #coloca legendas no gráfico\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea9879aa",
   "metadata": {},
   "source": [
    "## Classificando uma medida\n",
    "### Seja classificar as seguintes medidas\n",
    "$$x=\\begin{bmatrix}\n",
    "1.2\\\\\n",
    "3.7\\\\\n",
    "2.3\\\\\n",
    "4.5\n",
    "\\end{bmatrix}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b13c7f95",
   "metadata": {},
   "outputs": [],
   "source": [
    "#x em notação algébrica\n",
    "x=np.array([1.2, 3.7, 2.3, 4.5]).reshape(d,1)\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfd7dacf",
   "metadata": {},
   "source": [
    "### Vamos calcular a função discriminante de $x$, que denotamos por $y_x$\n",
    "$$y_x = O^Tx$$\n",
    "### Vemos que os componentes de $O^T$ serão os coeficientes multiplicadores de $x$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8e1b61a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "yx=(O.T)@x\n",
    "yx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fddbe969",
   "metadata": {},
   "source": [
    "### Calculando as funções discriminantes para as médias das classes $y_{u_c}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e039f724",
   "metadata": {},
   "outputs": [],
   "source": [
    "yuc=O.T@uClasse.T #uClasse não estava em notação algébrica\n",
    "yuc"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "683310ad",
   "metadata": {},
   "source": [
    "### Calculando o desvio quadrado de cada eixo de $y$ a $y_{u_c}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b03a8578",
   "metadata": {},
   "outputs": [],
   "source": [
    "desv2=(yx-yuc)**2\n",
    "desv2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05bb3b71",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a79f7403",
   "metadata": {},
   "source": [
    "### Calculando a distância quadrada de $y_x$ ao $y_{u_c}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0505d449",
   "metadata": {},
   "outputs": [],
   "source": [
    "dist=np.sum(desv2,0)\n",
    "dist"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7cf178e",
   "metadata": {},
   "source": [
    "### $x$ pertencerá a classe de menor distância entre $y_x$ e $y_{u_c}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a238cfe6",
   "metadata": {},
   "outputs": [],
   "source": [
    "i=np.argmin(dist)\n",
    "i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e80e58de",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(f'Classe vencedora: {classes[i]}, nome: {nomeEspecie[i]}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "514a0844",
   "metadata": {},
   "outputs": [],
   "source": [
    "#x=np.array([0.2, 1.4, 3.6, 5. ]).reshape(d,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8c70d0be",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "5b764680",
   "metadata": {},
   "source": [
    "## Como seria uma função de classificação?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "12e986b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Todos os parâmetros em notação algébrica\n",
    "def classificaLDA(x,O,uClasse):\n",
    "    #calcula yx=discLDA(x)\n",
    "    #calcula os yu=discLDA(uClasse)\n",
    "    #calcula as d=distancia(yx,yu) \n",
    "    #retorna o argmin de d\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "868bc0e1",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2890023f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "be150f8e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
