diff --git a/README.md b/README.md index bb83fd6..b57adce 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ Credits: Forked from [PyCon 2015 Scikit-learn Tutorial](https://github.com/jakev | [scikit-learn-svm](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/scikit-learn/scikit-learn-svm.ipynb) | Support vector machine classifier, with and without kernels. | | [scikit-learn-random-forest](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/scikit-learn/scikit-learn-random-forest.ipynb) | Random forest classifier and regressor. | | [scikit-learn-k-means](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/scikit-learn/scikit-learn-k-means.ipynb) | K-Means Clustering. | -| [scikit-learn-pca](#scikit-learn) | Coming Soon. | +| [scikit-learn-pca](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/scikit-learn/scikit-learn-pca.ipynb) | Principal Component Analysis. | | [scikit-learn-validation](#scikit-learn) | Coming Soon. |
diff --git a/scikit-learn/scikit-learn-pca.ipynb b/scikit-learn/scikit-learn-pca.ipynb new file mode 100644 index 0000000..acc0f35 --- /dev/null +++ b/scikit-learn/scikit-learn-pca.ipynb @@ -0,0 +1,282 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# scikit-learn-pca" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Credits: Forked from [PyCon 2015 Scikit-learn Tutorial](https://github.com/jakevdp/sklearn_pycon2015) by Jake VanderPlas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dimensionality Reduction: PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Reduced dataset shape:', (150, 2))\n", + "Meaning of the 2 components:\n", + "0.362 x sepal length (cm) + -0.082 x sepal width (cm) + 0.857 x petal length (cm) + 0.359 x petal width (cm)\n", + "-0.657 x sepal length (cm) + -0.730 x sepal width (cm) + 0.176 x petal length (cm) + 0.075 x petal width (cm)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn; \n", + "from sklearn import neighbors, datasets\n", + "\n", + "import pylab as pl\n", + "\n", + "seaborn.set()\n", + "\n", + "iris = datasets.load_iris()\n", + "\n", + "X, y = iris.data, iris.target\n", + "from sklearn.decomposition import PCA\n", + "pca = PCA(n_components=2)\n", + "pca.fit(X)\n", + "X_reduced = pca.transform(X)\n", + "print(\"Reduced dataset shape:\", X_reduced.shape)\n", + "\n", + "import pylab as pl\n", + "pl.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y,\n", + " cmap='RdYlBu')\n", + "\n", + "print(\"Meaning of the 2 components:\")\n", + "for component in pca.components_:\n", + " print(\" + \".join(\"%.3f x %s\" % (value, name)\n", + " for value, name in zip(component,\n", + " iris.feature_names)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dimensionality Reduction: Principal Component Analysis in-depth\n", + "\n", + "Here we'll explore **Principal Component Analysis**, which is an extremely useful linear dimensionality reduction technique. Principal Component Analysis is a very powerful unsupervised method for *dimensionality reduction* in data. Look for directions in the data with the most variance.\n", + "\n", + "Useful to explore data, visualize data and relationships.\n", + "\n", + "It's easiest to visualize by looking at a two-dimensional dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(1)\n", + "X = np.dot(np.random.random(size=(2, 2)), np.random.normal(size=(2, 200))).T\n", + "plt.plot(X[:, 0], X[:, 1], 'o')\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that there is a definite trend in the data. What PCA seeks to do is to find the **Principal Axes** in the data, and explain how important those axes are in describing the data distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.75871884 0.01838551]\n", + "[[ 0.94446029 0.32862557]\n", + " [ 0.32862557 -0.94446029]]\n" + ] + } + ], + "source": [ + "from sklearn.decomposition import PCA\n", + "pca = PCA(n_components=2)\n", + "pca.fit(X)\n", + "print(pca.explained_variance_)\n", + "print(pca.components_)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAFRCAYAAACsQn5FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt0FFd+J/BvVfX7oQdSC+RGYJ6FefoF2AZssI2NH+NB\nDGSSzGTy3MzM7jmbTXZPsptk81eyJ3v2zGazm2Rzkp1MstkkM2OQwB57sBk/sC2PwRgzYMAFxhgJ\nEFIL9Oz3o/aPUhXdrW6p1eru6qa/nxxPkFTddVUIfeveuvd3BVVVQURERJUlmt0AIiKiesQAJiIi\nMgEDmIiIyAQMYCIiIhMwgImIiEzAACYiIjKBpZgXybJsBfB3ABYDsAP4Y0VRXs53fCKRVIeHQ8W1\nsI40N7vA6zQzXqfC8VoVhtepcLxWhfH5vMJMxxTbA/4agICiKI8C2AXgL6Y72GKRijxNfeF1Kgyv\nU+F4rQrD61Q4XqvSKaoHDOBFAPsn/ywCSJSmOURERPWhqABWFCUIALIse6GF8R+UslFERER3uqIn\nYcmy3AHgTQD/V1GU75euSURERHc+oZha0LIszwfwNoB/rSjKWwW8hAWniYionsw4CavYAP5zAPsA\nKGmffkZRlEiel6iBwPisz1NvfD4veJ1mxutUOF6rwvA6FY7XqjCFzIIu9hnwbwH4rWJeS0RERCzE\nQUREZAoGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERkAgYw\nERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJGMBE\nREQmYAATERGZgAFMRERkAgYwERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMR\nEZmAAUxERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERkAgYwERGRCRjAREREJmAAExERmYABTERE\nZAIGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERkAgYwERGR\nCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJGMBEREQm\nYAATERGZgAFMRERkAgYwERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMREZmA\n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\nWs560nOmHzduhnJe83IP6U73/i7H1HvZahhaJqLqxR7wHJRi4g9lmmlEYWg0ApfLlvG59Gtezuue\n3WNPn0jW0ebBpWujALTZ3GZOqiKi2sAeMFWNWhtRyJ5ItszfiLVLW9DsdbDnS0QzYg94Dsqx0Xw+\ntfSsudi2FjKi0NroQCieyjjGzKHe7OVgnExFRIViD3gOKrWUppZ6huVu65Z17RnPW81evsSZzERU\nLAbwHFViLWe11A0uRK62XugbwXdfOT/jrj+FLiV69L6FVbN+loioWByCnqNil9LUi77BCQQjcVgl\nMaNHnGu4ttClRPMaHLzmRFTz2AOuAWbUDS52r9rstoYiCVglEX6f2/jcdL33aqoORURUTgzgGlDp\nso1zeY6b3VaLRZzcW7ewwRY+UyWiesEArhGV7BnO9Zlzeluz99MFWKCCiAjgM+CaUUvPmrPbWi27\n/hARVRP2gGmKUj9z5nNdIqKp2AOmKUq9sUEt9d6JiCqFPWDKib1WIqLyYg+YcmKvlYiovNgDJiIi\nMgF7wDStWtoEgoiolrAHTHnV0iYQRES1hgFMedXSJhBERLWGAUxERGQCBjDlZcYmEERE9YIBTHlV\nehMIIqJ6UpezoGtlZm81tHPz6vnGM1/2fImISqfuesC1MrO3WtrJ7QGJiMqj7gK4Vmb21ko7iYio\nOHUXwERERNWg7gK4Vmb21ko7iYioOHUXwLUys7dW2klERMWpuwAGamervVppJxERzV5dLkOqla32\naqWdREQ0e3XZAyYiIjIbA5iIiMgEDGAiIiITzCmAZVnulGX5n0rVGCIionpR9CQsWZb/HMBTAD4u\nXXOIiIjqw1x6wD0Avg1AKFFbiIiI6saMPWBZln8dwL/L+vSvKIryQ1mWt5elVURERHc4QVXVol88\nGcDfVBTlF2Y4tPiTEBER1Z4ZR4crVogjEBiv1Klqls/n5XUqAK9T4XitCsPrVDheq8L4fN4Zj5nr\nMiQV7N0SERHN2px6wIqiHAVwtERtISIiqhssxEFERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERk\nAgYwERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJ\nGMBEREQmYAATERGZgAFMRERkAgYwERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZg\nABMREZmAAUxERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERkAgYwERGRCRjAREREJmAAExERmYAB\nTEREZAIGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERkAgYw\nERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMREZmAAUxERGQCBjAREZEJGMBE\nREQmYAATERGZgAFMRERkAgYwERGRCRjAREREJmAAExERmYABTEREZAIGMBERkQkYwERERCZgABMR\nEZmAAUxERGQCBjAREZEJGMBEREQmYAATERGZgAFMRERkAgYwERGRCSyzfYEsy40A/h8ALwAbgN9R\nFOWDUjeMiIjoTlZMD/i3ARxRFGU7gF8B8JelbBAREVE9mHUPGMCfAYhO/tkKIFy65hAREdWHaQNY\nluVfB/Dvsj79K4qifCTL8gIA/wjgt8rVOCIiojuVoKrqrF8ky/I6AP8C4N8rivJaAS+Z/UmIiIhq\nlzDTAcVMwloN4EUA+xRFOVPo6wKB8dmequ74fF5epwLwOhWO16owvE6F47UqjM/nnfGYYp4B/xdo\ns5//pyzLADCiKEpnEe9DRERUt2YdwIqi7C5HQ4iIiOoJC3EQERGZoKhJWERERDQ37AETERGZgAFM\nRERkAgYwERGRCRjAREREJmAAExERmYABTEREZIJiKmHNiizLbgD/DKAJQAzALyuKcr3c561F3Gt5\n9mRZ7gSwV1GUr5ndlmohy7II4K8ArIe2c9lvKIpyydxWVTdZljcD+FNFUXaY3ZZqJMuyFcDfAVgM\nwA7gjxVFedncVlUnWZYlAH8LYCW0fRC+pSjK2VzHVqIH/BsAPlQU5TFo4fK7FThnreJey7Mgy/Kf\nQyuNOmPR8zqzG4BNUZRHAPxHAN8xuT1VTZbl34X2C9Nudluq2NcABBRFeRTALgB/YXJ7qtnzAFKK\nomwF8IcA/iTfgWUPYEVR9F+SgHb3NFzuc9awPwPwN5N/5l7LM+sB8G0wgLNtAXAYABRFOQbgQXOb\nU/U+A7AH/DmazosA/mjyzyKAhIltqWqKohwC8M3JD+/GNJlX0iHoGfYPfgPAWgBPlfKctYp7LRdu\nmmv1Q1mWt5vQpGrXAGAs7eOkLMuioigpsxpUzRRF6ZJl+W6z21HNFEUJAoAsy15oYfwH5raouimK\nkpRl+e8BdALYm++4kgawoijfBfDdPF97Qta2T3oFwPJSnrcW5btWWXstv1vxhlWh6X6uKKcxaPMI\ndAxfmjNZljsAdAH4S0VRvm92e6qdoii/Isvy7wE4JsvyPYqiTBnRLPsQtCzL/0mW5V+a/DAIDl3k\nlbbX8i8oivKa2e2hmtUD4FkAkGX5IQCnzW0O1TpZlucDeB3A7yqK8vcmN6eqybL8S7Is/6fJD8MA\nUpP/TVH2WdDQei7/IMvyrwGQAPxqBc5Zq7jX8uypk//Rbd0Adsqy3DP5Mf/NFYY/R/n9PoBGAH8k\ny7L+LPgZRVEiJrapWu0H8PeyLB+FNpfntxRFieY6kLshERERmYCFOIiIiEzAACYiIjIBA5iIiMgE\nDGAiIiITMICJiIhMwAAmIiIyAQOYiIjIBAxgIiIiE/x/lLNSkr9ioQIAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(X[:, 0], X[:, 1], 'o', alpha=0.5)\n", + "for length, vector in zip(pca.explained_variance_ratio_, pca.components_):\n", + " v = vector * 3 * np.sqrt(length)\n", + " plt.plot([0, v[0]], [0, v[1]], '-k', lw=3)\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that one vector is longer than the other. In a sense, this tells us that that direction in the data is somehow more \"important\" than the other direction.\n", + "The explained variance quantifies this measure of \"importance\" in direction.\n", + "\n", + "Another way to think of it is that the second principal component could be **completely ignored** without much loss of information! Let's see what our data look like if we only keep 95% of the variance:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(200, 2)\n", + "(200, 1)\n" + ] + } + ], + "source": [ + "clf = PCA(0.95) # keep 95% of variance\n", + "X_trans = clf.fit_transform(X)\n", + "print(X.shape)\n", + "print(X_trans.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Isomap: manifold learning, good when PCA doesn't work like in a loop. Large number of datasets, can use randomized PCA." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By specifying that we want to throw away 5% of the variance, the data is now compressed by a factor of 50%! Let's see what the data look like after this compression:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n1rGeH2zfDa5AJiLa2foncbbIxEgK/17t+QKABEDXFOTm5NrB9v2AK5CJiHa2XRfAAKCqMiSE4auq\n/XsJuAKZiGjn2pVzwNf9cIAHH2zsSfZjoQyuQCYi2rn6t/u3iXZKoQwiItq+dmUAA/116hAREe0+\nu3IIGuivU4eIiGj36aoHbJrmK0zT/LNeNYaIiGi36LgHbJrmXQBuBPBQ75pDRES0O3TTA34AwBsR\n7uYhIiKiDWjZAzZN81cA3Lzi4Zssy/qsaZo/uimtIiIi2uEkIUTrZ62hGsC/ZlnWsRZP7fxNiIiI\ntp+Wo8Nbtgp6ZoaHHbQyPp7hdWoDr1P7eK3aw+vUPl6r9oyPZ1o+p9t9wALs3RIREW1YVz1gy7L+\nCcA/9agtREREu8aurYRFREQUJwYwERFRDBjAREREMWAAExERxYABTEREFAMGMBERUQwYwERERDFg\nABMREcWAAUxERBQDBjAREVEMGMBEREQxYAATERHFgAFMREQUAwYwERFRDBjAREREMWAAExERxYAB\nTEREFAMGMBERUQwYwERERDFgABMREcWAAUxERBQDBjAREVEMGMBEREQxYAATERHFgAFMREQUAwYw\nERFRDBjAREREMWAAExERxYABTEREFAMGMBERUQwYwERERDFgABMREcWAAUxERBQDBjAREVEMGMBE\nREQxYAATERHFgAFMREQUAwYwERFRDBjAREREMWAAExERxYABTEREFAMGMBERUQwYwERERDFgABMR\nEcWAAUxERBQDBjAREVEMGMBEREQxYAATERHFgAFMREQUAwYwERFRDBjAREREMWAAExERxYABTERE\nFAMGMBERUQwYwERERDFgABMREcWAAUxERBQDBjAREVEMGMBEREQxYAATERHFgAFMREQUAwYwERFR\nDBjAREREMWAAExERxYABTEREFAMGMBERUQzUjX6BaZqDAP4ngAwAHcDbLcv6l143jIiIaCfrpAf8\nmwC+ZlnWjwK4CcDHe9kgIiKi3WDDPWAAHwVgV/+uASj3rjlERES7w7oBbJrmrwC4ecXDN1mW9W+m\naV4E4E8BvG2zGkdERLRTSUKIDX+RaZrPAnAvgHdYlvUPbXzJxt+EiIho+5JaPaGTRVhXAvgcgJ+3\nLOs77X7dzExho2+164yPZ3id2sDr1D5eq/bwOrWP16o94+OZls/pZA74gwhXP/+eaZoAsGBZ1is6\neB0iIqJda8MBbFnWyzejIURERLsJC3EQERHFoKNFWERERNQd9oCJiIhiwAAmIiKKAQOYiIgoBgxg\nIiKiGDCAiYiIYsAAJiIiikEnlbA2xDTNNIA/BzAEwAHwWsuyzm72+25HPGt540zTfAWAn7Ms65fi\nbku/ME1TBnAPgGsQnlz2Bsuynoi3Vf3NNM3nAviwZVk/Fndb+pFpmhqATwI4BMAAcKtlWV+Ot1X9\nyTRNBcAfAziK8ByEX7cs69Fmz92KHvAbAPw/y7JejDBc3rUF77ld8azlDTBN8y6EpVFbFj3fZV4O\nQLcs6/kAfgvAnTG3p6+ZpvkuhL8wjbjb0sd+CcCMZVkvAvCTAH4/5vb0s58GEFiW9SMAbgFw21pP\n3PQAtiwr+iUJhHdP85v9ntvYRwH8UfXvPGu5tQcAvBEM4JVeAODvAcCyrG8BeE68zel7PwDwSvDn\naD2fA3C8+ncZgBdjW/qaZVl/DeDXqh8exjqZ19Mh6BbnB38dwNUAbuzle25XPGu5fetcq8+apvmj\nMTSp32UBLNZ97JumKVuWFcTVoH5mWdZfmaZ5OO529DPLsooAYJpmBmEYvzfeFvU3y7J80zQ/BeAV\nAH5uref1NIAty/oEgE+s8bmXmOHxSV8BcFkv33c7WutarThr+X9vecP60Ho/V9TUIsJ1BBGGL3XN\nNM2LAfwVgI9blvUXcben31mWdZNpmlMAvmWa5hWWZa0a0dz0IWjTNN9tmuZrqh8WwaGLNdWdtXzM\nsqx/iLs9tG09AOClAGCa5vMAPBJvc2i7M01zAsBXAbzLsqxPxdycvmaa5mtM03x39cMygKD6Z5VN\nXwWNsOfyadM0Xw9AAfC6LXjP7YpnLW+cqP6hZV8E8BOmaT5Q/Zj/5trDn6O1vQfAIIDjpmlGc8E/\nZVlWJcY29avPA/iUaZr/hHAtz9ssy7KbPZGnIREREcWAhTiIiIhiwAAmIiKKAQOYiIgoBgxgIiKi\nGDCAiYiIYsAAJiIiigEDmIiIKAYMYCIiohj8f6zjCn+s2+V1AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_new = clf.inverse_transform(X_trans)\n", + "plt.plot(X[:, 0], X[:, 1], 'o', alpha=0.2)\n", + "plt.plot(X_new[:, 0], X_new[:, 1], 'ob', alpha=0.8)\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The light points are the original data, while the dark points are the projected version. We see that after truncating 5% of the variance of this dataset and then reprojecting it, the \"most important\" features of the data are maintained, and we've compressed the data by 50%!\n", + "\n", + "This is the sense in which \"dimensionality reduction\" works: if you can approximate a data set in a lower dimension, you can often have an easier time visualizing it or fitting complicated models to the data." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}