Skip to content

Instantly share code, notes, and snippets.

@georgehc
Created October 29, 2019 02:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save georgehc/4b3dccafd78c714e7de28a8f2c611f04 to your computer and use it in GitHub Desktop.
Save georgehc/4b3dccafd78c714e7de28a8f2c611f04 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 94-775/95-865: PCA Demo\n",
"Author: George Chen (georgechen [at symbol] cmu.edu)\n",
"\n",
"This demo is heavily based on Mark Richardson's 2009 \"Principle Component Analysis\" notes and uses data he pulled from DEFRA on 1997 UK food consumption (grams/person/week). This dataset is also used as a nice illustrated example of PCA here:\n",
"http://setosa.io/ev/principal-component-analysis/"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" England Wales Scotland N Ireland\n",
"Cheese 105 103 103 66\n",
"Carcass meat 245 227 242 267\n",
"Other meat 685 803 750 586\n",
"Fish 147 160 122 93\n",
"Fats and oils 193 235 184 209\n",
"Sugars 156 175 147 139\n",
"Fresh potatoes 720 874 566 1033\n",
"Fresh Veg 253 265 171 143\n",
"Other Veg 488 570 418 355\n",
"Processed potatoes 198 203 220 187\n",
"Processed Veg 360 365 337 334\n",
"Fresh fruit 1102 1137 957 674\n",
"Cereals 1472 1582 1462 1494\n",
"Beverages 57 73 53 47\n",
"Soft drinks 1374 1256 1572 1506\n",
"Alcoholic drinks 375 475 458 135\n",
"Confectionary 54 64 62 41\n"
]
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('seaborn') # prettier plots\n",
"import numpy as np\n",
"\n",
"# grams per person per week\n",
"food_data = np.array([[105, 103, 103, 66],\n",
" [245, 227, 242, 267],\n",
" [685, 803, 750, 586],\n",
" [147, 160, 122, 93],\n",
" [193, 235, 184, 209], \n",
" [156, 175, 147, 139],\n",
" [720, 874, 566, 1033],\n",
" [253, 265, 171, 143],\n",
" [488, 570, 418, 355],\n",
" [198, 203, 220, 187],\n",
" [360, 365, 337, 334],\n",
" [1102, 1137, 957, 674],\n",
" [1472, 1582, 1462, 1494],\n",
" [57, 73, 53, 47],\n",
" [1374, 1256, 1572, 1506],\n",
" [375, 475, 458, 135],\n",
" [54, 64, 62, 41]])\n",
"row_labels = ['Cheese',\n",
" 'Carcass meat',\n",
" 'Other meat',\n",
" 'Fish',\n",
" 'Fats and oils',\n",
" 'Sugars',\n",
" 'Fresh potatoes',\n",
" 'Fresh Veg',\n",
" 'Other Veg',\n",
" 'Processed potatoes',\n",
" 'Processed Veg',\n",
" 'Fresh fruit',\n",
" 'Cereals',\n",
" 'Beverages',\n",
" 'Soft drinks',\n",
" 'Alcoholic drinks',\n",
" 'Confectionary']\n",
"column_labels = ['England', 'Wales', 'Scotland', 'N Ireland']\n",
"\n",
"first_column_width = 20\n",
"other_columns_width = 15\n",
"\n",
"# print header\n",
"print(\"\".ljust(first_column_width), end='')\n",
"for column_label in column_labels:\n",
" print(column_label.rjust(other_columns_width), end='')\n",
"print()\n",
"\n",
"# print each row in the numpy array with a column label\n",
"for row_label, row in zip(row_labels, food_data):\n",
" print(row_label.ljust(first_column_width), end='')\n",
" print(\"\".join([(\"%d\" % x).rjust(other_columns_width) for x in row]))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 105, 245, 685, 147, 193, 156, 720, 253, 488, 198, 360,\n",
" 1102, 1472, 57, 1374, 375, 54],\n",
" [ 103, 227, 803, 160, 235, 175, 874, 265, 570, 203, 365,\n",
" 1137, 1582, 73, 1256, 475, 64],\n",
" [ 103, 242, 750, 122, 184, 147, 566, 171, 418, 220, 337,\n",
" 957, 1462, 53, 1572, 458, 62],\n",
" [ 66, 267, 586, 93, 209, 139, 1033, 143, 355, 187, 334,\n",
" 674, 1494, 47, 1506, 135, 41]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"food_data.T"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([<matplotlib.axis.XTick at 0x1135c8b50>,\n",
" <matplotlib.axis.XTick at 0x113a91450>,\n",
" <matplotlib.axis.XTick at 0x10c2e0cd0>,\n",
" <matplotlib.axis.XTick at 0x11619e790>,\n",
" <matplotlib.axis.XTick at 0x11619ed10>,\n",
" <matplotlib.axis.XTick at 0x11619e9d0>,\n",
" <matplotlib.axis.XTick at 0x1161ae690>,\n",
" <matplotlib.axis.XTick at 0x1161aec90>,\n",
" <matplotlib.axis.XTick at 0x1161b42d0>,\n",
" <matplotlib.axis.XTick at 0x1161b48d0>,\n",
" <matplotlib.axis.XTick at 0x1161b4e90>,\n",
" <matplotlib.axis.XTick at 0x1161bd4d0>,\n",
" <matplotlib.axis.XTick at 0x1161bdad0>,\n",
" <matplotlib.axis.XTick at 0x1161bd850>,\n",
" <matplotlib.axis.XTick at 0x1161b4650>,\n",
" <matplotlib.axis.XTick at 0x1161ae450>,\n",
" <matplotlib.axis.XTick at 0x1161c4710>],\n",
" <a list of 17 Text xticklabel objects>)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.bar(range(len(row_labels)), food_data[:, 0])\n",
"plt.xticks(range(len(row_labels)), row_labels, rotation=90)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([<matplotlib.axis.XTick at 0x1162bc250>,\n",
" <matplotlib.axis.XTick at 0x116235950>,\n",
" <matplotlib.axis.XTick at 0x1162356d0>,\n",
" <matplotlib.axis.XTick at 0x116305450>,\n",
" <matplotlib.axis.XTick at 0x116305dd0>,\n",
" <matplotlib.axis.XTick at 0x11630d410>,\n",
" <matplotlib.axis.XTick at 0x11630da50>,\n",
" <matplotlib.axis.XTick at 0x11630de10>,\n",
" <matplotlib.axis.XTick at 0x11630dbd0>,\n",
" <matplotlib.axis.XTick at 0x116305d50>,\n",
" <matplotlib.axis.XTick at 0x116315a10>,\n",
" <matplotlib.axis.XTick at 0x116315e10>,\n",
" <matplotlib.axis.XTick at 0x11631b690>,\n",
" <matplotlib.axis.XTick at 0x11631bc90>,\n",
" <matplotlib.axis.XTick at 0x1163252d0>,\n",
" <matplotlib.axis.XTick at 0x1163258d0>,\n",
" <matplotlib.axis.XTick at 0x116325ed0>],\n",
" <a list of 17 Text xticklabel objects>)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.bar(range(len(row_labels)), food_data[:, 1])\n",
"plt.xticks(range(len(row_labels)), row_labels, rotation=90)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.decomposition import PCA\n",
"\n",
"single_dimension_pca = PCA(n_components=1) # project data down to a single dimension\n",
"\n",
"single_dimension_pca.fit(food_data.T)\n",
"\n",
"single_dimension_food_data = single_dimension_pca.transform(food_data.T)[:, 0]\n",
"\n",
"# matplotlib doesn't have a built-in 1D scatter plot but we can\n",
"# just use a 2D scatter plot with y-axis values all set to 0\n",
"y_axis_all_zeros = np.zeros(len(single_dimension_food_data))\n",
"\n",
"plt.scatter(single_dimension_food_data, y_axis_all_zeros)\n",
"for idx in range(len(single_dimension_food_data)):\n",
" plt.annotate(column_labels[idx], (single_dimension_food_data[idx], y_axis_all_zeros[idx]), rotation=90)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.67444346])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"single_dimension_pca.explained_variance_ratio_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For any data point in the original 17-dimensional space, we can see what the PCA single-dimensional representation is using the `transform` function. For example, in the next cell, we compute the 1D projections for both England and Wales. However, we could actually plug in data that we didn't fit the PCA model with (for example, if we collected the 17 measurements for Pennsylvania, we could use it with transform as well, etc)."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[array([ 105, 245, 685, 147, 193, 156, 720, 253, 488, 198, 360,\n",
" 1102, 1472, 57, 1374, 375, 54]),\n",
" array([ 103, 227, 803, 160, 235, 175, 874, 265, 570, 203, 365,\n",
" 1137, 1582, 73, 1256, 475, 64])]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[food_data[:, 0], food_data[:, 1]]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-144.99315218],\n",
" [-240.52914764]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"single_dimension_pca.transform([food_data[:, 0], food_data[:, 1]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Interpretation\n",
"\n",
"How do we interpret the low-dimensional representation? Why is North Ireland so far away from the other points? One way to try to answer this question is to first look at what features (i.e., what specific food/drink items) are being assigned high weight by PCA:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.05695538 0.04792763 -0.25891666 -0.08441498 -0.00519362 -0.03762098\n",
" 0.40140206 -0.15184994 -0.24359373 -0.02688623 -0.03648827 -0.6326409\n",
" -0.04770286 -0.02618776 0.23224414 -0.46396817 -0.0296502 ]\n"
]
}
],
"source": [
"print(single_dimension_pca.components_[0]) # index 0 is for the 1st principal component (since Python starts counting at 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Importantly, how PCA (that has already been fitted) actually projects a data point to 1D is to take a weighted combination using the above weights (although it first subtracts off the feature means). Specifically, here are the calculations for England and Wales:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-144.99315218207673"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inner(single_dimension_pca.components_[0],\n",
" food_data[:, 0] - single_dimension_pca.mean_)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-240.52914763517668"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inner(single_dimension_pca.components_[0],\n",
" food_data[:, 1] - single_dimension_pca.mean_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Weights with larger absolute value correspond to features that lead to the largest spread along the projected 1D axis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's some code to rank the weights by largest absolute value to smallest absolute value:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fresh fruit : -0.6326408978722375\n",
"Alcoholic drinks : -0.46396816797670637\n",
"Fresh potatoes : 0.4014020602962481\n",
"Other meat : -0.25891665833612115\n",
"Other Veg : -0.24359372899027432\n",
"Soft drinks : 0.23224414047289457\n",
"Fresh Veg : -0.1518499415623022\n",
"Fish : -0.08441498252508357\n",
"Cheese : -0.056955379785685246\n",
"Carcass meat : 0.04792762813468533\n",
"Cereals : -0.047702858373648974\n",
"Sugars : -0.03762098283940197\n",
"Processed Veg : -0.03648826911159384\n",
"Confectionary : -0.029650201087993877\n",
"Processed potatoes : -0.026886232536746935\n",
"Beverages : -0.026187755908533464\n",
"Fats and oils : -0.005193622660047768\n"
]
}
],
"source": [
"abs_val_of_1st_principal_component_weights = np.abs(single_dimension_pca.components_[0])\n",
"\n",
"# in the previous lecture we saw the `sorted` function; now we introduce numpy's `argsort`,\n",
"# which does *not* return the sorted list but instead returns the rearranged indices that\n",
"# would sort the list (put another way, it returns rankings)\n",
"ranking_of_largest_to_smallest = np.argsort(-abs_val_of_1st_principal_component_weights) # use negative to get largest to smallest\n",
"\n",
"# now print out the food items having highest to lowest absolute value weight\n",
"for rank in ranking_of_largest_to_smallest:\n",
" print(row_labels[rank], ':', single_dimension_pca.components_[0][rank])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"At this point, we leave the following as an exercise to you: for a few of the food/drink items with the highest absolute value weight, compare the values between the different regions of the UK. Can you see why North Ireland is considered very different from the other regions?"
]
}
],
"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": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment