{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# LinearDiscriminantAnalysis: Linear discriminant analysis for dimensionality reduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Implementation of Linear Discriminant Analysis for dimensionality reduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> from mlxtend.feature_extraction import LinearDiscriminantAnalysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Linear Discriminant Analysis (LDA) is most commonly used as dimensionality reduction technique in the pre-processing step for pattern-classification and machine learning applications.\n", "The goal is to project a dataset onto a lower-dimensional space with good class-separability in order avoid overfitting (\"curse of dimensionality\") and also reduce computational costs.\n", "\n", "Ronald A. Fisher formulated the *Linear Discriminant* in 1936 ([The Use of Multiple Measurements in Taxonomic Problems](http://onlinelibrary.wiley.com/doi/10.1111/j.1469-1809.1936.tb02137.x/abstract)), and it also has some practical uses as classifier. The original Linear discriminant was described for a 2-class problem, and it was then later generalized as \"multi-class Linear Discriminant Analysis\" or \"Multiple Discriminant Analysis\" by C. R. Rao in 1948 ([The utilization of multiple measurements in problems of biological classification](http://www.jstor.org/stable/2983775))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**The general LDA approach is very similar to a Principal Component Analysis, but in addition to finding the component axes that maximize the variance of our data (PCA), we are additionally interested in the axes that maximize the separation between multiple classes (LDA).**\n", "\n", "So, in a nutshell, often the goal of an LDA is to project a feature space (a dataset n-dimensional samples) onto a smaller subspace $k$ (where $k \\leq n-1$) while maintaining the class-discriminatory information. \n", "In general, dimensionality reduction does not only help reducing computational costs for a given classification task, but it can also be helpful to avoid overfitting by minimizing the error in parameter estimation (\"curse of dimensionality\")." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Summarizing the LDA approach in 5 steps\n", "\n", "\n", "Listed below are the 5 general steps for performing a linear discriminant analysis.\n", "\n", "1. Compute the $d$-dimensional mean vectors for the different classes from the dataset.\n", "2. Compute the scatter matrices (in-between-class and within-class scatter matrix).\n", "3. Compute the eigenvectors ($\\mathbf{e_1}, \\; \\mathbf{e_2}, \\; ..., \\; \\mathbf{e_d}$) and corresponding eigenvalues ($\\mathbf{\\lambda_1}, \\; \\mathbf{\\lambda_2}, \\; ..., \\; \\mathbf{\\lambda_d}$) for the scatter matrices.\n", "4. Sort the eigenvectors by decreasing eigenvalues and choose $k$ eigenvectors with the largest eigenvalues to form a $k \\times d$ dimensional matrix $\\mathbf{W}$ (where every column represents an eigenvector).\n", "5. Use this $k \\times d$ eigenvector matrix to transform the samples onto the new subspace. This can be summarized by the mathematical equation: $\\mathbf{Y} = \\mathbf{X} \\times \\mathbf{W}$ (where $\\mathbf{X}$ is a $n \\times d$-dimensional matrix representing the $n$ samples, and $\\mathbf{y}$ are the transformed $n \\times k$-dimensional samples in the new subspace)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n", "\n", "- Fisher, Ronald A. \"[The use of multiple measurements in taxonomic problems.](http://onlinelibrary.wiley.com/doi/10.1111/j.1469-1809.1936.tb02137.x/abstract)\" Annals of eugenics 7.2 (1936): 179-188.\n", "- Rao, C. Radhakrishna. \"[The utilization of multiple measurements in problems of biological classification.](http://www.jstor.org/stable/2983775)\" Journal of the Royal Statistical Society. Series B (Methodological) 10.2 (1948): 159-203." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 1 - LDA on Iris" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from mlxtend.data import iris_data\n", "from mlxtend.preprocessing import standardize\n", "from mlxtend.feature_extraction import LinearDiscriminantAnalysis\n", "\n", "X, y = iris_data()\n", "X = standardize(X)\n", "\n", "lda = LinearDiscriminantAnalysis(n_discriminants=2)\n", "lda.fit(X, y)\n", "X_lda = lda.transform(X)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk8AAAGJCAYAAACTntdaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8U1XeP/BPGnYRqAU64oOsLSjKJmBhoEgJpI0Kgjhj\nC0UGHWZQltEHRhQ3QIVRZxwFV1zmJ8Woj4LjPLQNDYy0DFsBQUeWtGV/lK0BBgEppOf3x03SJM12\n03uzft6vV19tb27uPVzSm2/O+Z7v0QghBIiIiIgoKEmRbgARERFRLGHwRERERCQDgyciIiIiGRg8\nEREREcnA4ImIiIhIBgZPRERERDIweCIiIiKSgcETERERkQwMnoiIiIhkiKngqaamBnfffTfKy8t9\n7jN9+nT07NkTN910k/P7hg0bwthKIiIiimeNIt2AYNXU1OCxxx5DZWWl3/0OHDiAP//5z8jIyHBu\na9WqldrNIyIiogQRE8FTVVUV/vu//zvgfjU1NTh27BhuueUWpKSkhKFlRERElGhiYthu27ZtGDx4\nMD799FP4W8f44MGD0Gg06NixYxhbR0RERIkkJnqecnNzg9qvqqoKLVu2xNy5c7F161Zcf/31mDlz\nJjIzM1VuIRERESWKmAiegnXgwAFcvnwZw4YNw7Rp01BSUoLp06fjs88+Q69evertf/XqVZw7dw5N\nmzZFUlJMdMIRERGRAmpra3H58mW0bt0ajRrJC4c0wt84WBTq2bMnVqxYgYEDB3p9/Pz587j22mud\nv//+979H+/btsXDhwnr7VldX49ChQ2o1lYiIiKJc586dZedJx1XPEwC3wAkAunXrhqqqKq/7Nm3a\nFIB04Zo3b6562xLJ0aNHmXumMF5TdfC6Ko/XVB28rsq6dOkSDh065IwF5Iir4OmJJ56ARqPBiy++\n6Ny2b98+pKene93fMVTXvHlztGjRIixtTBRarZbXVGG8purgdVUer6k6eF3VEUraTswn+pw+fRqX\nL18GAGRlZeEf//gHvvzySxw5cgTLli3Dzp07kZ+fH+FWEhERUbyIueBJo9G4/T506FAUFRUBAEaN\nGoVnn30Wb731Fu6++27885//xHvvvYcOHTpEoqlEREQUh2Ju2G7v3r1uv+/bt8/t9wkTJmDChAnh\nbBIRERElkJjreSIiIiKKJAZPRERERDIweCIiIiKSgcETERERkQwMnoiIiIhkYPBEREREJAODJyIi\nIiIZGDwRERERycDgiYiIiEgGBk9EREREMjB4IiIiIpKBwRMRERGRDAyeiIiIiGRg8EREREQkA4Mn\nIiIiIhkYPBERERHJwOCJiIiISAYGT0REREQyMHgiIiIikoHBExEREZEMDJ6IiIiIZGDwRERERCQD\ngyciIiIiGRpFugFERBS7LBYLqqqq0L17d6SlpcXtOYlcseeJiIhks1qtyDZko0ePHjAYDEhPT0e2\nIRtnzpyJq3MSecPgiYiIZMublAdzqRkYD+BRAOMBc6kZuRNz4+qcRN4weCIiIlksFgtMRSbY9Dag\nN4DWAHoDttE2mIpMOHToUNjPWVFRofg5iXxh8ERERLJUVVVJP3TyeKCz9O3w4cNhP2dlZaXi5yTy\nhcETERHJ0q1bN+kHzxjpkPStUyfPCEf9c3bv3l3xcxL5wuCJiIhkSU9Phz5HD61JC+wGcA7AbkC7\nVgt9jh6dO3cO+zk5647CicETERHJZlxphC5TB6wG8CqA1YAuUwfjSmNcnZPIG9Z5IiIi2ZKTk1Fc\nWIyKigpUVla61Vyqrq4O+zmJwonBExERhSwtLS3sAUwkzknkisN2RERERDIweCIiIiKSgcETERER\nkQwMnoiIiIhkYPBEREREJAODJyIiIiIZGDwRERERycDgiYiIiEgGBk9EREREMsRU8FRTU4O7774b\n5eXlPvfZs2cPfvWrX6Fv376477778P3334exhURERBTvYiZ4qqmpwWOPPYbKykqf+1y6dAnTpk3D\nwIEDsWrVKvTt2xe/+93v8PPPP4expURERBTPYiJ4qqqqwq9+9SscO3bM735r1qxB8+bNMXfuXHTt\n2hXz58/HNddcg+Li4jC1lIiIiOJdTARP27Ztw+DBg/Hpp59CCOFzv2+//Ra33Xab27b+/fvjm2++\nUbuJRERElCAaRboBwcjNzQ1qv5MnTyI9Pd1tW0pKit+hPiIiIiI5YqLnKVg///wzmjRp4ratSZMm\nqKmpiVCLiIiIKN7EVfDUtGnTeoFSTU0NmjVrFqEWERERUbyJiWG7YKWmpuLUqVNu206fPo127dr5\nfd7Ro0eh1WrVbFrCuXDhAodLFcZrqg5eV+XxmqqD11VZNpst5OfGVfDUp08fLF++3G3bzp07MX36\ndL/P69ixI1q0aKFm0xJOZWUlunfvHulmxBVeU3XwuiqP11QdvK7KunjxIvbu3RvSc2N+2O706dO4\nfPkyAECv1+P8+fN48cUXUVVVheeffx6XLl1CTk5OhFtJRERE8SLmgieNRuP2+9ChQ1FUVAQAaNmy\nJd5++21s374d9957L7777jssX76cOU9ERESkmJgbtvPsYtu3b5/b77feeitWrVoVziYRERFRAom5\nniciIiKiSGLwRERERCQDgyciIiIiGRg8EREREcnA4ImIiIhIBgZPRERERDIweCIiIiKSgcETERER\nkQwMnoiIiIhkYPBEREREJAODJyIiIiIZGDwRERERycDgiYiIiEgGBk9EREREMjB4IiIiIpKBwRMR\nERGRDAyeiIiIiGRg8EREREQkA4MnIiIiIhkYPBERERHJwOCJiIiISAYGT0REREQyNIp0A4iIKLZZ\nLBZUVVWhe/fuSEtLi3RziFTHniciIgqJ1WpFtiEbPXr0gMFgQHp6OrIN2Th37lykm0akKvY8ERFR\nSPIm5cFcagbGA+gE4DBgNplx8bGLKN1QGunmEamGPU9ERCSbxWKBqcgEm94G9AbQGkBvwDbahrLS\nMlRUVES6iUSqYfBERESyVVVVST908nigs/StsrIynM0hCisGT0REJFu3bt2kHw57PHBI+ta9e/dw\nNocorBg8ERGRbOnp6dDn6KE1aYHdAM4B2A1o12oxLHMYZ91RXGPwREREITGuNEKXqQNWA3gVwGpA\nl6nDq395NdJNI1IVZ9sREVFIkpOTUVxYjIqKClRWVjrrPDHfieIdgyciImqQtLS0kIfpwl1gkwU9\nSQkctiMiorDzVWDzzJkzcXE+im8MnoiIEpjFYkFRUVHY6zK5Fdh8FMB4wFxqRu7E3Lg4H8U3Bk9E\nRAkokj0x/gpsmopMigdy4T4fxT8GT0RECSiSPTHhLrC5YcMG6YdW4TkfxT8GT0RECSbSPTHhKrDp\n6F2bNm2atOFvAFYCuKTO+ShxMHgiIkowkV5axV+BTX2OXrFZcN5613AUwGehnS9S+WEUfRg8EREl\nmGhYWsVXgU3jSqMix/fVu4YcAAflnY8z9cgT6zwRESUYR8+P2WSGTdikHqdDUk+MLkcXlvpHvgps\nKiVQ79ry5cvx0EMPBXUstx6sTgAOA2aTlB9WXFisUIsplgTd8/Txxx8jLy8Pd999NxYvXozq6mq3\nx61WK0aOHKl4A4mISHlq9/wEKy0tDTk5OYoHbIF614YPHx7UcSKdH0bRKajg6Z133sGyZctwxx13\n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\nEREREQP+H/6oOJA2039SAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "with plt.style.context('seaborn-whitegrid'):\n", " plt.figure(figsize=(6, 4))\n", " for lab, col in zip((0, 1, 2),\n", " ('blue', 'red', 'green')):\n", " plt.scatter(X_lda[y == lab, 0],\n", " X_lda[y == lab, 1],\n", " label=lab,\n", " c=col)\n", " plt.xlabel('Linear Discriminant 1')\n", " plt.ylabel('Linear Discriminant 2')\n", " plt.legend(loc='lower right')\n", " plt.tight_layout()\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 2 - Plotting the Between-Class Variance Explained Ratio" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from mlxtend.data import iris_data\n", "from mlxtend.preprocessing import standardize\n", "from mlxtend.feature_extraction import LinearDiscriminantAnalysis\n", "\n", "X, y = iris_data()\n", "X = standardize(X)\n", "\n", "lda = LinearDiscriminantAnalysis(n_discriminants=None)\n", "lda.fit(X, y)\n", "X_lda = lda.transform(X)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "tot = sum(lda.e_vals_)\n", "var_exp = [(i / tot)*100 for i in sorted(lda.e_vals_, reverse=True)]\n", "cum_var_exp = np.cumsum(var_exp)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n3nPk5uZGtWrVCAkJYeDAgWzcuJF9+/YRHh5epDWIiIiI3Mjw3Xbvvvsuv//+Oy4uLgC4urrSs2dP\n/v3vf2NtbXh398za2pro6GhOnz5NQEAAq1atIioqSg/IFBERkWJluOfp8uXLDBo0CDs7O55++mk6\ndep034bK8l/Lkq9GjRosXLjwvhxbREREBO4hPE2dOpWsrCx++uknvv/+e1OQ6tSpE507d6Zp06bF\nUaeIiIiIRTAcnuD685T8/Pzw8/MjKyuL+fPn88knnzB//vxCz1QXEREReRDdU3jKyclh+/btrFu3\njvXr15Obm0uXLl3497//XdT1iYiIiFgUw+EpJCSETZs2kZeXR8eOHQkLC+Oxxx4r9EMnRURERB5k\nhsNTVlYWoaGhPP744wVejyIiIiLysDMcnj766KPiqENERETkgXD/HswkIiIi8hBQeBIRERExQOFJ\nRERExIBCzXk6duxYoXdYvXr1ey5GRERExNIVKjz5+flhZWVVoD0vLw/AbJkekikiIiIPs0KFpw0b\nNph+3rx5MwsXLmT06NE0bdoUGxsb/vjjD8LDw3nxxReLrVARERERS1Co8OTm5mb6efbs2UyfPh0v\nLy9Tm6+vL++//z5vvfUWPXr0KPoqRURERCyE4Qnjly5dIjs7u0D7xYsXuXbtWpEUJSIiImKpDD8k\ns2vXrrzzzjsMGzYMd3d38vLy2LdvHzNmzODll18ujhpFRERELIbh8DR69GjKlStHWFgY6enpAFSq\nVImePXsyYMCAIi9QRERExJIYDk+lS5dm+PDhDB8+3BSenJ2di7wwEREREUt0Tw/JTE1NJSIigrFj\nx5Kdnc3y5ctJSEgo6tpERERELI7h8LRz5066du3K0aNH+fHHH7l69SopKSm8/vrrrFu3rjhqFBER\nEbEYhsPTlClTGDFiBDNmzKB06eujfu+88w5vv/02M2bMKPICRURERCyJ4fB04MABnnjiiQLtHTt2\n5K+//iqSokREREQsleHw5Obmxr59+wq0b9682exhmiIiIiIPI8N32w0bNoyQkBD27dtHTk4OK1eu\n5MiRI8THxzN58uTiqFFERETEYhjuefrXv/7FokWLOHPmDA0aNGDDhg1kZWWxaNEiOnfuXBw1ioiI\niFgMwz1PAO7u7uplEhERkX8kw+Hp2rVrrFy5kn379pGdnU1eXp7Z8rCwsCIrTkRERMTSGB62+89/\n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\nERERsTCFCk/Vq1cnLi7OrM3FxYXPPvvMrK1atWpFV5mIiIiIBSpUeNq4cWNx1yEiIiLyQNCcJxER\nEfXgZkQAABVUSURBVBEDFJ5EREREDFB4EhERETFA4UlERETEAIUnEREREQMUnkREREQMUHgSERER\nMUDhSURERMQAhScRERERAxSeRERERAxQeBIRERExQOFJRERExACFJxEREREDFJ5EREREDFB4EhER\nETFA4UlERETEAIUnEREREQMUnkREREQMUHgSERERMUDhSURERMQAhScRERERAxSeRERERAxQeBIR\nERExQOFJRERExACFJxEREREDFJ5EREREDFB4EhERETHggQ9PWVlZjBkzhpYtW9KuXTvmzZtX0iWJ\niIjIQ6x0SRfwd0VERLB//34WLlzIkSNHGDVqFG5ubv+vvXuPiuK83wD+LHKTSyEgUK0kQT1dJMRw\niUGUaFxIUmypxjZNY0HTY6vNiUo1p0ZcEC0QoouaKA2SGKm6oUErYmJorFgvJ41VoSqcBrSuQr1E\nIqC4gmEX9v39wY9J1gsyXnaAfT7neA4z7+y835l5Dz68M7uL5557TunSiIiIqB/q0zNP169fx1//\n+lekpqYiODgYcXFx+M1vfgO9Xq90aURERNRP9emZp5qaGnR0dCAsLExaFxkZifz8fAWrov6qubkZ\nra2tSpdxX3399ddwd3dXuoz7xs3NDV5eXkqXQUT9XJ8OT5cuXYK3tzccHb89DF9fX7S1teHy5ct4\n6KGHFKyO+pPm5mZkZOSiocGsdCn31dWrV/G9731P6TLum0GDnJCWNocBiogeqD4dnq5fvw5nZ2er\ndV3LJpPpvvbV2nrpvu5PSS0tl+Hk1KZ0GfeFra5La2srGhrMEGI8XF29bdKnLTg7N8PFpX8EjW++\nuYKGhgNobW194OHJaDTi2rVrD7QPW+pvM5AeHh7w9PR84P1wHPRuD3Ic9Onw5OLiclNI6loeOHDg\nbV939uxZDBgwoEd9GI1GODpeQ339n++6zt6mvb0dly/36UtvxcfHARcvXkRLS8sD66NrHDQ17YTR\n+MC6sbn29naYTBwLch06dAiHDh16oH3YkslkuukP0b4sKioKUVFRD7wfjoPeTe446Ojo6PG2ffq3\nZkBAAK5cuQKLxQIHh85n3xsaGuDq6trtrYjAwEC4ubn1uJ+VK4f1q2ddzpw5g6CgIKXLuG9s9ZxL\nfxsHAMfC3QoICIBGo3ng/dhKfxsHtpp54jjo3eSOg9bWVlRXV/do2z4dnkaOHAlHR0ccO3YMERER\nAIDy8nKEhobe1368vLz61TMULS0tGDx4sNJl9Dn9bRwAHAt3y9PT0yb/OdsKx8Hd4TiwX336owpc\nXV0xefJkpKeno6qqCmVlZSgoKMCMGTOULo2IiIj6qT498wQAKSkpWLZsGWbMmAFPT08kJycjLi5O\n6bKIiIion+rz4cnV1RXZ2dnIzs5WuhQiIiKyA336th0RERGRrTE8EREREcnA8EREREQkA8MTERER\nkQwMT0REREQyMDwRERERycDwRERERCQDwxMRERGRDAxPRERERDIwPBERERHJwPBEREREJAPDExER\nEZEMDE9EREREMjA8EREREcnA8EREREQkA8MTERERkQwMT0REREQyMDwRERERycDwRERERCQDwxMR\nERGRDAxPRERERDIwPBERERHJwPBEREREJAPDExEREZEMDE9EREREMjA8EREREcnA8EREREQkA8MT\nERERkQwMT0REREQyMDwRERERycDwRERERCQDwxMRERGRDAxPRERERDIwPBERERHJwPBEREREJAPD\nExEREZEMDE9EREREMjA8EREREcnA8EREREQkA8MTERERkQwMT0REREQyMDwRERERydDrw5PRaIRW\nq8W4ceMQHR2NlJQUGI1Gqf3KlSuYO3cuIiIiEBcXh48//ljBaomIiKi/6/XhacmSJTh58iTWr1+P\nDRs2wGAwIDU1VWpftGgRWlpasHXrVvzud79DamoqqqqqFKyYiIiI+jNHpQvozvXr17F792785S9/\nwciRIwEAixcvRmJiIkwmEy5evIh9+/Zh7969GDx4MIYPH45jx46hsLAQ2dnZCldPRERE/VGvnnly\ncHDAunXrEBwcLK0TQqCjowOtra2orKzEkCFDMHjwYKk9MjISx44dU6JcIiIisgO9eubJxcUFMTEx\nVus2bdoEtVoNb29vXLp0Cf7+/lbtvr6+uHjxoi3LJCIiIjuieHhqa2tDfX39Ldv8/PwwcOBAaVmv\n12PXrl344IMPAHTe1nNycrJ6jbOzM8xm84MrmIiIiOya4uHp+PHjmD59OlQq1U1tubm5iI2NBQB8\n+OGHyMrKglarRXR0NIDOmakbg5LJZIKrq+st+7JYLAA6Q5c967rtScSxQADHAXWy93HQlQ26skJ3\n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\nSzUXqZoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with plt.style.context('seaborn-whitegrid'):\n", " fig, ax = plt.subplots(figsize=(6, 4))\n", " plt.bar(range(4), var_exp, alpha=0.5, align='center',\n", " label='individual explained variance')\n", " plt.step(range(4), cum_var_exp, where='mid',\n", " label='cumulative explained variance')\n", " plt.ylabel('Explained variance ratio')\n", " plt.xlabel('Principal components')\n", " plt.xticks(range(4))\n", " ax.set_xticklabels(np.arange(1, X.shape[1] + 1))\n", " plt.legend(loc='best')\n", " plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## API" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "## LinearDiscriminantAnalysis\n", "\n", "*LinearDiscriminantAnalysis(n_discriminants=None)*\n", "\n", "Linear Discriminant Analysis Class\n", "\n", "**Parameters**\n", "\n", "- `n_discriminants` : int (default: None)\n", "\n", " The number of discrimants for transformation.\n", " Keeps the original dimensions of the dataset if `None`.\n", "\n", "**Attributes**\n", "\n", "- `w_` : array-like, shape=[n_features, n_discriminants]\n", "\n", " Projection matrix\n", "\n", "- `e_vals_` : array-like, shape=[n_features]\n", "\n", " Eigenvalues in sorted order.\n", "\n", "- `e_vecs_` : array-like, shape=[n_features]\n", "\n", " Eigenvectors in sorted order.\n", "\n", "**Examples**\n", "\n", "For usage examples, please see\n", " [http://rasbt.github.io/mlxtend/user_guide/feature_extraction/LinearDiscriminantAnalysis/](http://rasbt.github.io/mlxtend/user_guide/feature_extraction/LinearDiscriminantAnalysis/)\n", "\n", "### Methods\n", "\n", "
\n", "\n", "*fit(X, y, n_classes=None)*\n", "\n", "Fit the LDA model with X.\n", "\n", "**Parameters**\n", "\n", "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", "\n", " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", "- `y` : array-like, shape = [n_samples]\n", "\n", " Target values.\n", "\n", "- `n_classes` : int (default: None)\n", "\n", " A positive integer to declare the number of class labels\n", " if not all class labels are present in a partial training set.\n", " Gets the number of class labels automatically if None.\n", "\n", "**Returns**\n", "\n", "- `self` : object\n", "\n", "\n", "
\n", "\n", "*transform(X)*\n", "\n", "Apply the linear transformation on X.\n", "\n", "**Parameters**\n", "\n", "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", "\n", " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", "**Returns**\n", "\n", "- `X_projected` : np.ndarray, shape = [n_samples, n_discriminants]\n", "\n", " Projected training vectors.\n", "\n", "\n" ] } ], "source": [ "with open('../../api_modules/mlxtend.feature_extraction/LinearDiscriminantAnalysis.md', 'r') as f:\n", " s = f.read()\n", "print(s)" ] } ], "metadata": { "anaconda-cloud": {}, "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.9.7" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }