Skip to content

Instantly share code, notes, and snippets.

@georgehc
Last active March 23, 2022 18:36
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/7bb86570f0556b1c1562620cce6e7c75 to your computer and use it in GitHub Desktop.
Save georgehc/7bb86570f0556b1c1562620cce6e7c75 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: More on PCA, Argsort\n",
"Author: Erick Rodriguez (erickger [at symbol] cmu.edu)\n",
"\n",
"This demo is 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": "markdown",
"metadata": {},
"source": [
"#### Creating the dataset"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('seaborn') # prettier plots\n",
"import numpy as np\n",
"import pandas as pd\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']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Looking at the table with a dataframe"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>England</th>\n",
" <th>Wales</th>\n",
" <th>Scotland</th>\n",
" <th>N. Ireland</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Cheese</th>\n",
" <td>105</td>\n",
" <td>103</td>\n",
" <td>103</td>\n",
" <td>66</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Carcass meat</th>\n",
" <td>245</td>\n",
" <td>227</td>\n",
" <td>242</td>\n",
" <td>267</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Other meat</th>\n",
" <td>685</td>\n",
" <td>803</td>\n",
" <td>750</td>\n",
" <td>586</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fish</th>\n",
" <td>147</td>\n",
" <td>160</td>\n",
" <td>122</td>\n",
" <td>93</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fats and oils</th>\n",
" <td>193</td>\n",
" <td>235</td>\n",
" <td>184</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sugars</th>\n",
" <td>156</td>\n",
" <td>175</td>\n",
" <td>147</td>\n",
" <td>139</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fresh potatoes</th>\n",
" <td>720</td>\n",
" <td>874</td>\n",
" <td>566</td>\n",
" <td>1033</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fresh Veg</th>\n",
" <td>253</td>\n",
" <td>265</td>\n",
" <td>171</td>\n",
" <td>143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Other Veg</th>\n",
" <td>488</td>\n",
" <td>570</td>\n",
" <td>418</td>\n",
" <td>355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Processed potatoes</th>\n",
" <td>198</td>\n",
" <td>203</td>\n",
" <td>220</td>\n",
" <td>187</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Processed Veg</th>\n",
" <td>360</td>\n",
" <td>365</td>\n",
" <td>337</td>\n",
" <td>334</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fresh fruit</th>\n",
" <td>1102</td>\n",
" <td>1137</td>\n",
" <td>957</td>\n",
" <td>674</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Cereals</th>\n",
" <td>1472</td>\n",
" <td>1582</td>\n",
" <td>1462</td>\n",
" <td>1494</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Beverages</th>\n",
" <td>57</td>\n",
" <td>73</td>\n",
" <td>53</td>\n",
" <td>47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Soft drinks</th>\n",
" <td>1374</td>\n",
" <td>1256</td>\n",
" <td>1572</td>\n",
" <td>1506</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Alcoholic drinks</th>\n",
" <td>375</td>\n",
" <td>475</td>\n",
" <td>458</td>\n",
" <td>135</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Confectionary</th>\n",
" <td>54</td>\n",
" <td>64</td>\n",
" <td>62</td>\n",
" <td>41</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 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"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"food_df = pd.DataFrame(food_data, columns=column_labels, index=row_labels)\n",
"food_df.head(20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Running PCA"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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FqiyslLff39YJ0+eZDofgJF++9tJevjhP6pZs+YaMmSIvvvugA4c+FYjR45Rbu5X6tz5Ci1btlLp6elavny5e7vqC6DVtfCNnrr/MYfDoREjRsnlcum11zZp+/ZULVu2Uh999IHeeusNPfXUM1qz5lldeeXVuuyyTjp48N8qLS1Vt25X/uyyhhe7m24aqqioPnr77Tc1alSCBg++SadOnZKfn59atGipdevWKi7uZhUVndCDDybqm29y1blzFz355OOyLEsxMQMUGRlVb9PpsbE3SDr9Xc5hYd00efJ4paSs0sGD3+n3v5+ma67pKafTqffee1uHDx9UZOR1GjZsONP5AIxzySWX6te/vkXNmvlr585PFB8/Rq++ulGZmV+odes2ys39Sq1atdKll16qw4cPa8eOHYqKilKHDh0knT74/G876X/miL6al5eX4uNHa/LkKVqyZL6eeGKRJkyYrAMHvtWJEyd02WWX6c03/67XXtuk1atX6tFH57iv9iY1nmnlli1b6fbbJ2jw4Jsknb64Q1RUH7Vt207Hjx/Xu+/+Q507X6E9ezI0a9YcZWdn6dixfF16aTu99dYbSkqaUWM6vz5OVIyMjJKPj4969YpQcvJi5ebmqKKiXP3736CDB7/TwYP/VmTkdcrOztLcuYkqLS1xb8vRPQCT2O12zZo1R9HRMfr3v79Ts2bNNW3aDBUUFMjpdKpNmzbavXu3VqxYoSVLlmj+/PkqKytzl/x/c3T/P1f01WJi+mvBgsf12GNL1K9frJ5/fpV69uyl7747oE8//UQVFeX605/+rKuvvkZffZXt3u5MZ7s3Jv7+/kpO/quio2O0ePFjat26tfr1i9Xmza8pOjpWCQm36957pysgIFDl5eVyuVyqqKhwX7px+/aPdepU3T//3qRJE82d+6hGj05QZuZeXXvtdfLy8tK3336ra67poWHDhmvWrNkqLCzQyZMnJUnHjx93H91v2/aRCgqOnf8DAQAXifvu+70cDoemTr1TWVn7FBkZqebNm2vnzp269957tWzZMuXl5ekf//iHe5vqwj+Xj0r/z0zd/5KYmP4qLy/X9df31VVXdVdubo6iovqorKxMc+cm6uDB7/Tb307WF1/sUWrqh7riiq4aPHhIo712e1VVlex2uwYMGKj+/W/U0aNHtHnz66qoqFDPnuGqrKzUvn2ZcrlcstvtevHFvyk7e5969oxQXNwNeuWVjQoICFCvXhHnNY7w8N4KD++tgwf/raysfTp06N/ub4Zas+ZZtWoVIj8/PyUnL1FOTrZ69eqtiIjeSkv7TGVl5brxxkH18XAAgMf5+Pho+vRZOnLkP9q27SO1aNFCGRkZstvtuvXWWyVJmZmZGjFihE6ePKnt27crICBA119/vfbu3auPP/5Y99xzjwICAs74+xtnW9UzHx8f3XTTULVr115VVZXKyflKt932/2no0N+obdt26tPner300lo1b95c27en6q9/Ta63C840tOoj46qqKtlsNrVpc4n6979B8fFjdOmlbXX48EHt2pWmiIhIpaV9qk8//URTp87Q0aNHNGfOHF177XXq1KlzvY2nffsOGjBgoIYNu1WXXXa58vPz9fbbb2rWrNl64onFCgwM1IoVq92fmmjePFjXX9+33u4fAC4Wbdpcovj4MYqKitLBgwc1aNDpA5rnnntOXbp00fXXX6977rlHGRkZevbZZ7Vw4UKlpqbKz8/vF0teouh/ZsCAgerXL1ZTp96lL77Yo2nTZurIkSOKiemvyspKTZ8+SyEhbRrdCXo/VV34lmWpadNm6tq1myzL0jfffK3CwgINHBinjRvXaeLEO3XJJZeqe/cestlsuvba69S0abN6H0v1hSK2bHlHvXpFyG53KCtrn/ub8Tp2vEyBgYGKjLxO/v7+jeZKhgDw32rWrJmSkpLUt29flZeX6/HHH1dSUpKWL1+usLAwzZo1SykpKcrPz1deXp7GjRtX6+/7n5+6P5NBg4Zo4MA45efnKTi4hf70pwW69977lZ6epmeeWa74+NGN4mI65+LHOyw2m02xsTfoqqu6y8/PTy1btlRERKQkKT39M40cOVIdO152Qcczduzt7rcXuna9UseO5auiolKFhYW64oqu6t79mp+NGwBMVH2FvEceeUSdOnWSt7e3YmJiJEl5eXny8/NT37591aJFi1p/D0X/C2w2m0JCWquyslItW7bSvHkPavDgm5Sb+5Xatm3n6eFdENUf2wgJaS1JCgvrpqlT75S/v78cDm/16dNH3t7eF3wc1ec/XHnl1VqwYJ4cDodat26jkSPH1hgnAJjMy8tLvr6+GjPm9NeBBwcH68knn9TkyZO1b98+eXt7Ky4u7qy/x2Zd5HOgeXnFnh6CpNPXKf788091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\n",
"text/plain": [
"<Figure size 576x396 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.decomposition import PCA\n",
"\n",
"# instantiate PCA class\n",
"single_dimension_pca = PCA(n_components=1)\n",
"# use our pca to fit and transform the whole dataset\n",
"single_dimension_food_data = single_dimension_pca.fit_transform(food_data.T)\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",
"plt.scatter(single_dimension_food_data, y_axis_all_zeros)\n",
"\n",
"for idx in range(len(single_dimension_food_data)):\n",
" plt.annotate(column_labels[idx], (single_dimension_food_data[idx] - 15, y_axis_all_zeros[idx]-0.011), rotation=-30)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Explaining the results"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For this we can plot the data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(8,8))\n",
"\n",
"ax1.bar(range(len(row_labels)), food_data[:, 0])\n",
"ax1.set_title(column_labels[0])\n",
"ax1.set_xticks(range(len(row_labels)))\n",
"ax1.set_xticklabels(row_labels, rotation=90)\n",
"\n",
"ax2.bar(range(len(row_labels)), food_data[:, 1])\n",
"ax2.set_title(column_labels[1])\n",
"ax2.set_xticks(range(len(row_labels)))\n",
"ax2.set_xticklabels(row_labels, rotation=90)\n",
"\n",
"ax3.bar(range(len(row_labels)), food_data[:, 2])\n",
"ax3.set_title(column_labels[2])\n",
"ax3.set_xticks(range(len(row_labels)))\n",
"ax3.set_xticklabels(row_labels, rotation=90)\n",
"\n",
"ax4.bar(range(len(row_labels)), food_data[:, 3])\n",
"ax4.set_title(column_labels[3])\n",
"ax4.set_xticks(range(len(row_labels)))\n",
"ax4.set_xticklabels(row_labels, rotation=90)\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some reasons?\n",
"\n",
"- Northern Ireland eat way more grams of fresh potatoes and way fewer of fresh fruits, cheese, fish and alcoholic drinks\n",
"- It turns out that Northern Ireland is the only of the four countries not on the island of Great Britain"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Using PCA with 2 components instead of two"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# similarly we define a PCA with two components\n",
"two_dimension_pca = PCA(n_components=2)\n",
"two_dimension_food_data = two_dimension_pca.fit_transform(food_data.T)\n",
"\n",
"# Notice that this is another way of plotting subplots\n",
"# ----------------------------------------------------\n",
"plt.figure(figsize=(12,8))\n",
"\n",
"plt.subplot(2,2,1) #upper left figure\n",
"plt.scatter(two_dimension_food_data[:,0], two_dimension_food_data[:,1])\n",
"for idx in range(len(two_dimension_food_data)):\n",
" plt.annotate(column_labels[idx], (two_dimension_food_data[:,0][idx], two_dimension_food_data[:,1][idx]), rotation=0)\n",
"plt.axis('equal')\n",
"plt.xlabel(\"PC1\")\n",
"plt.ylabel(\"PC2\")\n",
"\n",
"# note this is the first PC, and it is completely the same with the one with only one PC.\n",
"plt.subplot(2,2,3) #lower left figure\n",
"plt.scatter(two_dimension_food_data[:,0], y_axis_all_zeros)\n",
"for idx in range(len(two_dimension_food_data)):\n",
" plt.annotate(column_labels[idx], (two_dimension_food_data[:,0][idx], y_axis_all_zeros[idx]), rotation=90)\n",
"plt.axis('equal')\n",
"plt.xlabel(\"PC1\")\n",
"\n",
"plt.subplot(2,2,2) #upper right figure\n",
"plt.scatter(y_axis_all_zeros, two_dimension_food_data[:,1])\n",
"for idx in range(len(two_dimension_food_data)):\n",
" plt.annotate(column_labels[idx], (y_axis_all_zeros[idx], two_dimension_food_data[:,1][idx]), rotation=0)\n",
"plt.axis('equal')\n",
"plt.ylabel(\"PC2\")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### PCA Results"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data points for decomposition into 1 dimension:\n",
"\n",
"[[-144.99315218]\n",
" [-240.52914764]\n",
" [ -91.869339 ]\n",
" [ 477.39163882]]\n",
"\n",
"\n",
"Data points for decomposition into 2 dimensions:\n",
"\n",
"[[-144.99315218 -2.53299944]\n",
" [-240.52914764 -224.64692488]\n",
" [ -91.869339 286.08178613]\n",
" [ 477.39163882 -58.90186182]]\n"
]
}
],
"source": [
"print('Data points for decomposition into 1 dimension:\\n')\n",
"print(single_dimension_food_data)\n",
"print('\\n\\nData points for decomposition into 2 dimensions:\\n')\n",
"print(two_dimension_food_data)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The explained ratio for decomposition into 1 dimension is 0.6744434639658383\n",
"\n",
"The explained ratio for decomposition into 2 dimensions is 0.6744434639658383 and 0.2905247457687653\n"
]
}
],
"source": [
"print('The explained ratio for decomposition into 1 dimension is', single_dimension_pca.explained_variance_ratio_[0])\n",
"print('\\nThe explained ratio for decomposition into 2 dimensions is', two_dimension_pca.explained_variance_ratio_[0], \n",
" 'and', two_dimension_pca.explained_variance_ratio_[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Differences among fit, transform, and fit_transform"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When we fit the data before by doing `single_dimension_pca.fit_transform(food_data.T)` we actually runned two methods `fit()` and `transform()`. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Usually this is really helpfull when we create machine learning models because we can fit the model and then inject new data to be \"transformed\" or predicted. That is `fit()` fits the model to the data we sent as a parameter."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"one_dim_pca = PCA(n_components=1)\n",
"one_dim_pca_fitted_model = single_dimension_pca.fit(food_data.T)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can look at results by using our original data"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-144.99315218]\n",
" [-240.52914764]\n",
" [ -91.869339 ]\n",
" [ 477.39163882]]\n"
]
}
],
"source": [
"one_dim_pca_results = one_dim_pca_fitted_model.transform(food_data.T)\n",
"print(one_dim_pca_results)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-144.99315218],\n",
" [-240.52914764]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"one_dim_pca_fitted_model.transform([food_data[:, 0], food_data[:, 1]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, we could actually plug in new data that we didn't fit within the PCA model (for example, if we collected the 17 measurements for Adelaide, we could use it with transform as well, etc)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 484.47359517 1003.78728718 204.1914698 1475.50723778 722.03408653\n",
" 711.97483101 1499.54233132 1120.25632558 805.87393719 148.20492434\n",
" 1463.63024046 782.35846181 598.6838294 1498.31158392 732.81067896\n",
" 918.6504853 1360.41649568]\n"
]
}
],
"source": [
"# Let's imagine this is the data for Adelaide\n",
"adelaide_data = np.random.uniform(low=100, high=1500, size=(17,))\n",
"print(adelaide_data)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The results for using our moodel with Adelaide's dataset is: -310.45684057498056\n"
]
}
],
"source": [
"# Now let's see what are the results on this\n",
"print(\"The results for using our moodel with Adelaide's dataset is: \", \n",
" one_dim_pca_fitted_model.transform([adelaide_data])[0][0])"
]
},
{
"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": 13,
"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_) # index 0 is for the 1st principal component"
]
},
{
"cell_type": "code",
"execution_count": 14,
"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",
"[ 0.01601285 0.01391582 -0.01533114 -0.05075495 -0.09538866 -0.0430217\n",
" -0.71501708 -0.14490027 -0.22545092 0.04285076 -0.0454518 -0.17774074\n",
" -0.21259968 -0.03056054 0.55512431 0.11353652 0.00594992]\n"
]
}
],
"source": [
"print(two_dimension_pca.components_[0])\n",
"print(two_dimension_pca.components_[1])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Fresh fruit' 'Alcoholic drinks' 'Fresh potatoes' 'Other meat'\n",
" 'Other Veg' 'Soft drinks' 'Fresh Veg' 'Fish' 'Cheese' 'Carcass meat'\n",
" 'Cereals' 'Sugars' 'Processed Veg' 'Confectionary' 'Processed potatoes'\n",
" 'Beverages' 'Fats and oils']\n"
]
}
],
"source": [
"importance_idx = np.argsort(-abs(two_dimension_pca.components_[0]))\n",
"# print row_labels in descending importance order\n",
"print(np.asarray(row_labels)[importance_idx])\n",
"# if interested, you could refer to the bar chart to verify"
]
},
{
"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": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Single dimension PCA means:\n",
" [ 94.25 245.25 706. 130.5 205.25 154.25 798.25 208. 457.75\n",
" 202. 349. 967.5 1502.5 57.5 1427. 360.75 55.25]\n",
"\n",
"Two dimensions PCA means:\n",
" [ 94.25 245.25 706. 130.5 205.25 154.25 798.25 208. 457.75\n",
" 202. 349. 967.5 1502.5 57.5 1427. 360.75 55.25]\n"
]
}
],
"source": [
"print('Single dimension PCA means:\\n', single_dimension_pca.mean_)\n",
"print('\\nTwo dimensions PCA means:\\n', two_dimension_pca.mean_)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-144.99315218207676"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inner(single_dimension_pca.components_[0], food_data[:, 0] - single_dimension_pca.mean_)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-240.52914763517666"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inner(single_dimension_pca.components_[0],\n",
" food_data[:, 1] - single_dimension_pca.mean_)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-2.5329994370406337"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inner(two_dimension_pca.components_[1],\n",
" food_data[:, 0] - two_dimension_pca.mean_)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-224.64692488126894"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inner(two_dimension_pca.components_[1],\n",
" food_data[:, 1] - two_dimension_pca.mean_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Argsort"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the previous lecture we saw the `sorted` function; now we introduce numpy's `argsort`, which does *not* return the sorted list but instead returns the rearranged indices that would sort the list (put another way, it returns rankings)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Going back to our previous exmaple with the food data, in PCA, weights with larger absolute value correspond to features that lead to the largest spread along the projected 1D axis. Here's some code to rank the weights by largest absolute value to smallest absolute value:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index Food Absolute Value\n",
"----- -------------------- ----------------------\n",
"11 Fresh fruit -0.6326408978722377 \n",
"15 Alcoholic drinks -0.4639681679767063 \n",
"6 Fresh potatoes 0.40140206029624825 \n",
"2 Other meat -0.25891665833612104 \n",
"8 Other Veg -0.24359372899027432 \n",
"14 Soft drinks 0.2322441404728945 \n",
"7 Fresh Veg -0.15184994156230222 \n",
"3 Fish -0.08441498252508359 \n",
"0 Cheese -0.05695537978568534 \n",
"1 Carcass meat 0.04792762813468509 \n",
"12 Cereals -0.04770285837364884 \n",
"5 Sugars -0.03762098283940194 \n",
"10 Processed Veg -0.03648826911159385 \n",
"16 Confectionary -0.029650201087993867 \n",
"9 Processed potatoes -0.026886232536746928 \n",
"13 Beverages -0.026187755908533446 \n",
"4 Fats and oils -0.0051936226600476955\n"
]
}
],
"source": [
"abs_1PC_weights = np.abs(single_dimension_pca.components_[0])\n",
"\n",
"ranking_abs_1PC_weights = np.argsort(-abs_1PC_weights) # use negative to get largest to smallest\n",
"\n",
"# Printing out the food items from highest to lowest absolute value weight\n",
"print(\"{0:5} {1:20} {2:10}\".format('Index', 'Food', 'Absolute Value'))\n",
"print(\"{0:5} {1:20} {2:22}\".format('-----', '--------------------', '----------------------'))\n",
"for index in ranking_abs_1PC_weights:\n",
" print(\"{0:5} {1:20} {2:22}\".format(str(index), row_labels[index], str(single_dimension_pca.components_[0][index])))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Using argsort with our example"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-144.99315218],\n",
" [-240.52914764],\n",
" [ -91.869339 ],\n",
" [ 477.39163882]])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"single_dimension_food_data"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"N. Ireland : 477.3916388161171\n",
"Scotland : -91.86933899886361\n",
"England : -144.99315218207673\n",
"Wales : -240.52914763517657\n"
]
}
],
"source": [
"ranking_of_region_from_large_to_small_1st_component = \\\n",
"np.argsort(-(single_dimension_food_data[:,0] - np.average(single_dimension_food_data[:,0])))\n",
"\n",
"for index in ranking_of_region_from_large_to_small_1st_component:\n",
" print(column_labels[index], \":\", single_dimension_food_data[index,0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Using argsort with a dictionary"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"from collections import Counter\n",
"dict_fruits = {\"apple\":10, \"pear\":7, \"banana\":11, \"grape\":20, \"orange\":12}\n",
"stock = Counter(dict_fruits)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('grape', 20), ('orange', 12), ('banana', 11), ('apple', 10), ('pear', 7)]"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted(stock.items(), reverse=True, key = lambda x:x[1])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([-1, -2])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.dot(-1, [1,2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Task:** Try to return a list in descending order based on the stock with argsort.\n",
"\n",
"Useful methods:\n",
"- Counter.keys()\n",
"- Counter.values()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['grape', 'orange', 'banana', 'apple', 'pear'], dtype='<U6')"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_index = np.argsort(np.dot(-1, list(stock.values())))\n",
"\n",
"# another way to do it in desecending order\n",
"# sorted_index = np.argsort(list(stock.values()))[::-1]\n",
"\n",
"sorted_stock_keys = np.array(list(stock.keys()))\n",
"sorted_stock_keys[sorted_index]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Using argsort with matrices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Suppose we have a list of fruits with their respective prices. These prices correspond to 4 states in the Australia.\n",
"\n",
"**Tasks:** \n",
"- Give a list of the fruits from the most expensive to the cheapest. This thinking that each row correspond to one state.\n",
"- Now, do the same, but now think that the states are actually the columns of the matrix."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"fruits = np.array([['apple', 'banana', 'kiwi', 'passionfruit'], \n",
" ['mango', 'orange', 'mandarin', 'citrus'], \n",
" ['watermelon', 'rockmelon', 'papaya', 'grape'], \n",
" ['plum', 'peach', 'apricot', 'lychee']])\n",
"\n",
"fruit_prices = np.array([[5,3,12,1],\n",
" [12,5,3,9],\n",
" [2,6,1,19],\n",
" [1,5,4,14]])"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[3 0 2 0]\n",
" [2 1 1 1]\n",
" [0 3 3 3]\n",
" [1 2 0 2]]\n",
"\n",
"[[3 1 0 2]\n",
" [2 1 3 0]\n",
" [2 0 1 3]\n",
" [0 2 1 3]]\n"
]
}
],
"source": [
"#return index matrix sorting by column\n",
"print(np.argsort(fruit_prices, axis=0))\n",
"print()\n",
"\n",
"#return index matrix sorting by row\n",
"print(np.argsort(fruit_prices, axis=1))"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[3, 1, 0, 2],\n",
" [2, 1, 3, 0],\n",
" [2, 0, 1, 3],\n",
" [0, 2, 1, 3]])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_fruits = np.argsort(fruit_prices, axis=1)\n",
"sorted_fruits"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['passionfruit' 'banana' 'apple' 'kiwi']\n",
"['mandarin' 'orange' 'citrus' 'mango']\n",
"['papaya' 'watermelon' 'rockmelon' 'grape']\n",
"['plum' 'apricot' 'peach' 'lychee']\n"
]
},
{
"data": {
"text/plain": [
"[None, None, None, None]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# To show the results of this in terms of the labels you can do as follow\n",
"[print(fruit[sorted_fruits[idx]]) for idx,fruit in enumerate(fruits)]"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([['passionfruit', 'banana', 'apple', 'kiwi'],\n",
" ['mandarin', 'orange', 'citrus', 'mango'],\n",
" ['papaya', 'watermelon', 'rockmelon', 'grape'],\n",
" ['plum', 'apricot', 'peach', 'lychee']], dtype='<U12')"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# You can also use \n",
"np.take_along_axis(fruits, sorted_fruits, axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise2 [From demo Co-Occurrence Analysis for Finding Possible Relationships]**\n",
"\n",
"Output the rankings of each pair given the lists of strings for rows and columns"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.64077 -0.69395 0.10908]\n",
" [ 3.12862 -0.66153 -4.18042]\n",
" [-1.35837 3.71773 -5.93045]]\n"
]
}
],
"source": [
"#Get the PMI table and lists of names and companies\n",
"np.set_printoptions(precision=5, suppress=True)\n",
"co_occurrence_table = np.array([[1500, 1000, 20000],\n",
" [1000, 50, 50],\n",
" [30, 700, 10]])\n",
"joint_prob_table = co_occurrence_table / co_occurrence_table.sum()\n",
"\n",
"people_prob = joint_prob_table.sum(axis=1)\n",
"company_prob = joint_prob_table.sum(axis=0)\n",
"joint_prob_table_if_people_and_companies_were_indep = np.outer(people_prob, company_prob)\n",
"PMI = np.log2(joint_prob_table / joint_prob_table_if_people_and_companies_were_indep)\n",
"names = ['Elon Musk', 'Sundar Pichai', 'Lisa Su']\n",
"companies = ['Alphabet', 'AMD', 'Tesla']\n",
"print(PMI)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(3.7177319921974163, 'Lisa Su', 'AMD'),\n",
" (3.1286163542694836, 'Sundar Pichai', 'Alphabet'),\n",
" (0.10908256065923522, 'Elon Musk', 'Tesla'),\n",
" (-0.6407707175891003, 'Elon Musk', 'Alphabet'),\n",
" (-0.6615292777558972, 'Sundar Pichai', 'AMD'),\n",
" (-0.693950755448275, 'Elon Musk', 'AMD'),\n",
" (-1.3583709868883753, 'Lisa Su', 'Alphabet'),\n",
" (-4.18042405653575, 'Sundar Pichai', 'Tesla'),\n",
" (-5.930445803527402, 'Lisa Su', 'Tesla')]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Do it with sorted\n",
"PMI_name_company_tuples = [(PMI[row_idx, col_idx], names[row_idx], companies[col_idx]) for row_idx in range(PMI.shape[0]) for col_idx in range(PMI.shape[1])]\n",
"sorted(PMI_name_company_tuples, reverse=True) # without using itemgetter/lambda, sorts based on index 0"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Company Name PMI \n",
"-------------------- ---------- --------------------\n",
"Lisa Su AMD 3.7177319921974163 \n",
"Sundar Pichai Alphabet 3.1286163542694836 \n",
"Elon Musk Tesla 0.10908256065923522 \n",
"Elon Musk Alphabet -0.6407707175891003 \n",
"Sundar Pichai AMD -0.6615292777558972 \n",
"Elon Musk AMD -0.693950755448275 \n",
"Lisa Su Alphabet -1.3583709868883753 \n",
"Sundar Pichai Tesla -4.18042405653575 \n",
"Lisa Su Tesla -5.930445803527402 \n"
]
}
],
"source": [
"# do it with argsort\n",
"sorted_idx = np.argsort(PMI.flatten())\n",
"names_list = [t[1] for t in PMI_name_company_tuples]\n",
"companies_list = [t[2] for t in PMI_name_company_tuples]\n",
"sorted_idx = np.argsort(PMI.flatten())\n",
"print(\"{0:20} {1:10} {2:20}\".format('Company', 'Name', 'PMI'))\n",
"print(\"{0:20} {1:10} {2:20}\".format('--------------------', '----------', '--------------------'))\n",
"for idx in sorted_idx[::-1]:\n",
" print(\"{0:20} {1:10} {2:20}\".format(names_list[idx], companies_list[idx], str(PMI.flatten()[idx])))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment