{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Principal Component Analysis\n", "\n", "

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) license.

\n", "\n", "Kamila Zdybał, 2020\n", "\n", "

Université libre de Bruxelles, kamila.zdybal@ulb.ac.be

\n", "

Science Docs, kamila.zdybal@gmail.com

\n", "\n", "***\n", "\n", "In this notebook we present the code behind the tutorial that can be [downloaded here](https://github.com/kamilazdybal/ulb-atm-phd/raw/master/PCA/PCA.pdf).\n", "\n", "▷ We start with performing PCA on a synthetic data set to show all steps graphically.\n", "\n", "▷ Then we move on to performing local PCA on portions of the data set identified by K-Means clustering algorithm.\n", "\n", "▷ Finally, we present visually the low-dimensional approximation of the original data matrix.\n", "\n", "The PCA implementation that we use in this notebook comes from the *sklearn* library: [`sklearn.decomposition.PCA`](https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html).\n", "\n", "***\n", "\n", "## Initial settings" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn.cluster import KMeans\n", "from sklearn.decomposition import PCA\n", "\n", "# Styles:\n", "lineColour = '#f44242'\n", "PCColour = '#002f72'\n", "scoresColour = '#ff7d14'\n", "cluster_colors = ['#0e7da7', '#ceca70', '#b45050', '#2d2d54']\n", "newPointColour = '#02111b'\n", "dataPointSize = 5\n", "data_point = 1\n", "new_point = 1\n", "ln = 1\n", "font_title = 18\n", "font_text = 16\n", "font_axis = 16\n", "font_legend = 16\n", "save_plots = False\n", "\n", "# Fonts:\n", "csfont = {'fontname':'Charter', 'fontweight':'regular'}\n", "hfont = {'fontname':'Charter', 'fontweight':'bold'}\n", "\n", "def axes_in_charter(figureSubplot, font_axis):\n", " \n", " for label in (figureSubplot.get_xticklabels()):\n", " label.set_fontname('Charter')\n", " label.set_fontweight('regular')\n", " label.set_fontsize(font_axis)\n", "\n", " for label in (figureSubplot.get_yticklabels()):\n", " label.set_fontname('Charter')\n", " label.set_fontweight('regular')\n", " label.set_fontsize(font_axis)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## PCA in steps\n", "\n", "Generate a synthetic data set:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "Np = 100\n", "q = 1\n", "x = np.linspace(3, 6, Np)\n", "y = 0.8*x + 1*np.random.rand(Np)\n", "Dataset = np.column_stack((x, y))\n", "Dataset_proc = Dataset - np.mean(Dataset, axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Original data set:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "figure1 = plt.figure(figsize=(4, 4))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter(Dataset[:,0], Dataset[:,1], color=lineColour, marker='.', linewidth=ln)\n", "plt.axis('equal')\n", "plt.yticks([3, 4, 5, 6]), plt.xticks([3, 4, 5, 6])\n", "axes_in_charter(figureSubplot, font_axis)\n", "if save_plots==True: plt.savefig('plots/python-raw-data.pdf', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Original data set, centered:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "figure2 = plt.figure(figsize=(4, 4))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter(Dataset_proc[:,0], Dataset_proc[:,1], color=lineColour, marker='.', linewidth=ln)\n", "plt.axis('equal')\n", "plt.yticks([-1, 0, 1]), plt.xticks([-1, 0, 1])\n", "axes_in_charter(figureSubplot, font_axis)\n", "if save_plots==True: plt.savefig('plots/python-data-centered.pdf', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform PCA:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "pca = PCA()\n", "pca.fit(Dataset)\n", "scores = pca.transform(Dataset)\n", "PCs = pca.components_\n", "eigvals = pca.explained_variance_ratio_\n", "\n", "Dataset_projected = np.dot(Dataset_proc, np.transpose(np.mat(PCs[0,:])))\n", "Dataset_approx = np.dot(pca.transform(Dataset)[:,:q], pca.components_[:q,:]) + np.mean(Dataset, axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Principal Components identified on the original data set:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "figure3 = plt.figure(figsize=(4, 4))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter(Dataset_proc[:,0], Dataset_proc[:,1], color=lineColour, marker='.', linewidth=ln)\n", "plt.quiver(PCs[0,0], PCs[0,1], scale=70*(1-eigvals[0]), color=PCColour, width=0.01)\n", "plt.quiver(PCs[1,0], PCs[1,1], scale=10*(1-eigvals[1]), color=PCColour, width=0.01)\n", "plt.axis('equal')\n", "plt.yticks([-1, 0, 1]), plt.xticks([-1, 0, 1])\n", "axes_in_charter(figureSubplot, font_axis)\n", "if save_plots==True: plt.savefig('plots/python-PCs.pdf', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "PCA-transformed data set:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQoAAAD+CAYAAADCv0tyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAARDklEQVR4nO3df4wcd3nH8c9zNiYnUmRZOYVKcL02CsJUrRx0V1QZ0kLAdVJVrUggopSIVsJV+YdUqppWRvSPyErjf7CQ2kRp1Ua0ASWhSAQVaCmBnholxefE6g8QQgHHqUSlQyhtnB+N7X36x+w6e+PdfWZ2v9+Zub33S7LWO7s3892Znc88850fa+4uAJhkoe0GAOg+ggJAiKAAECIoAIQICgCh3W03oOyqq67ylZWVtpsB7EinTp36kbsvlYd3LihWVla0sbHRdjOAHcnMnhk1nF0PACGCAkCIoAAQIigAhAgKACGCAkAoW1CY2V4zO2FmXzWzk2b2LTM7nGt6APLJWVE8JGnJ3Q+7+5qkz0r6kpldl3GaADLIGRTXSHp+6PmnJZ2XdEvGaQLIIOeZmfslXRg8cfeemZ2T9LqM0wSQQbaKwt1fcffe4LmZvUXSkqRHyu81syNmtmFmG5ubm7maBGBKTR71OC7p8+7+aPkFd7/P3VfdfXVp6bLrUQC0rJGLwszsE5LeIOndTUwPQFrZKwozOyrpJkmH3P1c7ukBSC/neRS7zexeSddJusHdn+sPvzvXNAHkkWXXw8z2SnpY0qKkY5J+ycwGL39M0h05pgsgj1x9FL8h6T39/3850zQANCTLroe73+/uNu5fjmkCyIeLwgCECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECAoAIYICQIigABAiKACECIo2nT0prZ8oHnP+DTCj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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure4 = plt.figure(figsize=(4, 4))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter(scores[:,0], scores[:,1], color=scoresColour, marker='.', linewidth=ln)\n", "plt.axis('equal')\n", "plt.yticks([-2, 0, 2]), plt.xticks([-2, 0, 2])\n", "axes_in_charter(figureSubplot, font_axis)\n", "if save_plots==True: plt.savefig('plots/python-PC-scores.pdf', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Projection of the original data set onto the first Principal Component:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure5 = plt.figure(figsize=(4, 4))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter([Dataset_projected], [np.mat(np.zeros(Np))], color=scoresColour, marker='.', linewidth=ln)\n", "plt.axis('equal')\n", "plt.yticks([0]), plt.xticks([-2, 0, 2])\n", "axes_in_charter(figureSubplot, font_axis)\n", "if save_plots==True: plt.savefig('plots/python-data-projection.pdf', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Approximation of the original data set using the first Principal Component:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure6 = plt.figure(figsize=(4, 4))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter([Dataset_approx[:,0]], [Dataset_approx[:,1]], color=lineColour, marker='.', linewidth=ln)\n", "plt.axis('equal')\n", "plt.yticks([3, 4, 5, 6]), plt.xticks([3, 4, 5, 6])\n", "axes_in_charter(figureSubplot, font_axis)\n", "if save_plots==True: plt.savefig('plots/python-data-approximation.pdf', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plotting the same figures but on one subplot:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure = plt.figure(figsize=(11, 7))\n", "\n", "figureSubplot = plt.subplot(2,3,1)\n", "plt.scatter(Dataset[:,0], Dataset[:,1], color=lineColour, marker='.', linewidth=ln)\n", "plt.title('Raw dataset', **csfont, fontsize=font_title)\n", "plt.text(5, 3, 'Q = 2', **hfont, fontsize=font_text)\n", "plt.axis('equal')\n", "plt.yticks([3, 4, 5, 6]), plt.xticks([3, 4, 5, 6])\n", "plt.subplots_adjust(wspace=0.25, hspace=0.25)\n", "axes_in_charter(figureSubplot, font_axis)\n", "\n", "figureSubplot = plt.subplot(2,3,2)\n", "plt.scatter(Dataset_proc[:,0], Dataset_proc[:,1], color=lineColour, marker='.', linewidth=ln)\n", "plt.title('Dataset centered', **csfont, fontsize=font_title)\n", "plt.axis('equal')\n", "plt.yticks([-1, 0, 1]), plt.xticks([-1, 0, 1])\n", "axes_in_charter(figureSubplot, font_axis)\n", "\n", "figureSubplot = plt.subplot(2,3,3)\n", "plt.scatter(Dataset_proc[:,0], Dataset_proc[:,1], color=lineColour, marker='.', linewidth=ln)\n", "plt.quiver(PCs[0,0], PCs[0,1], scale=70*(1-eigvals[0]), color=PCColour, width=0.015)\n", "plt.quiver(PCs[1,0], PCs[1,1], scale=10*(1-eigvals[1]), color=PCColour, width=0.015)\n", "plt.title('Principal components', **csfont, fontsize=font_title)\n", "plt.axis('equal')\n", "plt.yticks([-1, 0, 1]), plt.xticks([-1, 0, 1])\n", "axes_in_charter(figureSubplot, font_axis)\n", "\n", "figureSubplot = plt.subplot(2,3,4)\n", "plt.scatter(scores[:,0], scores[:,1], color=scoresColour, marker='.', linewidth=ln)\n", "plt.title('Data rotation', **csfont, fontsize=font_title)\n", "plt.axis('equal')\n", "plt.yticks([-2, 0, 2]), plt.xticks([-2, 0, 2])\n", "axes_in_charter(figureSubplot, font_axis)\n", "\n", "figureSubplot = plt.subplot(2,3,5)\n", "plt.scatter([Dataset_projected], [np.mat(np.zeros(Np))], color=scoresColour, marker='.', linewidth=ln)\n", "plt.title('Data projection', **csfont, fontsize=font_title)\n", "plt.axis('equal')\n", "plt.yticks([0]), plt.xticks([-2, 0, 2])\n", "axes_in_charter(figureSubplot, font_axis)\n", "\n", "figureSubplot = plt.subplot(2,3,6)\n", "plt.scatter([Dataset_approx[:,0]], [Dataset_approx[:,1]], color=lineColour, marker='.', linewidth=ln)\n", "plt.title('Data approximation', **csfont, fontsize=font_title)\n", "plt.text(5, 3, 'q = 1', **hfont, fontsize=font_text)\n", "plt.axis('equal')\n", "plt.yticks([3, 4, 5, 6]), plt.xticks([3, 4, 5, 6])\n", "axes_in_charter(figureSubplot, font_axis)\n", "\n", "if save_plots==True: plt.savefig('plots/PCA-example-subplot.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Local PCA\n", "\n", "We first define a function that will perform PCA on local portions of the data set, defined by the vector `idx`:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def local_pca(X, idx):\n", "\n", " n_k = len(np.unique(idx))\n", "\n", " # Initialize the outputs:\n", " PCs = []\n", " eigvals = []\n", " PC_scores = []\n", "\n", " for k in range(0, n_k):\n", "\n", " # Extract local cluster:\n", " X_k = X[idx==k]\n", "\n", " # Perform PCA in local cluster:\n", " pca = PCA()\n", " pca.fit(X_k)\n", " PC_scores.append(pca.transform(X_k))\n", " PCs.append(pca.components_)\n", " eigvals.append(pca.explained_variance_ratio_)\n", "\n", " return (PCs, eigvals, PC_scores)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 🛰 Example 1\n", "\n", "Generate a synthetic data set that has two distinct clusters:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "nPoints = 500\n", "mean1 = [0,1] # data already centered\n", "covariance1 = [[2, 0.5], [0.5, 0.5]]\n", "x1, y1 = np.random.multivariate_normal(mean1, covariance1, nPoints).T\n", "\n", "mean2 = [6, 4] # data already centered\n", "covariance2 = [[3, 0.3], [0.3, 0.5]]\n", "x2, y2 = np.random.multivariate_normal(mean2, covariance2, nPoints).T\n", "\n", "X = np.column_stack((np.concatenate([x1, x2]), np.concatenate([y1, y2])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform K-Means clustering of the data set:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "kmeans = KMeans(n_clusters=2, random_state=0).fit(X)\n", "idx = kmeans.labels_\n", "centroids = kmeans.cluster_centers_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run local PCA on the data set:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "(PCs, eigvals, PC_scores) = local_pca(X, idx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the data set with identified eigenvectors:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure = plt.figure(figsize=(10, 7))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.scatter(X[idx==0,0], X[idx==0,1], c=cluster_colors[0], s=dataPointSize, marker='o', label='$k_1$')\n", "plt.scatter(X[idx==1,0], X[idx==1,1], c=cluster_colors[1], s=dataPointSize, marker='o', label='$k_2$')\n", "origin = [centroids[0][0]], [centroids[0][1]]\n", "plt.quiver(*origin, PCs[0][0,0], PCs[0][0,1], scale=30*(1-eigvals[0][0]), color=PCColour, width=0.005)\n", "origin = [centroids[0][0]], [centroids[0][1]]\n", "plt.quiver(*origin, PCs[0][1,0], PCs[0][1,1], scale=15*(1-eigvals[0][1]), color=PCColour, width=0.005)\n", "origin = [centroids[1][0]], [centroids[1][1]]\n", "plt.quiver(*origin, PCs[1][0,0], PCs[1][0,1], scale=30*(1-eigvals[1][0]), color=PCColour, width=0.005)\n", "origin = [centroids[1][0]], [centroids[1][1]]\n", "plt.quiver(*origin, PCs[1][1,0], PCs[1][1,1], scale=15*(1-eigvals[1][1]), color=PCColour, width=0.005)\n", "plt.axis('equal')\n", "plt.scatter(centroids[:, 0], centroids[:, 1], color=newPointColour, marker='x', lineWidth=data_point, s=20);\n", "axes_in_charter(figureSubplot, font_axis)\n", "plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), fancybox=True, shadow=True, ncol=2, fontsize=font_legend, markerscale=4)\n", "if save_plots==True: plt.savefig('plots/lpca-on-cloud-data.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 🛰 Example 2\n", "\n", "Generate a non-linear synthetic data set:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "nPoints = 500\n", "mean1 = [0,1] # data already centered\n", "covariance1 = [[0.4, 0.1], [0.1, 0.1]]\n", "x1, y1 = np.random.multivariate_normal(mean1, covariance1, nPoints).T\n", "\n", "x = np.linspace(0,4,nPoints)\n", "y = -(x**2) + 7*x + 4\n", "y = y + y1\n", "x = x + x1\n", "\n", "X = np.column_stack((np.concatenate([x]), np.concatenate([y])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform K-Means clustering of the data set:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "k = 3\n", "kmeans = KMeans(n_clusters=k, random_state=0).fit(X)\n", "idx = kmeans.labels_\n", "centroids = kmeans.cluster_centers_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run local PCA on the data set:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "(PCs, eigvals, PC_scores) = local_pca(X, idx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the data set with identified eigenvectors:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "figure = plt.figure(figsize=(5, 7))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.axis('equal')\n", "plt.scatter(X[idx==0,0], X[idx==0,1], c=cluster_colors[0], s=dataPointSize, marker='o', label='$k_1$')\n", "plt.scatter(X[idx==1,0], X[idx==1,1], c=cluster_colors[1], s=dataPointSize, marker='o', label='$k_2$')\n", "plt.scatter(X[idx==2,0], X[idx==2,1], c=cluster_colors[2], s=dataPointSize, marker='o', label='$k_3$')\n", "for i in range(0,k):\n", " origin = [centroids[i][0]], [centroids[i][1]]\n", " plt.quiver(*origin, PCs[i][0,0], PCs[i][0,1], scale=40*(1-eigvals[i][0]), color=PCColour, width=0.005)\n", " origin = [centroids[i][0]], [centroids[i][1]]\n", " plt.quiver(*origin, PCs[i][1,0], PCs[i][1,1], scale=15*(1-eigvals[i][1]), color=PCColour, width=0.005)\n", "plt.scatter(centroids[:, 0], centroids[:, 1], color=newPointColour, marker='x', lineWidth=data_point, s=20);\n", "axes_in_charter(figureSubplot, font_axis)\n", "plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), fancybox=True, shadow=True, ncol=3, fontsize=font_legend, markerscale=4)\n", "if save_plots==True: plt.savefig('plots/lpca-on-nonlinear-data.png.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Low-rank approximation\n", "\n", "In this example we perform low-rank approximation of a random, semi-structured and structured data sets. The original dimensionality of the data set is 6.\n", "\n", "You can set the boolean below to `True` if you want the numerical values to show up on the imshow plot:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "annotate_bool = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate a random synthetic data set:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Dataset_random = np.random.rand(10,6)\n", "Dataset_random = Dataset_random/np.max(Dataset_random)\n", "mu = np.mean(Dataset_random, axis=0)\n", "\n", "# Perform PCA:\n", "pca = PCA()\n", "pca.fit(Dataset_random)\n", "scores = pca.transform(Dataset_random)\n", "PCs = pca.components_\n", "eigvals_random = pca.explained_variance_ratio_\n", "\n", "# Display original matrix:\n", "figure = plt.figure(figsize=(4, 5))\n", "figureSubplot = figure.add_subplot(1,1,1)\n", "plt.imshow(Dataset_random, vmin=0, vmax=1)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "# Annotate the imshow:\n", "if annotate_bool == True:\n", " for i in range(10):\n", " for j in range(6):\n", " text = plt.text(j, i, round(Dataset_random[i, j], 1),\n", " ha=\"center\", va=\"center\", color=\"w\")\n", "\n", "if save_plots==True: plt.savefig('plots/random-matrix-original.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform low-rank approximation of the random data set with `Nq` number of first Principal Components:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Nq = 1\n", "\n", "Dataset_approx = np.dot(pca.transform(Dataset_random)[:,:Nq], pca.components_[:Nq,:])\n", "Dataset_approx += mu\n", "\n", "figure = plt.figure(figsize=(6.3, 10))\n", "\n", "figureSubplot = plt.subplot(2,2,2)\n", "plt.imshow(pca.components_[:Nq,:], vmin=-1, vmax=1)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "figureSubplot = plt.subplot(2,2,3)\n", "plt.imshow(pca.transform(Dataset_random)[:,:Nq])\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "figureSubplot = plt.subplot(2,2,4)\n", "plt.imshow(Dataset_approx)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "plt.subplots_adjust(wspace=0.1, hspace=0)\n", "\n", "# Annotate the imshow:\n", "if annotate_bool == True:\n", " for i in range(10):\n", " for j in range(6):\n", " text = plt.text(j, i, round(Dataset_approx[i, j], 1),\n", " ha=\"center\", va=\"center\", color=\"w\")\n", "\n", "if save_plots==True: plt.savefig('plots/random-matrix-reconstruction-PCs-' + str(Nq) + '.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate a semi-structured synthetic data set:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Dataset_semi_structured = np.array([[2, 3, 1, 0, 4, 5],\n", " [3, 4, 2, 10, 12, 5],\n", " [2, 6, 7, 10, 10, 9],\n", " [5, 7, 12, 11, 8, 9],\n", " [1, 9, 4, 5, 12, 7],\n", " [1, 6, 3, 8, 3, 9],\n", " [3, 7, 5, 8, 0, 4],\n", " [0, 1, 7, 7, 1, 8],\n", " [0, 1, 1, 3, 6, 11],\n", " [2, 2, 1, 7, 7, 10]])\n", "\n", "Dataset_semi_structured = Dataset_semi_structured/np.max(Dataset_semi_structured)\n", "mu = np.mean(Dataset_semi_structured, axis=0)\n", "\n", "# Perform PCA:\n", "pca = PCA()\n", "pca.fit(Dataset_semi_structured)\n", "scores = pca.transform(Dataset_semi_structured)\n", "PCs = pca.components_\n", "eigvals_semi_structured = pca.explained_variance_ratio_\n", "\n", "# Display matrix:\n", "figure = plt.figure(figsize=(4, 5))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.imshow(Dataset_semi_structured, vmin=0, vmax=1)\n", "plt.yticks([]), plt.xticks([])\n", "#plt.colorbar()\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "# Annotate the imshow:\n", "if annotate_bool == True:\n", " for i in range(10):\n", " for j in range(6):\n", " text = plt.text(j, i, round(Dataset_semi_structured[i, j], 1),\n", " ha=\"center\", va=\"center\", color=\"w\")\n", "\n", "if save_plots==True: plt.savefig('plots/semi-structured-matrix-original.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform low-rank approximation of the semi-structured data set with `Nq` number of first Principal Components:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Nq = 1\n", "\n", "Dataset_approx = np.dot(pca.transform(Dataset_semi_structured)[:,:Nq], pca.components_[:Nq,:])\n", "Dataset_approx += mu\n", "\n", "figure = plt.figure(figsize=(6.3, 10))\n", "\n", "figureSubplot = plt.subplot(2,2,2)\n", "plt.imshow(pca.components_[:Nq,:], vmin=-1, vmax=1)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "figureSubplot = plt.subplot(2,2,3)\n", "plt.imshow(pca.transform(Dataset_semi_structured)[:,:Nq])\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "figureSubplot = plt.subplot(2,2,4)\n", "plt.imshow(Dataset_approx)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "plt.subplots_adjust(wspace=0.1, hspace=0)\n", "\n", "# Annotate the imshow:\n", "if annotate_bool == True:\n", " for i in range(10):\n", " for j in range(6):\n", " text = plt.text(j, i, round(Dataset_approx[i, j], 1),\n", " ha=\"center\", va=\"center\", color=\"w\")\n", "\n", "if save_plots==True: plt.savefig('plots/semi-structured-matrix-reconstruction-PCs-' + str(Nq) + '.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate a structured synthetic data set:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Dataset_structured = np.array([[2, 2, 5, 4, 4, 5],\n", " [3, 4, 3, 10, 12, 10],\n", " [2, 6, 7, 10, 10, 9],\n", " [5, 7, 12, 11, 10, 12],\n", " [1, 5, 4, 5, 12, 9],\n", " [1, 6, 3, 6, 7, 8],\n", " [2, 3, 5, 6, 6, 7],\n", " [0, 1, 5, 6, 2, 3],\n", " [0, 1, 1, 3, 3, 2],\n", " [1, 2, 1, 2, 2, 1]])\n", "\n", "Dataset_structured = Dataset_structured/np.max(Dataset_structured)\n", "mu = np.mean(Dataset_structured, axis=0)\n", "# Perform PCA\n", "pca = PCA()\n", "pca.fit(Dataset_structured)\n", "scores = pca.transform(Dataset_structured)\n", "PCs = pca.components_\n", "eigvals_structured = pca.explained_variance_ratio_\n", "\n", "# Display matrix:\n", "figure = plt.figure(figsize=(4, 5))\n", "figureSubplot = plt.subplot(1,1,1)\n", "plt.imshow(Dataset_structured, vmin=0, vmax=1)\n", "plt.yticks([]), plt.xticks([])\n", "#plt.colorbar()\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "# Annotate the imshow:\n", "if annotate_bool == True:\n", " for i in range(10):\n", " for j in range(6):\n", " text = plt.text(j, i, round(Dataset_structured[i, j], 1),\n", " ha=\"center\", va=\"center\", color=\"w\")\n", " \n", "if save_plots==True: plt.savefig('plots/structured-matrix-original.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform low-rank approximation of the structured data set with `Nq` number of first Principal Components:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Nq = 1\n", "\n", "Dataset_approx = np.dot(pca.transform(Dataset_structured)[:,:Nq], pca.components_[:Nq,:])\n", "Dataset_approx += mu\n", "\n", "figure = plt.figure(figsize=(6.3, 10))\n", "\n", "figureSubplot = plt.subplot(2,2,2)\n", "plt.imshow(pca.components_[:Nq,:], vmin=-1, vmax=1)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "figureSubplot = plt.subplot(2,2,3)\n", "plt.imshow(pca.transform(Dataset_structured)[:,:Nq])\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "\n", "figureSubplot = plt.subplot(2,2,4)\n", "art = plt.imshow(Dataset_approx)\n", "plt.yticks([]), plt.xticks([])\n", "figureSubplot.spines[\"top\"].set_visible(False)\n", "figureSubplot.spines[\"bottom\"].set_visible(False)\n", "figureSubplot.spines[\"right\"].set_visible(False)\n", "figureSubplot.spines[\"left\"].set_visible(False)\n", "plt.subplots_adjust(wspace=0.1, hspace=0)\n", "\n", "# Annotate the imshow:\n", "if annotate_bool == True:\n", " for i in range(10):\n", " for j in range(6):\n", " text = plt.text(j, i, round(Dataset_approx[i, j], 1),\n", " ha=\"center\", va=\"center\", color=\"w\")\n", "\n", "if save_plots==True: plt.savefig('plots/structured-matrix-reconstruction-PCs-' + str(Nq) + '.png', dpi = 500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 4 }