{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dimensionality Reduction\n", "\n", "Datasets are sometimes very large, containing potentially millions of data points across a large numbers of features. \n", "\n", "Each feature can also be thought of as a 'dimension'. In some cases, for high-dimensional data, we may want or need to try to reduce the number of dimensions. Reducing the number of dimensions (or reducing the number of features in a dataset) is called 'dimensionality reduction'. \n", "\n", "The simplest way to do so could simply be to drop some dimensions, and we could even choose to drop the dimensions that seem likely to be the least useful. This would be a simple method of dimensionality reduction. However, this approach is likely to throw away a lot of information, and we wouldn't necessarily know which features to keep. Typically we want to try to reduce the number of dimensions while still preserving the most information we can from the dataset. \n", "\n", "As we saw before, one way we could try and do something like this is by doing clustering. When we run a clustering analysis on high dimensional data, we can try and re-code data to store each point by it's cluster label, potentially maintaining more information in a smaller number of dimensions.\n", "\n", "Here we will introduce and explore a different approach to dimensionality reduction. Instead of dropping or clustering our features, we are going to try and learn a new representation of our data, choosing a set of feature dimensions that capture the most variance of our data. This allows us to drop low information dimensions, meaning we can reduce the dimensionality of our data, while preserving the most information. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Dimensionality reduction is the process of transforming a dataset to a lower dimensional space. \n", "
\n", "\n", "
\n", "For more information on dimensionality reduction, see the scikit-learn \n", "user manual,\n", "and / or \n", "blog post\n", "with an explainer and examples in real data.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Principal Component Analysis\n", "\n", "The method we will for dimensionality reduction is Principal Component Analysis (PCA).\n", "\n", "PCA can be used to learn a new representation of the data, 're-organizing' our features into a set of new dimensions that are ranked by the variance of the dataset that they account for. With this, we can do dimensionality reduction by dropping dimensions with a small amount of explained variance. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Principal Component Analysis (PCA) is procedure to transform a dataset into principle components, ordered by how much variance they capture.\n", "
\n", "\n", "
\n", "For a paper that covers a full tutorial of PCA, go \n", "here.\n", "For a more technical overview and explainer, check out this \n", "post.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### PCA Overview\n", "\n", "To use PCA for Dimensionality Reduction, we can apply PCA to a dataset, learning our new components that represent the data. From this, we can choose to preserve _n_ components, where _n_ is a number lower than the original dimensionality of our data set. By transforming our data with PCA, and choosing the keep the top _n_ components, we are able to keep the most variance of the original data in our lower dimensional space.\n", "\n", "Broadly, PCA seeks to take advantage of the correlational structure of the variables, and uses this structure to re-encode the data. For example, if feature $x_1$ and $x_2$ of our data are correlated, PCA looks for how it could re-organize the data into some new dimension $x_pc$ which captures most of the shared variance (correlated structure) between the two. \n", "\n", "In practice, PCA is most useful to go from _m_D -> _n_D data, where D is the dimensionality of the data, _m_ is a large number and we want to choose a new dimensionality _n_, where _n_ < _m_. \n", "\n", "For this this notebook, we will work through a simplified example, illustrating the point in dimensionalities that we can plot, by going from 2D to 1D data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Imports\n", "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.decomposition import PCA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this examples, we will create some example data, with 2 dimensions, in which the two dimensions are correlated (share some variance). " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Settings\n", "means = [50, 50]\n", "covs = [[1, .75], [.75, 1]]\n", "n = 1000\n", "\n", "# Generate data\n", "data = np.random.multivariate_normal(means, covs, n)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAVX0lEQVR4nO3df6ye5X3f8fcnND+0BgoMwxA/apI5WZOqM5FHkBARKU3LjyyGSnRGUfASFgcJa0kbdTF0WpEmJi8tyRZ1ITWDAgo/W4JAw0tjeSwIrYQYQvnlUAy4xMGz3SQjbESZbL7747nPeHz8nHMen3OeX/d5v6Sj53mu+759vobLH1++zn3dV6oKSVK7vGXUBUiSFp/hLkktZLhLUgsZ7pLUQoa7JLWQ4S5JLWS4S1ILGe5jKsnOJD9L8lqS/5XkfyS5IslbmuMfTvJgkleT7BxxuVLf+ujbv5/k6eb4S0l+f9Q1TyLDfbz906o6EvhlYCPwBeDG5tj/AW4C7PiaRLP17QCXAccA5wHrk6wZSZUT7BdGXYDmVlWvAvcn+Z/AI0muq6pHgUeT/MaIy5PmbYa+/cWuU55Lch9wFnDnSIqcUI7cJ0gT6LuAs0ddi7SYZurbSdK0PTOKuiaZ4T55XgGOHXUR0gD06tvX0MmpPxt6NRPOaZnJcxLw41EXIQ3AQX07yXo6c+9nV9XPR1bVhDLcJ0iSf0LnD8DDo65FWkzT+3aSTwEbgA9V1a5R1japnJaZAEmOSvJROj9Q+npVPZXkLUneAby1c0rekeRto61UOjwz9O2PA/8O+EhVvTjaCidXfJ77eGruXT8B2A+8ATwLfB34WlUdSHIO8OC0y75dVecMsUzpsPXRt18CTga6p2K+XlVXDLvWSWa4S1ILOS0jSS1kuEtSCxnuktRChrsktdBY3Od+3HHH1fLly0ddhlrqscce+7uqWjaK723f1iDN1rfHItyXL1/Otm3bRl2GWirJ347qe9u3NUiz9W2nZSSphQx3SWohw12SWshwl6QWMtwlqYUMd0lqIcNdklrIcJekFjLcJamFxmKFqg7P8g0PzOu6nRsvXORKpN7so6PnyF2SWshwl6QWMtwlqYUMd0lqIcNdklpozrtlkpwC3Ar8A+ANYFNV/cck1wCfBvY1p15dVZuba64CLgcOAP+yqv5yALVLahnvslk8/Yzc9wOfr6pfAc4ErkzyvubYl6tqZfM1FezvA9YA7wfOA76a5IgB1C4tSJJTkjyYZHuSZ5J8tmk/NsmWJM83r8c07UnylSQ7kjyZ5AOj/R1IM5sz3Ktqd1U93rx/DdgOnDTLJauBO6vq51X1ErADOGMxipUW2UwDlw3A1qpaAWxtPgOcD6xovtYB1w+/ZKk/hzXnnmQ5cDrwnaZpfTOCuWlqdEMn+H/QddkuevxlkGRdkm1Jtu3bt2/6YWngZhm4rAZuaU67Bbioeb8auLU6HgGOTnLikMuW+tJ3uCd5J3AP8Lmq+imdUcu7gZXAbuC6qVN7XF6HNFRtqqpVVbVq2bKR7F0s/X/TBi4nVNVu6PwFABzfnNbXwEUaB32Fe5K30gn226rqGwBVtaeqDlTVG8ANvDn1sgs4pevyk4FXFq9kaXH1GLjMeGqPtkMGLv6rVONgznBPEuBGYHtVfamrvfufoxcDTzfv7wfWJHl7ktPozE8+unglS4un18AF2DPVv5vXvU17XwMX/1WqcdDPyP0s4BPAryd5ovm6APhikqeSPAl8GPhdgKp6BrgbeBb4JnBlVR0YTPnS/M00cKEzQFnbvF8L3NfVfllz18yZwKtT0zfSuJnzPveqepje/xzdPMs11wLXLqAuaRimBi5PJXmiabsa2AjcneRy4GXgkubYZuACOneAvQ58crjlSv3zkb9asmYZuACc2+P8Aq4caFHSIvHxA5LUQoa7JLWQ4S5JLWS4S1ILGe6S1ELeLTNC8328qSTNxZG7JLWQ4S5JLWS4S1ILGe6S1EKGuyS1kOEuSS1kuEtSCxnuktRChrsktZDhLkktZLhryUpyU5K9SZ7uarurazvJnVM7NCVZnuRnXce+NrrKpbn5bBktZTcDfwLcOtVQVf9s6n2S64BXu85/oapWDq06aQEMdy1ZVfVQkuW9jjWbZ/8O8OvDrElaLE7LSL2dDeypque72k5L8r0k305y9kwXJlmXZFuSbfv27Rt8pVIPhrvU26XAHV2fdwOnVtXpwO8Btyc5qteFVbWpqlZV1aply5YNoVTpUIa7NE2SXwB+G7hrqq2qfl5VP2rePwa8ALxnNBVKczPcpUP9BvD9qto11ZBkWZIjmvfvAlYAL46oPmlOhruWrCR3AH8FvDfJriSXN4fWcPCUDMCHgCeT/DXwF8AVVfXj4VUrHR7vltGSVVWXztD+z3u03QPcM+iapMXiyF2SWshwl6QWclpG0sRbvuGBeV23c+OFi1zJ+HDkLkktZLhLUgvNGe5JTknyYJLtSZ5J8tmm/dgkW5I837we07QnyVeS7EjyZJIPDPo3IUk6WD8j9/3A56vqV4AzgSuTvA/YAGytqhXA1uYzwPl0FnisANYB1y961ZKkWc0Z7lW1u6oeb96/BmwHTgJWA7c0p90CXNS8Xw3cWh2PAEcnOXHRK5ckzeiw5tybx6OeDnwHOKGqdkPnLwDg+Oa0k4AfdF22q2mb/mv55DxJGpC+wz3JO+ms0PtcVf10tlN7tNUhDT45T5IGpq9wT/JWOsF+W1V9o2neMzXd0rzubdp3Aad0XX4y8MrilCtJ6seci5iaHWluBLZX1Ze6Dt0PrAU2Nq/3dbWvT3In8EHg1anpG0mTZb6LgzR6/axQPQv4BPDU1GbBwNV0Qv3u5kl6LwOXNMc2AxcAO4DXgU8uasWSpDnNGe5V9TC959EBzu1xfgFXLrAuSdICuEJVklrIcNeSleSmJHuTPN3Vdk2SHyZ5ovm6oOvYVc3K6+eS/NZoqpb6Y7hrKbsZOK9H+5eramXztRmgWZW9Bnh/c81Xp7bdk8aR4a4lq6oeAvrdKm81cGezUfZLdG4YOGNgxUkLZLhLh1rfPPTupqkH4tHnymtpXBju0sGuB94NrAR2A9c17X2tvAYfraHxYLhLXapqT1UdqKo3gBt4c+ql75XXPlpD48Bwl7pMe4LpxcDUnTT3A2uSvD3JaXQeaf3osOuT+uUeqlqyktwBnAMcl2QX8IfAOUlW0ply2Ql8BqCqnklyN/AsnT0OrqyqA6OoW+qH4a4lq6ou7dF84yznXwtcO7iKpMXjtIwktZDhLkkt5LTMEjLfx7fu3HjhIlciadAcuUtSCxnuktRChrsktZDhLkktZLhLUgsZ7pLUQoa7JLWQ4S5JLWS4S1ILGe6S1EKGuyS1kM+WWSTzfW6LJA2CI3dJaiHDXUtWkpuS7E3ydFfbHyX5fpInk9yb5OimfXmSnyV5ovn62ugql+ZmuGspuxk4b1rbFuBXq+rXgL8Bruo69kJVrWy+rhhSjdK8GO5asqrqIeDH09q+VVX7m4+PACcPvTBpERju0sw+BfzXrs+nJflekm8nOXumi5KsS7ItybZ9+/YNvkqphznDfYZ5yWuS/LBr/vGCrmNXJdmR5LkkvzWowqVBSvIHwH7gtqZpN3BqVZ0O/B5we5Kjel1bVZuqalVVrVq2bNlwCpam6WfkfjOHzksCfLlr/nEzQJL3AWuA9zfXfDXJEYtVrDQMSdYCHwU+XlUFUFU/r6ofNe8fA14A3jO6KqXZzRnuveYlZ7EauLP5g/ASsAM4YwH1SUOV5DzgC8DHqur1rvZlUwOVJO8CVgAvjqZKaW4LmXNf39wudlOSY5q2k4AfdJ2zq2k7hPOSGrUkdwB/Bbw3ya4klwN/AhwJbJl2y+OHgCeT/DXwF8AVVdXvoEcauvmuUL0e+LdANa/X0fnhU3qcW71+garaBGwCWLVqVc9zpEGqqkt7NN84w7n3APcMtiJp8cxr5F5Ve6rqQFW9AdzAm1Mvu4BTuk49GXhlYSVKkg7XvMI9yYldHy8Gpu6kuR9Yk+TtSU6jMy/56MJKlCQdrjmnZZp5yXOA45LsAv4QOCfJSjpTLjuBzwBU1TNJ7gaepXMb2ZVVdWAwpUuSZjJnuB/OvGRz/rXAtQspSpK0MK5QlaQWMtwlqYUMd0lqIcNdklrIcJekFjLcJamFDHdJaiHDXZJayHCXpBYy3CWphQx3SWohw11L1gz7Ax+bZEuS55vXY5r2JPlKsz/wk0k+MLrKpbkZ7lrKbubQ/YE3AFuragWwtfkMcD6dR1ivANbR2bBGGlvz3YlJmnhV9VCS5dOaV9N5xDXALcB/p7On6mrg1mbD7EeSHJ3kxKraPZxqNQjLNzxw2Nfs3HjhACpZfI7cpYOdMBXYzevxTXvf+wNL48Bwl/rT9/7Abv6ucWC4SwfbM7WNZPO6t2nve3/gqtpUVauqatWyZcsGWqw0E8NdOtj9wNrm/Vrgvq72y5q7Zs4EXnW+XePMH6hqyZphf+CNwN1JLgdeBi5pTt8MXADsAF4HPjn0gqXDYLhryZphf2CAc3ucW8CVg61IWjxOy0hSCxnuktRChrsktZDhLkktZLhLUgsZ7pLUQoa7JLWQ4S5JLWS4S1ILGe6S1EKGuyS10Jzh7j6TkjR5+hm534z7TErSRJkz3KvqIeDH05pX09lfkub1oq72W6vjEeDoqY0PJEnDM9859wXvM+lWZJI0OIv9A9W+95l0KzJJGpz5btaxJ8mJVbV7vvtMSuMqyXuBu7qa3gX8G+Bo4NPA1D81r66qzUMuT+rLfMN9ap/JjRy6z+T6JHcCH8R9JjWBquo5YCVAkiOAHwL30tla78tV9ccjLG9elm94YNQlaMjmDHf3mdQSdy7wQlX9bdJr1lEaT3OGu/tMaolbA9zR9Xl9ksuAbcDnq+on0y9Iso7OrcCceuqpQylSms4VqtIMkrwN+Bjw503T9cC76UzZ7Aau63WdNwtoHBju0szOBx6vqj0AVbWnqg5U1RvADcAZI61OmoXhLs3sUrqmZKYtyLsYePqQK6QxMd+7ZaRWS/L3gI8An+lq/mKSlXTWbuycdkwaK4a71ENVvQ78/WltnxhROdJhc1pGklrIcJekFjLcJamFDHdJaiHDXZJayHCXpBYy3CWphQx3SWohw12SWsgVqprTfDd62LnxwkWuRFK/HLlLUgsZ7pLUQoa7JLWQ4S5JLWS4S1ILGe6S1ELeCin1kGQn8BpwANhfVauSHAvcBSynsxPT71TVT0ZVozQbR+7SzD5cVSuralXzeQOwtapWAFubz9JYMtyl/q0Gbmne3wJcNMJapFkZ7lJvBXwryWNJ1jVtJ1TVboDm9fheFyZZl2Rbkm379u0bUrnSwZxzl3o7q6peSXI8sCXJ9/u9sKo2AZsAVq1aVYMqUJqNI3eph6p6pXndC9wLnAHsSXIiQPO6d3QVSrMz3KVpkvxikiOn3gO/CTwN3A+sbU5bC9w3mgqluTktIx3qBODeJND5M3J7VX0zyXeBu5NcDrwMXDLCGqVZGe7SNFX1IvCPe7T/CDh3+BVJh29B4e5CD0kaT4sx5+5CD0kaM4P4gaoLPSRpxBY65z610KOAP23u7z1ooUdzn/AhmoUh6wBOPfXUBZYhScMxKdtOLjTcXeghSWNoQdMyLvSQpPE073B3oYckja+FTMu0cqHHfOfTJGmczDvcXeghSePLZ8tIUgsZ7pLUQoa7JLWQ4S5JLWS4S1ILGe6S1EKGuzRNklOSPJhke5Jnkny2ab8myQ+TPNF8XTDqWqWZuFmHdKj9wOer6vFmFfZjSbY0x75cVX88wtqkvhju0jTNU02nnmz6WpLtwEmjrUo6PIa7NIsky4HTge8AZwHrk1wGbKMzuj9kl7FBP87aR2SoH865SzNI8k7gHuBzVfVT4Hrg3cBKOiP763pdV1WbqmpVVa1atmzZ0OqVuhnuUg9J3kon2G+rqm8AVNWeqjpQVW8AN9B5xLU0lgx3aZp0HnV6I7C9qr7U1X5i12kX03nEtTSWnHOXDnUW8AngqSRPNG1XA5cmWUlne8mdwGdGU540N8NdmqaqHgbS49DmYdcizZfTMpLUQoa7JLWQ0zIamPnej71z44WLXIm09Dhyl6QWMtwlqYUMd0lqIcNdklqotT9Q9eFKkpYyR+6S1EKGuyS1UGunZaRx59ShBsmRuyS1kOEuSS1kuEtSCznnrrEzn7lon0ejcTfsZy05cpekFhpYuCc5L8lzSXYk2TCo7yMNk/1ak2Ig0zJJjgD+E/ARYBfw3ST3V9Wzh/trebuYxsVi9mtp0AY1cj8D2FFVL1bV/wXuBFYP6HtJw2K/1sQY1A9UTwJ+0PV5F/DB7hOSrAPWNR//d5LnBlTLQhwH/N2oi5jFONc31Nry72c9/MuL9G3m7NcwNn17nPvGXCa19oHUPd++Pahw77W5cB30oWoTsGlA339RJNlWVatGXcdMxrm+ca5tAebs1zAefXuS//tPau3jVvegpmV2Aad0fT4ZeGVA30saFvu1Jsagwv27wIokpyV5G7AGuH9A30saFvu1JsZApmWqan+S9cBfAkcAN1XVM4P4XgM21tNGjHd941zbvExYv57k//6TWvtY1Z2qQ6YMJUkTzhWqktRChrsktZDh3iXJEUm+l+S/NJ/PTfJ4kieSPJzkH46wtp1Jnmpq2da0HZtkS5Lnm9djxqi2P0ry/SRPJrk3ydGjqG0pGef+O5Nx7tezmYQ+b7gf7LPA9q7P1wMfr6qVwO3Avx5JVW/6cFWt7LqXdgOwtapWAFubz6MyvbYtwK9W1a8BfwNcNbrSloxx778zGed+PZux7vOGeyPJycCFwH/uai7gqOb9LzF+9zSvBm5p3t8CXDTCWg5SVd+qqv3Nx0fo3BOuAZnQ/juTse3Xsxm3Pu/z3N/0H4B/BRzZ1fYvgM1Jfgb8FDhzFIU1CvhWkgL+tFkFeUJV7Qaoqt1Jjh+j2rp9Crhr+GUtKePef2cyzv16NmPf5x25A0k+CuytqsemHfpd4IKqOhn4M+BLQy/uTWdV1QeA84Erk3xohLVMN2NtSf4A2A/cNqri2m5C+u9Mxrlfz2bs+7wj946zgI8luQB4B3BUkgeAf1RV32nOuQv45qgKrKpXmte9Se6l84TCPUlObEY3JwJ7x6i2h5KsBT4KnFsuqBikse+/Mxnnfj2bSejzjtyBqrqqqk6uquV0lpT/Nzrzfr+U5D3NaR/h4B9WDU2SX0xy5NR74DeBp+ksfV/bnLYWuG9caktyHvAF4GNV9fqw61pKxr3/zmSc+/VsJqXPO3KfQbPU/NPAPUneAH5CZx5tFE4A7k0Cnf9nt1fVN5N8F7g7yeXAy8AlY1TbDuDtwJbm2CNVdcUI6luSxqz/zmSc+/VsJqLP+/gBSWohp2UkqYUMd0lqIcNdklrIcJekFjLcJamFDHdJaiHDXZJa6P8Bm7zT9gVfoygAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot our two random variables\n", "_, ax = plt.subplots(1, 2)\n", "ax[0].hist(data[:, 0]); ax[0].set_title('D1');\n", "ax[1].hist(data[:, 1]); ax[1].set_title('D2');" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Check out how the data relates to each other\n", "plt.scatter(data[:, 0], data[:, 1]);\n", "\n", "# Add title and labels\n", "plt.title('Simulated Data', fontsize=16, fontweight='bold')\n", "plt.xlabel('D1', fontsize=14);\n", "plt.ylabel('D2', fontsize=14);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, there are features are indeed correlated. \n", "\n", "\n", "Note that one way to think about PCA is as a 'rotation' of the data to a new basis. If we want to choose a single dimension to represent this data, we can see that choosing one or the other of the original dimensions (the X or Y dimension in the plot) would not be ideal. What we want to do with PCA is chose a new set of dimension - like drawing new axes into our plot - to best represent our data.\n", "\n", "\n", "\n", "\n", "In this case, we have 2-dimensions of data. What we want to do, with PCA, is chose a lower dimensional (in this case, 1D) representation of this data that preserves the most information from the data that we can, given the new dimensionality.\n", "\n", "Note that in this example, we are only going from 2D -> 1D, for simplicity and convenience. In practice is most useful when there is a very large number of dimensions, say 20,000, and want to transform the data into a lower dimensional space, maybe something like 20 dimensions, that is more manageable and usable for further analyses." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Applying PCA\n", "\n", "Now, we want to apply PCA to our data, to reduce it's dimensionality, while capturing the most information we can from the original space.\n", "\n", "To do so, we will use the PCA implementation from `sklearn`.\n", "\n", "We will use the `PCA` object to initialize a `PCA` model specifying any settings we want, that we can then apply to the data. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Initialize the PCA model, here specifying 1 component\n", "pca = PCA(n_components=1, whiten=True)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Fit PCA to the data\n", "pca = pca.fit(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `pca` object has now learned the principal component representation of our data. \n", "\n", "We can now apply this to our original data with `transform`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Transform the data, using our learned PCA representation\n", "out = pca.transform(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The returned variable is a new array, with our data, after dimensionality reduction. \n", "\n", "Recall that are original data was 2 dimnensional. Our transformed data is now 1 dimensional." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original data dimensions: \t (1000, 2)\n", "Transformed data dimensions: \t (1000, 1)\n" ] } ], "source": [ "# Check out the dimensions of the data\n", "print(\"Original data dimensions: \\t\", data.shape)\n", "print(\"Transformed data dimensions: \\t\", out.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By reducing the dimensionality, we off course lose at least some information.\n", "\n", "Using PCA, we are nevertheless trying to preserve as much variance as we can. \n", "\n", "Next, let's check how much variance we have kept. \n", "\n", "We can do so, our the sklearn PCA object computes and stores how much explained variance each component captures. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The proportion of variance explained by the first principcal component is 0.8861.\n" ] } ], "source": [ "# Check how much variance is captured by the first component\n", "print(\"The proportion of variance explained by the first \" +\n", " \"principcal component is {:1.4f}.\".format(pca.explained_variance_ratio_[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, let's plot the transformed data. \n", "\n", "Note that in the plot below, the data is 1 dimensional, so the x-axis here is just index number. " ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Check out the transformed data, in the new space\n", "plt.plot(out, '.');\n", "\n", "# Add title and labels\n", "plt.title('Simulated Data', fontsize=16, fontweight='bold')\n", "plt.xlabel('Samples', fontsize=14);\n", "plt.ylabel('PC-1', fontsize=14);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "Dimensionality reduction, and PCA in particular, are common data transformations, especially for large data. \n", "\n", "As for our other topics related to machine learning and data analysis, here we have merely introduced the basic ideas behind dimensionality reduction, and one of the most common algorithms to do so, PCA. For further information on these topics, look into more technical courses or resources. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "For a more in depth tutorial on doing PCA in Python, go\n", "here,\n", "and for a more technical orientation tutorial, go\n", "here.\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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }