{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\"Open\n", "\n", "| - |\n", "|---------------------------------------------------------------------------|\n", "| [Exercise 8 (explained variance)](<#Exercise-8-(explained-variance)>) |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ML: Principal component analysis\n", "\n", "## Principal component analysis\n", "\n", "Principal component analysis is an unsupervised learning method that tries to detect the directions in which the vector formed data varies most. It first finds the direction of highest variance, and then proceeds to discover directions of highest variance that are orthogonal to those direction already found. So, for n dimensional data, it returns, by default, n orthogonal directions and the corresponding variances. These directions are called *pricipal axes*, and if we project a data point to these axes, we get the *principal components* of each axis.\n", "\n", "To use another terminology, the set of principal axes forms a base for the vector space where the data points reside, and the principal components are the coordinates of the data points in this new coordinate system. The `PCA` class in the scikit-learn library has a `transform` method, which transforms data to this new coordinate system.\n", "\n", "Let's look at an example where the data is from multi-variate Gaussian distribution." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.262846Z", "start_time": "2020-06-24T19:33:56.933400Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import math\n", "from sklearn.decomposition import PCA\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we sample data from this distribution, and then we plot it." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.341744Z", "start_time": "2020-06-24T19:33:57.263992Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "rng=np.random.RandomState(0)\n", "X=rng.randn(2,400)\n", "scale=np.array([[1,0], [0,0.4]]) # Standard deviations are 1 and 0.4\n", "rotate=np.array([[1,-1], [1,1]]) / math.sqrt(2)\n", "transform = np.dot(rotate, scale)\n", "X=np.dot(transform, X)\n", "#X=np.dot(scale, X)\n", "#X=np.dot(rotate, X)\n", "X=X.T\n", "plt.axis('equal')\n", "plt.scatter(X[:,0], X[:,1]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's first apply the PCA to the data to obtain the principal axes and their variances." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.347831Z", "start_time": "2020-06-24T19:33:57.343022Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Principal axes: [[-0.73072907 -0.68266758]\n", " [-0.68266758 0.73072907]]\n", "Explained variance: [ 0.97980663 0.16031015]\n", "Mean: [ 0.01333067 -0.05370929]\n" ] } ], "source": [ "from sklearn.decomposition import PCA\n", "def arrow(v1, v2, ax):\n", " arrowprops=dict(arrowstyle='->',\n", " linewidth=2,\n", " shrinkA=0, shrinkB=0)\n", " ax.annotate(\"\", v2, v1, arrowprops=arrowprops)\n", "pca=PCA(2)\n", "pca.fit(X)\n", "print(\"Principal axes:\", pca.components_)\n", "print(\"Explained variance:\", pca.explained_variance_)\n", "print(\"Mean:\", pca.mean_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we draw vectors whose directions reflect those of the principal axes, and whose lengths are the corresponding variances. Then we plot the data in this new coordinate system." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.508629Z", "start_time": "2020-06-24T19:33:57.349305Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "Z=pca.transform(X)\n", "fig, axes = plt.subplots(1,2, figsize=(12,4))\n", "axes[0].axis('equal')\n", "axes[0].scatter(X[:,0], X[:,1])\n", "axes[1].axis('equal')\n", "axes[1].set_xlim(-3,3)\n", "axes[1].scatter(Z[:,0], Z[:,1])\n", "for l, v in zip(pca.explained_variance_, pca.components_):\n", " arrow([0,0], v*l*3, axes[0])\n", "for l, v in zip([1.0,0.16], [np.array([1.0,0.0]),np.array([0.0,1.0])]):\n", " arrow([0,0], v*l*3, axes[1])\n", "axes[0].set_title(\"Original\")\n", "axes[1].set_title(\"Transformed\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You may have noticed that we gave the PCA constructor a parameter with value 2. This parameter gives the number of principal axes we want. If the parameter value is n, then the algorithm returns only n components with the highest variances and drops those components with lower variance. So, this algorithm can be used as a dimensionality reduction technique. The components with low variance are assumed not to contain any important information.\n", "\n", "Let's use PCA to project the above data to one dimension." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.588722Z", "start_time": "2020-06-24T19:33:57.509546Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-0.73072907 -0.68266758]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pca=PCA(n_components=1)\n", "pca.fit(X)\n", "Z=pca.transform(X)\n", "print(pca.components_)\n", "plt.axis('equal')\n", "plt.scatter(Z[:,0],np.zeros(400), marker=\"d\", alpha=0.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dimensionality reduction can be used, for example, to project high-dimensional data in two or three dimensions to allow visualization of data. Additionally, dimensionality reduction can be used as a preprocessing method to obtain only the important features from the data. These important features can then be used, for example, for regression or classification." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example of feature extraction" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.611509Z", "start_time": "2020-06-24T19:33:57.589660Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(442, 10)\n", "(442,)\n" ] } ], "source": [ "from sklearn.datasets import load_diabetes\n", "X, y = load_diabetes(True)\n", "print(X.shape)\n", "print(y.shape)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.700279Z", "start_time": "2020-06-24T19:33:57.612521Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.0091252 0.00338394]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pca=PCA(2)\n", "pca.fit(X)\n", "print(pca.explained_variance_)\n", "Z=pca.transform(X)\n", "plt.axis('equal')\n", "plt.scatter(Z[:,0], Z[:,1]);" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.706646Z", "start_time": "2020-06-24T19:33:57.702388Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.4891489 0.05331736 0.22206019 ..., -0.38084297 -0.71682684\n", " 0.07960158]\n", " [ 1.43327136 0.08236987 0.83741626 ..., -0.56888509 -1.0661402\n", " 0.30652977]\n", " [ 0.39117808 -0.22450206 0.56194345 ..., -0.00355792 0.28652033\n", " 0.00938993]\n", " ..., \n", " [-0.35164664 -0.99714767 0.79151041 ..., -1.11453672 -0.63849744\n", " -0.72193644]\n", " [ 1.34095136 -0.32676544 1.33260878 ..., -0.2610145 -0.01341865\n", " 0.16976249]\n", " [ 1.34454622 0.55682337 0.22536013 ..., -0.3262513 -1.25934636\n", " 0.52731505]]\n" ] } ], "source": [ "rng=np.random.RandomState(0)\n", "X=rng.randn(3,400)\n", "p=rng.rand(10,3) # Random projection into 10d\n", "X=np.dot(p, X)\n", "print(X)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-06-24T19:33:57.811289Z", "start_time": "2020-06-24T19:33:57.708015Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 5.84366626e+01 3.69031722e+01 1.56915171e+01 2.39492996e-29\n", " 6.40732397e-30 1.94630708e-30 1.45347633e-30 4.28030379e-31\n", " 2.60778979e-31 1.54023377e-31]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pca=PCA()\n", "pca.fit(X)\n", "v=pca.explained_variance_\n", "print(v)\n", "plt.plot(np.arange(1,11), np.cumsum(v));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####
Exercise 8 (explained variance)
\n", "\n", "This exercise can give two points at maximum!\n", "\n", "Part 1.\n", "\n", "Write function `explained_variance` which reads the tab separated file \"data.tsv\". The data contains 10 features. Then fit PCA to the data. The function should return two lists (or 1D arrays). The first list should contain the variances of all the features. The second list should consist of the explained variances returned by the PCA.\n", "\n", "In the main function print these values in the following form:\n", "```\n", "The variances are: ?.??? ?.??? ...\n", "The explained variances after PCA are: ?.??? ?.??? ...\n", "```\n", "Print the values with three decimal precision and separate the values by a space.\n", "\n", "Part 2.\n", "\n", "Plot the cumulative explained variances. The y-axis should be the cumulative sum, and the x-axis the number of terms in the cumulative sum.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary (week 6)\n", "\n", "* We got to know another supervised learning method, namely, naive Bayes classification\n", "* We saw examples of naive Bayes classification where either Gaussian or multinomial distribution was used to model the features of samples belonging to a class\n", "* We saw how to use cross validation to asses prediction abilities of a model. This allows us to be sure that the model is not overfitting.\n", "* In the clustering section we saw examples of using k-means, DBSCAN, and hierarchical clustering methods. They have different approaches to clustering, and each have different strengths.\n", "* Clustering is based on the notion of distance between the points in the data.\n", "* Principal component analysis is another example of unsupervised learning\n", "* It can reduce the dimensionality of a data by throwing away those dimensions where the variability is low." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\"Open\n" ] } ], "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.6.9" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }