{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Análise Multivariada e Aprendizado Não-Supervisionado\n", "\n", "por Cibele Russo.\n", "\n", "ICMC USP São Carlos.\n", "\n", "\n", "## Aula 11d: Análise discriminante linear - Aplicação em Python\n", "\n", "Fonte e links recomendados: \n", "- https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html\n", "\n", "- https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html\n", "\n", "- https://www.kaggle.com/harshamodali/linear-discriminant-analysis-on-iris-dataset\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#!pip install sklearn" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "\n", "X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])\n", "y = np.array([1, 1, 1, 2, 2, 2])\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearDiscriminantAnalysis()" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf = LinearDiscriminantAnalysis()\n", "clf.fit(X, y)\n", "LinearDiscriminantAnalysis()\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 1, 2, 2, 2])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf.predict(X)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1]\n" ] } ], "source": [ "print(clf.predict([[-0.8, -1]]))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2]\n" ] } ], "source": [ "print(clf.predict([[-1, 2]]))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Dados iris, ver também a Aula 1c, disponível no link abaixo:\n", "# https://www.youtube.com/watch?v=R44jbSmpjgg&list=PLt7qVSwRVn5bg14OLl6dHTNnXVrEM6UiS&index=3\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn import datasets\n", "from sklearn.decomposition import PCA\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "\n", "iris = datasets.load_iris()\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'data': array([[5.1, 3.5, 1.4, 0.2],\n", " [4.9, 3. , 1.4, 0.2],\n", " [4.7, 3.2, 1.3, 0.2],\n", " [4.6, 3.1, 1.5, 0.2],\n", " [5. , 3.6, 1.4, 0.2],\n", " [5.4, 3.9, 1.7, 0.4],\n", " [4.6, 3.4, 1.4, 0.3],\n", " [5. , 3.4, 1.5, 0.2],\n", " [4.4, 2.9, 1.4, 0.2],\n", " [4.9, 3.1, 1.5, 0.1],\n", " [5.4, 3.7, 1.5, 0.2],\n", " [4.8, 3.4, 1.6, 0.2],\n", " [4.8, 3. , 1.4, 0.1],\n", " [4.3, 3. , 1.1, 0.1],\n", " [5.8, 4. , 1.2, 0.2],\n", " [5.7, 4.4, 1.5, 0.4],\n", " [5.4, 3.9, 1.3, 0.4],\n", " [5.1, 3.5, 1.4, 0.3],\n", " [5.7, 3.8, 1.7, 0.3],\n", " [5.1, 3.8, 1.5, 0.3],\n", " [5.4, 3.4, 1.7, 0.2],\n", " [5.1, 3.7, 1.5, 0.4],\n", " [4.6, 3.6, 1. , 0.2],\n", " [5.1, 3.3, 1.7, 0.5],\n", " [4.8, 3.4, 1.9, 0.2],\n", " [5. , 3. , 1.6, 0.2],\n", " [5. , 3.4, 1.6, 0.4],\n", " [5.2, 3.5, 1.5, 0.2],\n", " [5.2, 3.4, 1.4, 0.2],\n", " [4.7, 3.2, 1.6, 0.2],\n", " [4.8, 3.1, 1.6, 0.2],\n", " [5.4, 3.4, 1.5, 0.4],\n", " [5.2, 4.1, 1.5, 0.1],\n", " [5.5, 4.2, 1.4, 0.2],\n", " [4.9, 3.1, 1.5, 0.2],\n", " [5. , 3.2, 1.2, 0.2],\n", " [5.5, 3.5, 1.3, 0.2],\n", " [4.9, 3.6, 1.4, 0.1],\n", " [4.4, 3. , 1.3, 0.2],\n", " [5.1, 3.4, 1.5, 0.2],\n", " [5. , 3.5, 1.3, 0.3],\n", " [4.5, 2.3, 1.3, 0.3],\n", " [4.4, 3.2, 1.3, 0.2],\n", " [5. , 3.5, 1.6, 0.6],\n", " [5.1, 3.8, 1.9, 0.4],\n", " [4.8, 3. , 1.4, 0.3],\n", " [5.1, 3.8, 1.6, 0.2],\n", " [4.6, 3.2, 1.4, 0.2],\n", " [5.3, 3.7, 1.5, 0.2],\n", " [5. , 3.3, 1.4, 0.2],\n", " [7. , 3.2, 4.7, 1.4],\n", " [6.4, 3.2, 4.5, 1.5],\n", " [6.9, 3.1, 4.9, 1.5],\n", " [5.5, 2.3, 4. , 1.3],\n", " [6.5, 2.8, 4.6, 1.5],\n", " [5.7, 2.8, 4.5, 1.3],\n", " [6.3, 3.3, 4.7, 1.6],\n", " [4.9, 2.4, 3.3, 1. ],\n", " [6.6, 2.9, 4.6, 1.3],\n", " [5.2, 2.7, 3.9, 1.4],\n", " [5. , 2. , 3.5, 1. ],\n", " [5.9, 3. , 4.2, 1.5],\n", " [6. , 2.2, 4. , 1. ],\n", " [6.1, 2.9, 4.7, 1.4],\n", " [5.6, 2.9, 3.6, 1.3],\n", " [6.7, 3.1, 4.4, 1.4],\n", " [5.6, 3. , 4.5, 1.5],\n", " [5.8, 2.7, 4.1, 1. ],\n", " [6.2, 2.2, 4.5, 1.5],\n", " [5.6, 2.5, 3.9, 1.1],\n", " [5.9, 3.2, 4.8, 1.8],\n", " [6.1, 2.8, 4. , 1.3],\n", " [6.3, 2.5, 4.9, 1.5],\n", " [6.1, 2.8, 4.7, 1.2],\n", " [6.4, 2.9, 4.3, 1.3],\n", " [6.6, 3. , 4.4, 1.4],\n", " [6.8, 2.8, 4.8, 1.4],\n", " [6.7, 3. , 5. , 1.7],\n", " [6. , 2.9, 4.5, 1.5],\n", " [5.7, 2.6, 3.5, 1. ],\n", " [5.5, 2.4, 3.8, 1.1],\n", " [5.5, 2.4, 3.7, 1. ],\n", " [5.8, 2.7, 3.9, 1.2],\n", " [6. , 2.7, 5.1, 1.6],\n", " [5.4, 3. , 4.5, 1.5],\n", " [6. , 3.4, 4.5, 1.6],\n", " [6.7, 3.1, 4.7, 1.5],\n", " [6.3, 2.3, 4.4, 1.3],\n", " [5.6, 3. , 4.1, 1.3],\n", " [5.5, 2.5, 4. , 1.3],\n", " [5.5, 2.6, 4.4, 1.2],\n", " [6.1, 3. , 4.6, 1.4],\n", " [5.8, 2.6, 4. , 1.2],\n", " [5. , 2.3, 3.3, 1. ],\n", " [5.6, 2.7, 4.2, 1.3],\n", " [5.7, 3. , 4.2, 1.2],\n", " [5.7, 2.9, 4.2, 1.3],\n", " [6.2, 2.9, 4.3, 1.3],\n", " [5.1, 2.5, 3. , 1.1],\n", " [5.7, 2.8, 4.1, 1.3],\n", " [6.3, 3.3, 6. , 2.5],\n", " [5.8, 2.7, 5.1, 1.9],\n", " [7.1, 3. , 5.9, 2.1],\n", " [6.3, 2.9, 5.6, 1.8],\n", " [6.5, 3. , 5.8, 2.2],\n", " [7.6, 3. , 6.6, 2.1],\n", " [4.9, 2.5, 4.5, 1.7],\n", " [7.3, 2.9, 6.3, 1.8],\n", " [6.7, 2.5, 5.8, 1.8],\n", " [7.2, 3.6, 6.1, 2.5],\n", " [6.5, 3.2, 5.1, 2. ],\n", " [6.4, 2.7, 5.3, 1.9],\n", " [6.8, 3. , 5.5, 2.1],\n", " [5.7, 2.5, 5. , 2. ],\n", " [5.8, 2.8, 5.1, 2.4],\n", " [6.4, 3.2, 5.3, 2.3],\n", " [6.5, 3. , 5.5, 1.8],\n", " [7.7, 3.8, 6.7, 2.2],\n", " [7.7, 2.6, 6.9, 2.3],\n", " [6. , 2.2, 5. , 1.5],\n", " [6.9, 3.2, 5.7, 2.3],\n", " [5.6, 2.8, 4.9, 2. ],\n", " [7.7, 2.8, 6.7, 2. ],\n", " [6.3, 2.7, 4.9, 1.8],\n", " [6.7, 3.3, 5.7, 2.1],\n", " [7.2, 3.2, 6. , 1.8],\n", " [6.2, 2.8, 4.8, 1.8],\n", " [6.1, 3. , 4.9, 1.8],\n", " [6.4, 2.8, 5.6, 2.1],\n", " [7.2, 3. , 5.8, 1.6],\n", " [7.4, 2.8, 6.1, 1.9],\n", " [7.9, 3.8, 6.4, 2. ],\n", " [6.4, 2.8, 5.6, 2.2],\n", " [6.3, 2.8, 5.1, 1.5],\n", " [6.1, 2.6, 5.6, 1.4],\n", " [7.7, 3. , 6.1, 2.3],\n", " [6.3, 3.4, 5.6, 2.4],\n", " [6.4, 3.1, 5.5, 1.8],\n", " [6. , 3. , 4.8, 1.8],\n", " [6.9, 3.1, 5.4, 2.1],\n", " [6.7, 3.1, 5.6, 2.4],\n", " [6.9, 3.1, 5.1, 2.3],\n", " [5.8, 2.7, 5.1, 1.9],\n", " [6.8, 3.2, 5.9, 2.3],\n", " [6.7, 3.3, 5.7, 2.5],\n", " [6.7, 3. , 5.2, 2.3],\n", " [6.3, 2.5, 5. , 1.9],\n", " [6.5, 3. , 5.2, 2. ],\n", " [6.2, 3.4, 5.4, 2.3],\n", " [5.9, 3. , 5.1, 1.8]]),\n", " 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),\n", " 'frame': None,\n", " 'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "colors = ['navy', 'turquoise', 'darkorange']\n", "lw = 2\n", "\n", "\n", "for color, i, target_name in zip(colors, [0, 1, 2], target_names):\n", " plt.scatter(X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=.8, lw=lw,\n", " label=target_name)\n", "plt.legend(loc='best', shadow=False, scatterpoints=1)\n", "plt.title('PCA of IRIS dataset')\n", "\n", "plt.figure()\n", "for color, i, target_name in zip(colors, [0, 1, 2], target_names):\n", " plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], alpha=.8, color=color,\n", " label=target_name)\n", "plt.legend(loc='best', shadow=False, scatterpoints=1)\n", "plt.title('LDA of IRIS dataset')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercício: Separe 80% da base para treino e 20% para teste, e utilize os discriminantes lineares para predizer a classificação das observações da base de teste. Verifique os percentuais de acerto.**" ] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }