diff --git a/docs/sources/CHANGELOG.md b/docs/sources/CHANGELOG.md index e391399a7..a0e0cdb6a 100755 --- a/docs/sources/CHANGELOG.md +++ b/docs/sources/CHANGELOG.md @@ -15,6 +15,8 @@ The CHANGELOG for the current development version is available at ##### New Features - New `max_len` parameter for the frequent itemset generation via the `apriori` function to allow for early stopping. ([#270](https://github.com/rasbt/mlxtend/pull/270)) +- Added a `loadings_` attribute to `LinearDiscriminantAnalysis` to compute the factor loadings of the features on the components (discrimnants). ([#277](https://github.com/rasbt/mlxtend/pull/277)) +- Added a `tol` parameter to `LinearDiscriminantAnalysis` to threshold small eigenvalues, which are due to floating point imprecision, to zero for numerical stability. ([#277](https://github.com/rasbt/mlxtend/pull/277)) ##### Changes @@ -22,6 +24,9 @@ The CHANGELOG for the current development version is available at - The `SequentialFeatureSelector` now runs the continuation of the floating inclusion/exclusion as described in Novovicova & Kittler (1994). Note that this didn't cause any difference in performance on any of the test scenarios but could lead to better performance in certain edge cases. [#262](https://github.com/rasbt/mlxtend/pull/262) +- Added "SVD solver" option to the `LinearDiscriminantAnalysis`. ([#277](https://github.com/rasbt/mlxtend/pull/277)) +- `LinearDiscriminantAnalysis` now uses NumPy's `cov` function instead of computing the scatter matrices manually to improve numerical stability. ([#277](https://github.com/rasbt/mlxtend/pull/277)) + ### Version 0.9.0 (2017-10-21) diff --git a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis.ipynb b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis.ipynb index 368aaf2a6..a8fec7ce6 100644 --- a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis.ipynb +++ b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis.ipynb @@ -117,9 +117,9 @@ "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", + "image/png": "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\niCT9fxcNmqrTgiu+AAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -133,7 +133,7 @@ " 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", + " plt.scatter(X_lda[y == lab, 0]*(-1),\n", " X_lda[y == lab, 1],\n", " label=lab,\n", " c=col)\n", @@ -144,6 +144,93 @@ " plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 20.48653047, 0.13997659, 0. , 0. ])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lda.e_vals_" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nvN4AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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, solver='svd')\n", + "lda.fit(X, y)\n", + "X_lda = lda.transform(X)\n", + "\n", + "\n", + "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]*(-1),\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": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 5.00358099e+00, 5.50325432e-04, 0.00000000e+00,\n", + " 0.00000000e+00])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lda.e_vals_" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -153,8 +240,10 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, + "execution_count": 7, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "from mlxtend.data import iris_data\n", @@ -164,15 +253,17 @@ "X, y = iris_data()\n", "X = standardize(X)\n", "\n", - "lda = LinearDiscriminantAnalysis(n_discriminants=None)\n", + "lda = LinearDiscriminantAnalysis(n_discriminants=2)\n", "lda.fit(X, y)\n", "X_lda = lda.transform(X)" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, + "execution_count": 8, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "import numpy as np\n", @@ -184,14 +275,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEZCAYAAAAt5touAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlUVfX+//HnAcQRBxT0OlRqmnzFzFITxVK8iqIgjqE3\nv37L8qulOGVfcLrlNbk2mJneiswxrxMiSOBQqGllZOjNNMyckxQENBUE5MDvD3/uJcFREzjnCK/H\nWq7F2WcP7/2BdV5+9tn78zEVFBQUICIiYoccbF2AiIiIJQopERGxWwopERGxWwopERGxWwopERGx\nW062LuBuJSYm2roEEREpQ0888USRZfdNSEHxJ3A/S0pKwsPDw9ZllHtqZ+tQO1tHeW1nSx0RXe4T\nERG7pZASERG7pZASERG7pZASERG7pZASERG7pZASERG7pZASERG7VeohFRoaipeXF/369TOWXbp0\nieeee45evXrx3HPP8fvvvxvvffTRR/Ts2RNfX1/27NlT2uWIiMh9rNRDauDAgSxZsqTQsvDwcLy8\nvNi+fTteXl6Eh4cDcOzYMWJjY4mNjWXJkiW8/vrrmM3m0i5JRETuU6U+4kSHDh04e/ZsoWXx8fGs\nWrUKgMDAQEaMGMHUqVOJj4+nb9++ODs706RJEx588EEOHjxIu3btSrssKQX/TjhD9H+SbV3Gn5aV\nlUW13ZdsXUa5p3a2Du9GjpTDAScsssqwSOnp6bi7uwPg5uZGeno6ACkpKbRt29ZYr379+qSkpFjc\nT1JSUtkWakVfHL/C1p9/x2Hrb7Yu5a79mJINQJv6VWxcyZ+Tn59PVlaWrcso99TO1nE9t0q5+iy8\nE6uP3WcymTCZTPe0bUnHq3r386Ml2r40JWU4cCHLTKVKjrYuxdC4TtXbvv9k02r0f6wRw598wEoV\nlY7yOtaZvVE7W0d5bWdLY/dZJaTq1q1Lamoq7u7upKam4urqCtzoOZ0/f95YLyUlhfr161ujJJvz\n+EtN3CrlUK+em61LMUzq2dLWJYiIFGKVW9B9fHyIiooCICoqih49ehjLY2Njyc3N5ddff+XUqVM8\n+uij1ihJRETuA6Xek5o8eTLfffcdFy9e5KmnnmL8+PGMHj2aiRMnEhERQcOGDVmwYAEALVq0oE+f\nPvj5+eHo6MisWbNwdLSfy18iImJbpR5S8+fPL3b5ihUril0+duxYxo4dW9pliIhIOaARJ0RExG4p\npERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERE\nxG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4p\npERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERE\nxG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG4ppERExG45WfNgy5cvZ8OGDZhM\nJlq2bElYWBjXrl1j0qRJJCcn06hRIxYsWECtWrWsWZaIiNgpq/WkUlJSWLlyJRs3buSzzz7DbDYT\nGxtLeHg4Xl5ebN++HS8vL8LDw61VkoiI2DmrXu4zm81kZ2eTl5dHdnY27u7uxMfHExgYCEBgYCBf\nfPGFNUsSERE7ZrXLffXr1+f555+ne/fuVK5cmS5duuDt7U16ejru7u4AuLm5kZ6ebnEfSUlJJaoh\nLS2jRNuXtry8PNLSLti6DENSktnWJZSJ7OzsEv/tyJ2pna2jorWz1ULq999/Jz4+nvj4eFxcXJgw\nYQLR0dGF1jGZTJhMJov78PDwKFEN9c4eLdH2pS0t7QL16rnZugyDh0dLW5dQJpKSkkr8tyN3pna2\njvLazomJicUut9rlvm+++YbGjRvj6upKpUqV6NWrFwcOHKBu3bqkpqYCkJqaiqurq7VKEhERO2e1\nkGrYsCE//PAD165do6CggL1799K8eXN8fHyIiooCICoqih49elirJBERsXMWL/edP3+ef/zjHyQm\nJmIymWjfvj3Tp0+nQYMG93Sgtm3b4uvry4ABA3BycsLDw4NnnnmGzMxMJk6cSEREBA0bNmTBggX3\nfDIiIlK+WAyp0NBQ+vXrx3vvvQfA5s2bCQ0NZdmyZfd8sODgYIKDgwstc3Z2ZsWKFfe8TxERKb8s\nXu7LyMhg0KBBODk54eTkxMCBA8nIsK+740REpHyzGFK1a9cmOjoas9mM2WwmOjqa2rVrW7M2ERGp\n4CyG1Ny5c9myZYvxPNO2bdsICwuzZm0iIlLBWfxOqlGjRnz44YfWrEVERKSQIiH18ccf8+KLL/KP\nf/yj2AdrZ8yYYZXCREREioRU8+bNAfD09LR6MSIiIrcqElI+Pj4AVKlShT59+hR6b8uWLdapSkRE\n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\nrkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -206,13 +297,92 @@ " 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.xlabel('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": [ + "In LDA, the number of linear discriminants is at most c−1, where c is the number of class labels, since the in-between scatter matrix SB is the sum of c matrices with rank 1 or less. We can indeed see that we only have two nonzero eigenvalues (the eigenvalues 2-4 are not exactly zero, but this is due to the oating point arithmetic in NumPy)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 3 - Factor Loadings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After evoking the `fit` method, the factor loadings are available via the `loadings_` attribute. In simple terms, the the loadings are the unstandardized values of the eigenvectors. Or in other words, we can interpret the loadings as the covariances (or correlation in case we standardized the input features) between the input features and the and the components (or eigenvectors), which have been scaled to unit length.\n", + "\n", + "By having the loadings scaled, they become comparable by magnitude and we can assess how much variance in a component is attributed to the input features (as the components are just a weighted linear combination of the input features)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from mlxtend.data import iris_data\n", + "from mlxtend.preprocessing import standardize\n", + "from mlxtend.feature_extraction import LinearDiscriminantAnalysis\n", + "import matplotlib.pyplot as plt\n", + "\n", + "X, y = iris_data()\n", + "X = standardize(X)\n", + "\n", + "lda = LinearDiscriminantAnalysis(n_discriminants=2)\n", + "\n", + "lda.fit(X, y);" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xlabels = ['sepal length', 'sepal width', 'petal length', 'petal width']\n", + "\n", + "fig, ax = plt.subplots(1, 2, figsize=(8, 3))\n", + "\n", + "ax[0].bar(range(4), lda.loadings_[:, 0], align='center')\n", + "ax[1].bar(range(4), lda.loadings_[:, 1], align='center')\n", + "\n", + "ax[0].set_ylabel('Factor loading onto component 1')\n", + "ax[1].set_ylabel('Factor loading onto component 2')\n", + "\n", + "ax[0].set_xticks(range(4))\n", + "ax[1].set_xticks(range(4))\n", + "ax[0].set_xticklabels(xlabels, rotation=45)\n", + "ax[1].set_xticklabels(xlabels, rotation=45)\n", + "plt.ylim([-1, 1])\n", + "plt.tight_layout()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -222,7 +392,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -231,7 +401,7 @@ "text": [ "## LinearDiscriminantAnalysis\n", "\n", - "*LinearDiscriminantAnalysis(n_discriminants=None)*\n", + "*LinearDiscriminantAnalysis(n_discriminants=None, solver='eigen', tol=1e-08)*\n", "\n", "Linear Discriminant Analysis Class\n", "\n", @@ -241,6 +411,23 @@ "\n", " The number of discrimants for transformation.\n", " Keeps the original dimensions of the dataset if `None`.\n", + " Note that the number of meaningful discriminants is\n", + " is max. n_classes - 1. In other words,\n", + " in LDA, the number of linear discriminants is at\n", + " most c-1, where c is the number of class labels,\n", + " since the in-between scatter matrix SB is\n", + " the sum of c matrices with rank 1 or less.\n", + " We can indeed see that we only have two nonzero eigenvalues\n", + "\n", + "- `solver` : str (default: 'eigen')\n", + "\n", + " Method for performing the matrix decomposition.\n", + " {'eigen', 'svd'}\n", + "\n", + "- `tol` : float (default: 1-e8)\n", + "\n", + " Tolerance value for thresholding small eigenvalues, which\n", + " are due to floating point imprecision, to zero.\n", "\n", "**Attributes**\n", "\n", @@ -314,15 +501,6 @@ " s = f.read()\n", "print(s)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_11_0.png b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_11_0.png index b56800ad1..f141691d0 100644 Binary files a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_11_0.png and b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_11_0.png differ diff --git a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_15_0.png b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_15_0.png index deff149ff..2dcb723d2 100644 Binary files a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_15_0.png and b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_15_0.png differ diff --git a/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_20_0.png b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_20_0.png new file mode 100644 index 000000000..3c7033ac9 Binary files /dev/null and b/docs/sources/user_guide/feature_extraction/LinearDiscriminantAnalysis_files/LinearDiscriminantAnalysis_20_0.png differ diff --git a/docs/sources/user_guide/feature_extraction/PrincipalComponentAnalysis.ipynb b/docs/sources/user_guide/feature_extraction/PrincipalComponentAnalysis.ipynb index e86fc0cf8..4ddb8c348 100644 --- a/docs/sources/user_guide/feature_extraction/PrincipalComponentAnalysis.ipynb +++ b/docs/sources/user_guide/feature_extraction/PrincipalComponentAnalysis.ipynb @@ -317,7 +317,9 @@ { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "from mlxtend.data import iris_data\n", diff --git a/mlxtend/feature_extraction/linear_discriminant_analysis.py b/mlxtend/feature_extraction/linear_discriminant_analysis.py index ec0745e46..d62ca2864 100644 --- a/mlxtend/feature_extraction/linear_discriminant_analysis.py +++ b/mlxtend/feature_extraction/linear_discriminant_analysis.py @@ -19,6 +19,19 @@ class LinearDiscriminantAnalysis(_BaseModel): n_discriminants : int (default: None) The number of discrimants for transformation. Keeps the original dimensions of the dataset if `None`. + Note that the number of meaningful discriminants is + is max. n_classes - 1. In other words, + in LDA, the number of linear discriminants is at + most c-1, where c is the number of class labels, + since the in-between scatter matrix SB is + the sum of c matrices with rank 1 or less. + We can indeed see that we only have two nonzero eigenvalues + solver : str (default: 'eigen') + Method for performing the matrix decomposition. + {'eigen', 'svd'} + tol : float (default: 1-e8) + Tolerance value for thresholding small eigenvalues, which + are due to floating point imprecision, to zero. Attributes ---------- @@ -30,10 +43,17 @@ class LinearDiscriminantAnalysis(_BaseModel): Eigenvectors in sorted order. """ - def __init__(self, n_discriminants=None): + def __init__(self, n_discriminants=None, solver='eigen', tol=1e-8): + valid_solver = {'eigen', 'svd'} + if solver not in valid_solver: + raise AttributeError('Must be in %s. Found %s' + % (valid_solver, solver)) + self.solver = solver + if n_discriminants is not None and n_discriminants < 1: raise AttributeError('n_discriminants must be > 1 or None') self.n_discriminants = n_discriminants + self.tol = tol def fit(self, X, y, n_classes=None): """ Fit the LDA model with X. @@ -63,6 +83,7 @@ def fit(self, X, y, n_classes=None): def _fit(self, X, y, n_classes=None): + n_samples = X.shape[0] if self.n_discriminants is None or self.n_discriminants > X.shape[1]: n_discriminants = X.shape[1] else: @@ -82,11 +103,17 @@ def _fit(self, X, y, n_classes=None): between_scatter = self._between_scatter(X=X, y=y, mean_vectors=mean_vecs) - self.e_vals_, self.e_vecs_ = self._eigendecom( - within_scatter=within_scatter, between_scatter=between_scatter) + self.e_vals_, self.e_vecs_ = self._decomposition( + within_scatter=within_scatter, + between_scatter=between_scatter, + n_samples=n_samples) + + self.e_vals_ = self.e_vals_.copy() + self.e_vals_[abs(self.e_vals_) < self.tol] = 0.0 self.w_ = self._projection_matrix(eig_vals=self.e_vals_, eig_vecs=self.e_vecs_, n_discriminants=n_discriminants) + self.loadings_ = self._loadings() return self def transform(self, X): @@ -118,11 +145,13 @@ def _mean_vectors(self, X, y, n_classes): def _within_scatter(self, X, y, n_classes, mean_vectors): S_W = np.zeros((X.shape[1], X.shape[1])) for cl, mv in zip(range(n_classes), mean_vectors): - class_sc_mat = np.zeros((X.shape[1], X.shape[1])) - for row in X[y == cl]: - row, mv = row.reshape(X.shape[1], 1), mv.reshape(X.shape[1], 1) - class_sc_mat += (row - mv).dot((row - mv).T) - S_W += class_sc_mat + class_sc_mat = np.cov((X[y == cl] - mv).T) + # class_sc_mat = np.zeros((X.shape[1], X.shape[1])) + # for row in X[y == cl]: + # row, mv = row.reshape(X.shape[1], 1), + # mv.reshape(X.shape[1], 1) + # class_sc_mat += (row - mv).dot((row - mv).T) + S_W += y[y == cl].shape[0] * class_sc_mat return S_W def _between_scatter(self, X, y, mean_vectors): @@ -136,9 +165,15 @@ def _between_scatter(self, X, y, mean_vectors): (mean_vec - overall_mean).T) return S_B - def _eigendecom(self, within_scatter, between_scatter): - e_vals, e_vecs = np.linalg.eig(np.linalg.inv(within_scatter).dot( - between_scatter)) + def _decomposition(self, within_scatter, between_scatter, n_samples): + combined_scatter = np.linalg.inv(within_scatter).dot( + between_scatter) + if self.solver == 'eigen': + e_vals, e_vecs = np.linalg.eig(combined_scatter) + elif self.solver == 'svd': + u, s, v = np.linalg.svd(combined_scatter) + e_vecs, e_vals = u, s + e_vals = e_vals ** 2 / n_samples sort_idx = np.argsort(e_vals)[::-1] e_vals, e_vecs = e_vals[sort_idx], e_vecs[sort_idx] return e_vals, e_vecs @@ -147,3 +182,9 @@ def _projection_matrix(self, eig_vals, eig_vecs, n_discriminants): matrix_w = np.vstack([eig_vecs[:, i] for i in range(n_discriminants)]).T return matrix_w + + def _loadings(self): + """Compute factor loadings""" + + return (self.e_vecs_ * + np.sqrt(np.abs(self.e_vals_))) diff --git a/mlxtend/feature_extraction/tests/test_linear_discriminant_analysis.py b/mlxtend/feature_extraction/tests/test_linear_discriminant_analysis.py index f80b1e8ec..de4f2d5dd 100644 --- a/mlxtend/feature_extraction/tests/test_linear_discriminant_analysis.py +++ b/mlxtend/feature_extraction/tests/test_linear_discriminant_analysis.py @@ -18,7 +18,7 @@ def test_default_components(): lda = LDA() lda.fit(X, y) - res = lda.fit(X).transform(X) + res = lda.fit(X, y).transform(X) assert res.shape[1] == 4 @@ -30,18 +30,28 @@ def test_default_2components(): @raises(AttributeError) -def test_default_components(): +def test_default_components_0(): lda = LDA(n_discriminants=0) lda.fit(X, y) - res = lda.fit(X).transform(X) -def test_evals(): +def test_evals_eigen(): lda = LDA(n_discriminants=2) - res = lda.fit(X, y).transform(X) + lda.fit(X, y).transform(X) np.set_printoptions(suppress=True) print('%s' % lda.e_vals_) - assert_almost_equal(lda.e_vals_, [20.90, 0.14, 0.0, 0.0], decimal=2) + assert_almost_equal(lda.e_vals_, [20.49, 0.14, 0.0, 0.0], decimal=2) + + +def test_evecs_eigen_vs_svd(): + + lda = LDA(n_discriminants=2) + lda.fit(X, y).transform(X) + eigen_vecs = lda.e_vecs_ + lda = LDA(n_discriminants=2, solver='svd') + lda.fit(X, y).transform(X) + assert_almost_equal(lda.e_vecs_[:, 0], + eigen_vecs[:, 0], decimal=2) @raises(ValueError) @@ -54,4 +64,16 @@ def test_fail_array_fit(): def test_fail_array_transform(): lda = LDA() lda.fit(X, y) - exp = lda.transform(X[1]) + lda.transform(X[1]) + + +def test_loadings(): + + expect = np.abs(np.array([[0.7, 0., 0., 0.], + [0.7, 0.1, 0., 0.], + [3.9, 0.3, 0., 0.], + [2.1, 0.2, 0., 0.]])) + + lda = LDA(n_discriminants=2) + lda.fit(X, y) + assert_almost_equal(np.abs(lda.loadings_), expect, decimal=1)