{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Just some notes on PCA in Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Guillermo Moncecchi**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook contains just some code notes on Principal Component Analysis, based on a very simple example. If you want the original, much better explanation, refer to [this](http://sebastianraschka.com/Articles/2014_pca_step_by_step.html) page from Sebastian Raschka." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "from mpl_toolkits.mplot3d import proj3d\n", "np.set_printoptions(suppress=True,precision=3)\n", "from matplotlib.patches import FancyArrowPatch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us define a very simple dataset, with 6 people, identified by their heigth, weigth, and the length of their middle finger (?). Each column is an instance, with 3 attributes (we use this format to directly call the np.cov() function " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.97 1.8 1.7 1.65 1.75 1.67]\n", " [ 110. 70. 90. 52. 65. 58. ]\n", " [ 5. 4.8 4.9 4.7 4.8 4.6 ]]\n" ] } ], "source": [ "X_men=np.array([[1.97,110,5],[1.80,70,4.8],[1.70,90,4.9]]).transpose()\n", "X_women=np.array([[1.65,52,4.7],[1.75,65,4.8],[1.67,58,4.6]]).transpose()\n", "\n", "X = np.hstack((X_men,X_women))\n", "print (X)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Means: [ 1.757 74.167 4.8 ]\n", "Standard deviations: [ 0.108 19.953 0.129]\n", "Variances: [ 0.012 398.139 0.017]\n" ] } ], "source": [ "mean=np.mean(X,axis=1)\n", "std=np.std(X,axis=1)\n", "var=np.var(X,axis=1)\n", "\n", "print (\"Means:\",mean)\n", "print (\"Standard deviations:\",std)\n", "print (\"Variances:\",var)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rescale values" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 0.469 0.156 0. 0.313 0.063]\n", " [ 1. 0.31 0.655 0. 0.224 0.103]\n", " [ 1. 0.5 0.75 0.25 0.5 0. ]]\n" ] } ], "source": [ "def scale_linear_byrow(X):\n", " mins = np.min(X, axis=1).reshape(3,1)\n", " maxs = np.max(X, axis=1).reshape(3,1)\n", " rng = maxs - mins\n", " return ((X - mins)/rng)\n", "\n", "X_r=scale_linear_byrow(X)\n", "print(X_r)\n", "\n" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(8,8))\n", "ax = fig.add_subplot(111, projection='3d')\n", "plt.rcParams['legend.fontsize'] = 10 \n", "ax.plot(X_r[0,0:3], X_r[1,0:3], X_r[2,0:3], 'o', markersize=8, color='red', alpha=0.5, label='class1')\n", "ax.plot(X_r[0,3:6], X_r[1,3:6], X_r[2,3:6], 'o', markersize=8, color='blue', alpha=0.5, label='class1')\n", "\n", "\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate mean, standard deviation and variance for every attribute, using the axis property of each of the methods" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Means: [ 0.333 0.382 0.5 ]\n", "Standard deviations: [ 0.336 0.344 0.323]\n", "Variances: [ 0.113 0.118 0.104]\n" ] } ], "source": [ "mean=np.mean(X_r,axis=1)\n", "std=np.std(X_r,axis=1)\n", "var=np.var(X_r,axis=1)\n", "\n", "print (\"Means:\",mean)\n", "print (\"Standard deviations:\",std)\n", "print (\"Variances:\",var)\n", "#mean_vector = np.array([[mean_x],[mean_y],[mean_z]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, obtain the covariance matrix for our sample" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.136 0.112 0.102]\n", " [ 0.112 0.142 0.122]\n", " [ 0.102 0.122 0.125]]\n" ] } ], "source": [ "cvm=np.cov(X_r)\n", "print (cvm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate eigenvalues and eigenvectors from the covariance matrix. Since it is symmetric, we know they are real numbers" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Eigenvalue 1 from covariance matrix: 0.3587407970726606\n", "Eigenvector:\n", "[[ 0.561]\n", " [ 0.608]\n", " [ 0.562]]\n", "Eigenvalue 2 from covariance matrix: 0.033429425967488116\n", "Eigenvector:\n", "[[ 0.825]\n", " [-0.356]\n", " [-0.439]]\n", "Eigenvalue 3 from covariance matrix: 0.010660453485812363\n", "Eigenvector:\n", "[[ 0.066]\n", " [-0.71 ]\n", " [ 0.701]]\n" ] } ], "source": [ "eig_val_cov, eig_vec_cov = np.linalg.eig(cvm)\n", "\n", "for i in range(len(eig_val_cov)):\n", " eigvec_cov = eig_vec_cov[:,i].reshape(1,3).T\n", "\n", " print('Eigenvalue {} from covariance matrix: {}'.format(i+1, eig_val_cov[i]))\n", " print('Eigenvector:')\n", " print(eigvec_cov)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Verify that the eigenvalue equation holds:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ "for i in range(len(eig_val_cov)):\n", " eigv = eig_vec_cov[:,i].reshape(1,3).T\n", " np.testing.assert_array_almost_equal(cvm.dot(eigv), eig_val_cov[i] * eigv,\n", " decimal=6, err_msg='', verbose=True)\n", "\n" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0.3587407970726606, array([ 0.561, 0.608, 0.562]))\n", "(0.033429425967488116, array([ 0.825, -0.356, -0.439]))\n", "(0.010660453485812363, array([ 0.066, -0.71 , 0.701]))\n" ] } ], "source": [ "# Sort eigenvectors given their eigenvalue\n", "\n", "# Make a list of (eigenvalue, eigenvector) tuples\n", "eig_pairs = [(np.abs(eig_val_cov[i]), eig_vec_cov[:,i]) for i in range(len(eig_val_cov))]\n", "\n", "# Sort the (eigenvalue, eigenvector) tuples from high to low\n", "eig_pairs.sort()\n", "eig_pairs.reverse()\n", "\n", "# Visually confirm that the list is correctly sorted by decreasing eigenvalues\n", "for i in eig_pairs:\n", " print(i)\n", " # print(i[0])\n", "\n" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix W:\n", " [[ 0.561 0.825]\n", " [ 0.608 -0.356]\n", " [ 0.562 -0.439]]\n" ] } ], "source": [ "# Just to principal components\n", "matrix_w = np.hstack((eig_pairs[0][1].reshape(3,1), eig_pairs[1][1].reshape(3,1)))\n", "print('Matrix W:\\n', matrix_w)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Transform instances to the new subspace..." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.731 0.733 0.907 0.141 0.593 0.098]\n", " [ 0.03 0.057 -0.434 -0.11 -0.041 0.015]]\n" ] } ], "source": [ "# Transform instance to the new subspace\n", "\n", "transformed = np.dot(X_r.T,matrix_w).transpose()\n", "print (transformed)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEaCAYAAAAG87ApAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+cHXV97/HXO0sSfslCQAIkMUiEAD5UsBpFStlAyIWI\niNpLr1wFrLegj0vlqq3ipS0RtIjWSpUrpYiC1EIoICI/s6FZUCFAgABKgCRICD+yECCBECBL8rl/\nzHfJyck5uzPZPWf2ZN/Px+M8Mj++Z+YzM9/N58x3vjOjiMDMzCyvEWUHYGZmrcWJw8zMCnHiMDOz\nQpw4zMysECcOMzMrxInDzMwKceKwmiSNlXS7pJclfa/seCpJ2lPSeklDtv5KukTS2SWt+0ZJn+1j\n/qDE1sxtLHLMJXVIWraZ69ns7w4nW5UdgG1K0mqg9wab7YDXgXVp/OSIuLwJYZwMPBcROzRhXVui\nYMMxbO6KI2b0Dks6Cfh8RBxSWYTBia20bbRyOXEMQRGxfe+wpD+S/eH/V3U5SVtFxJsNCmMisHBz\nvtjguFqJyg6gCYbDNlqVIXuqb5tKp9FPSfqapGeBiyXtKOl6Sc9JelHSryWNq/hOl6SzJP02NTvd\nImnnNG9rSf8uaYWklyTdLWlXSZcAJwBfk/SKpMMkjZJ0nqSn0+cHkkbVieunks6U9J+SLkvrfVDS\n3pK+Ialb0pOSjqiIs13SxZKeScs6u7dZQtIISf8k6XlJS4CP9rOfvp6W8bKkRyQdlqZPkXRn2tZn\nJP1I0siK762X9EVJj6XvniVpkqQ7JK2SNKu3fMU2fyPF9UdJx/cR09GSFqR1/07Se/qLt+r775T0\nUsX4RZK6K8Yvk3RaxTH/vKR9gX8FDkrH8cWKRY5J9eZlSfMk7dVH7H+a9sFL6bidUKPMTv3Uw5Mk\nLUnre7x3X0l6l6TbJK1M+/GKenFUre9zkh5Oy1si6eQaZWoeG0mjU31aKmm5pAskbV1nPf0em2Ep\nIvwZwh/gj8BhabgD6AHOAUYCWwNjgE+k4e2BK4FfVny/C1gEvCuVmQuck+adAlyXpgs4EHhbmvcz\n4KyK5ZwF3AHskj6/651fJ66ZwGvAEUAbcCnwOPCNNP6/gMcrlv9L4AJgG+DtwF1kzXIAXyA7+xkH\n7JS2YR0wosb+mgw8CeyWxt8B7JWG3w9MIfvBNBF4GDit4rvrUxzbA/sDbwBzgD2BHYA/ACdUbfM/\npW3+M2A1sHfF/js7DR8IdAMfTPv5hHRcR/YVb41tWwocmIYfBRYD+1bMe18angv8ZRo+EfhN1XIu\nAVYAH0jH4t+By+uscyLwMvAXqeyYivVUbmPdekjW3LqqYt+MBfZPw5cD30jDo4CP1Iljz3R8RqTx\nGcA70/CfAa9W7Jt6x2afNP8HwLXAjinW64B/rPjusv7q0nD/+Iyj9awHzoyInoh4PSJejIhfpuHV\nwD8Ch1aUD+BnEbE4Il4n+4M+IM1bC+xM9gcdEXF/RLxS8d3KZojjyRLFiohYAXwTqLwAu1Fcadrt\nEdEZEeuAq8gSwnfS+CxgT0k7SBoLHAV8OSJei4jngfOA/5GWcxzwg4h4OiJeSttYr4lkHTAaeLek\nkRHxZEQ8DhAR90XE3RGxPiKWAv9Wta8AvhsRqyPiYeAh4JaIeCIiXgZuIksClf4+bfPtwA1k/8H2\n6m3/Pxm4MCLuSfv552RJ6SDgzXrx1nAb0CFpt7Tsq4BDJb0T2CEiHqjxnVr7KYBrImJ+Oha/YEOd\nqHY80BkRsyJiXapvm6wnRz1cD7xH0jYR0Z32L2R1cE9J4yJibUTcUSeO6vXdGBF/TMO3A7OBQ6qK\nVR+b4yQJ+CvgKxGxMsV6DhvqWqW6dWm4c+JoPc9HxNreEUnbSrpQ0hOSVpH959Ke/kB6La8Yfo3s\nVxbAZcAtwBXKmp/OlVTvutceZL9qez2ZptWMK3muar0rIiIqxkmxTCT7Zfhsag55iayJ5e2pzO5A\nZU+XJ+vESEQsBv4P2RlPt6TLJe0OIGmf1JzybNpX3yZLnJW6K4Zfqxp/nQ37DuCliHitYnxpirXa\nROCrvduWtm88sHtELKkXbw23kf0iPgS4PY0fSvaL+jd1vlNP9XZuX6fceLIzxT71VQ8j4lWyhPoF\n4Jl0DCanr36NLLndLen3kj6XJ3hJR6UmthfS/pzBxsey3rHZBdgWuLfiWNyUpm+kr7o03DlxtJ7q\nXixfBfYBpkREO9l/JCLHRcuIeDMizoqIdwMfAY4ma0ap5Rmy5oJe70jT6sVVpLfNMrJf4DtHxE7p\n0x4RvdcBnk3rq1x3XRFxeWS9iCamOM5Nsy4ga556V9pXZ1Dsb6B6m3aStG3F+EQ23ie9ngS+XbFt\nO0XE9hExq594q91GljQ6yJogfwscTHbMu3LGXNQyYFIf83uX32c9jIjZETEd2A14BLgoTe+OiJMj\nYhxZ0+mP+7reAtk1CuBq4LvArhGxE3AjG9f5esdmBVmi3L/iWOwYdXoPFjg2w4oTR+vbnuwPYZWk\nMcCZNcrUTCKSpkp6j6Q24BWyduF1db5zOfB3knaRtAvwD2RnLPXk7m0TEc+SNTX8s6S3KbsYPknS\nn6UiVwJfkjRO0k7A6XVXmp1VHJb+c3mDjbsyb5+2c026cPzFHOGpznCvb0oaKekQsov2/1lRtrf8\nRcAXlF2cl6TtJH1U0vb9xLuR9Av4deAzwG2pWfE54FNkSaWWbmC8KjoB1NmOen4BTJP03yVtJWln\nSe+rsY1166GyDhcfl7QdWR17tXcb03LHp6Iryf5zXt9PTKPSZwWwXtJRwPQa5TY5NumM9yLgPElv\nTzGMk7TJ94scm+HGiaP1VP+CPI/sgvIKsovXN9UoE1XDveNjyf6jW0X2S7yLDcmguo/+t4D5wIPp\nMz9NqxdXrT7+fY2fQPafwcPAiymu3dK8i8ia1B5I6726xrJ6jSZrs36e7ExlF7IL8gB/Q9Zm/zLZ\n9Y0r2HTfVKu37yBrAnyJ7JfsZcApEfFYddmIuJesXf38tG2L2HBm11e8tXSRNfk9XTEOcF+d8reS\nXdRfLqm36TDPsSHFvoysGeirwAvA/cB7ayynr3o4Avgy8HRaxiFsSNofAOZJegX4FfCliHiizrb0\n7s9XgC+R/aB4Efh0+m6lZ6l/bL5O1rFgXmpW6yQ7W6reF0WPzbChDU3OJQUgHUlW6dqAn0TEuVXz\n9yXrvXEgcEZEfL/5UZptTFIHcFlETCg7FrNmK/UGwNREcj4wjezXyD2SrouIyhvPXgD+Gji2hBDN\nzKxK2U1VU4DFqbtjD1nTwccrC0TE8xExn6xt1Gwo8eM2bFgqO3GMY+Nulk+laWZDWkR0RUSfvbvM\ntlRlJw7/YjMzazFlP+TwaaDy4uIEsrOOwiQ5CZmZbYaIKPSwyrLPOOYDeyt71v4osrtLr6tTNs8N\nbUPqc+aZZ5Yeg2PasuJyTI5psD+bo9Qzjoh4U9KpZH3024CLI2KhpFPS/AvTc3nuIXvI3HplTwDd\nP7JnzJiZWZOV3VRFRNxEdrNQ5bQLK4aXs3FzlpmZlajspqotWkdHR9khbMIx5TcU43JM+Timxir9\nzvHBkj2Ec8vYFjOzZpFEtNjFcTMzazFOHGZmVogTh5mZFeLEYWZmhThxmJlZIU4cZmZWiBOHmZkV\nUvqd42aN9OijS5kzZwk9PSMYOXI906ZNYvLkiWWHZdbSfAOgbbEefXQpl1yymNGjD39rWk/PXKZO\nbWfatPeXGJnZ0OEbAM0qzJmzZKOkATBy5FRmz25nzpz7SorKrPU5cdgWq6endvXedttJLFy4qsnR\nmG05nDhsizVy5Pqa09esWcJ++7U3ORqzLYcTh22xpk2bRE/P3I2m9fR0MX36Kl/jMBsAJw7bYk2e\nPJGpU9tZs2YJkJ1pTJ26g5OG2QC5V5Vt8ebMuY+FC1ex337uTWVWbXN6VTlxmJkNY+6Oa2ZmDec7\nx83MWlyzn5DgpiozsxY20CckuKnKzGyYKeMJCU4cZmYtrIwnJDhxVHFzl5m1kjKekODEUWX2Ndc4\neZhZyyjjCQlOHBWeWbaM6OzkoTvvLDsUM7NcynhCghNHhYU338wRu+5K9y23sHbt2rLDMTPLZdq0\n9zN9+ip23nluU57F5u64yerVq3ng7LM5eJttWPXGG/x+yhQO/sQnBjFCM7OhpyW740o6UtIjkhZJ\n+nqdMj9M8x+QdGAj4nigs5MD2toAaB89mpg3j1UrVzZiVWZmLa3UxCGpDTgfOBLYH/i0pP2qyswA\n3hURewMnAxcMdhzr1q3jtQUL2G7UqLemTRk1irtnzRrsVZmZtbyyzzimAIsj4omI6AGuAD5eVeYY\n4FKAiLgL2FHS2MEMYuH8+ey/Zs1G00a1tTF20SKWPf74YK7KzKzllf2sqnHAsorxp4AP5SgzHuge\nrCC6ly5lxbhxPFY1Pdrb6Z4/nwl77TVYqzIza3llJ468V7OrL9wM6hX9w487bjAXZ2a2RSs7cTwN\nTKgYn0B2RtFXmfFp2iZmzpz51nBHRwcdHR2DEaOZ2Rajq6uLrq6uAS2j1O64krYCHgUOB54B7gY+\nHRELK8rMAE6NiBmSPgycFxEfrrEsPx3XzKygzemOW+oZR0S8KelU4BagDbg4IhZKOiXNvzAibpQ0\nQ9Ji4FXgcyWGbGY27PkGQDOzYawlbwA0M7PW4sRhZmaFOHGYmVkhThxmZlaIE4eZmRXixGFmZoU4\ncZiZWSFOHFYq33tj1nqcOKxUs6+5xsnDrMU4cVhpnlm2jOjs5KE77yw7FDMrwInDSrPw5ps5Ytdd\n6b7lFtauXVt2OGaWkxOHlWL16tVsvXgxbSNGMGXtWu654YayQzKznJw4rBQPdHZyQFsbAO2jRxPz\n5rFq5cqSozKzPJw4rOnWrVvHawsWsN2oUW9NmzJqFHfPmlViVGaWlxOHNd3C+fPZf82ajaaNamtj\n7KJFLHv88ZKiMrO8yn51rA1D3UuXsmLcOB6rmh7t7XTPn8+EvfYqJS4zy8cvcjIzG8b8IiczM2s4\nJw4zMyvEicPMzApx4jAzs0KcOMzMrBAnDjMzK8SJw8zMCnHiMDOzQpw4zMysECcOMzMrxInDzMwK\nceIwM7NCSkscksZI6pT0mKTZknasU+6nkrolPdTsGM3MbFNlnnGcDnRGxD7ArWm8lp8BRzYtKjMz\n61OZieMY4NI0fClwbK1CEfEb4KVmBWVmZn0rM3GMjYjuNNwNjC0xFjMzy6mhbwCU1AnsVmPWGZUj\nERGSBvwWppkzZ7413NHRQUdHx0AXuYmIQCr0zhMzsyGjq6uLrq6uAS2jtDcASnoE6IiI5ZJ2B+ZG\nxL51yu4J/Doi3tPH8pryBsBbrr6a6Z/8pJOHmW0RWu0NgNcBJ6bhE4FrS4wll2eWLSM6O3nozjvL\nDsXMrDRlJo7vAEdIegw4LI0jaQ9JN/QWknQ5cAewj6Rlkj5XSrTAwptv5ohdd6X7lltYu3ZtWWGY\nmZWqtKaqwdbopqrVq1fzwNlnc/A227DqjTf4/ZQpHPyJTzRsfWZmzdBqTVUt5YHOTg5oawOgffRo\nYt48Vq1cWXJUZmbN58SRw7p163htwQK2GzXqrWlTRo3i7lmzSozKzKwcThw5LJw/n/3XrNlo2qi2\nNsYuWsSyxx8vKSozs3I09D6OLUX30qWsGDeOx6qmR3s73fPnM2GvvUqJy8ysDL44bmY2jPniuJmZ\nNZwTh5mZFeLEYWZmhThxmJlZIU4cZmZWiBOHmZkV4sRhZmaFOHGYmVkhuRKHpO9J2kHSSEm3Sloh\n6bONDs7MzIaevGcc0yPiZeBo4AlgEvC3jQrKzMyGrryJo/eZVkcDV0XEKsDP9zAzG4byPuTw1+kd\n4a8DX5S0axo2M7NhJvdDDiWNAVZFxDpJ2wFvi4jlDY2uAD/k0MysuIY95DAliv8N/GuatAfwgWLh\nmZnZliDvNY6fAWuBj6TxZ4BvNyQiMzMb0vImjkkRcS5Z8iAiXm1cSGZmNpTlTRxvSNqmd0TSJOCN\nxoRkZmZDWd5eVTOBm4Hxkv4DOBg4qUExmZnZEFakV9UuwIfT6LyIWNGwqDaDe1WZmRW3Ob2qciUO\nSYeS3fDXu/AAiIjbiwbZKE4cZmbFNTJxXM+GO8W3BqYA90bEYYWjbBAnDjOz4jYnceS6xhERR1et\naALwL0VWZGZmW4bNfaz6U8B+gxmImZm1hlxnHJJ+VDE6AjgAuHcgK06PMJkFTCR74u5xEbGyqswE\n4OfArmRNZf8WET8cyHrNzGxg8l7jOKli9E3giYj47YBWLH0XWBER35X0dWCniDi9qsxuwG4RsUDS\n9mTJ6tiIWFhjeb7GYWZWUMMujjdCetruoRHRnRJEV0Ts2893rgV+FBG31pjnxGFmVtCgXxyX9FAf\nsyMi3ltkZVXGRkR3Gu4GxvYTy57AgcBdA1inmZkNUH/XOD42kIVL6gR2qzHrjMqRiAhJdU8XUjPV\nVcBpEbG6XrmZM2e+NdzR0UFHR0fBiM3MtmxdXV10dXUNaBllN1V1RMRySbsDc2s1VUkaCVwP3BQR\n5/WxPDdVmZkV1Mj3cRwk6R5Jr0rqkbRe0subF+ZbrgNOTMMnAtfWWK+Ai4GH+0oaZmbWPHnv4zgf\nOB54jOzO8c8DPx7gur8DHCHpMeCwNI6kPSTdkMocDHwGmCrp/vQ5coDrNTOzAcjbHffeiPgTSQ/2\nXhCXtCAiDmh4hDm5qcrMrLiGPXIEeFXSaOCBdP/FcjY88NDMzIaRvE1Vn01lTwXWAOOBTzUqKDMz\nG7ryNlV9Crg+IobsW//cVGVmVlzDelWR3c+xSNJlko6WlLeJy8zMtjBF3gA4CjgKOA44BOiMiM83\nMLZCfMZhZlZcIy+OExFrJd0ErAe2BY4l65ZrZmbDSN4bAGdIugRYBPw5cBH9PFvKzMy2THkvjl9O\n9u6MmyPi9YZHtRncVGVmVlxpj1WXdGdEHDTgBQ0sBicOM7OCGtmrqj9bD9JyzMxsiBusxGFmZsOE\nE4eZmRWSt1fVlyTt1OhgzMxs6Mt7xjEWuEfSlZKOTO/JqHTCIMdlZmZDVJE7x0cA04GTgA8AVwIX\nR8SShkVXgHtVmZkV19BeVRGxnuxx6t3AOmAn4CpJ3ysUpZmZtbS8NwCeRtYc9QLwE+CXEdGTzkIW\nRcSkxobZP59xmJkV18hnVY0BPhkRSysnRsR6SR8rskIzM2ttg3Ln+FDgMw4zs+LKvHPczMyGCScO\nMzMrxInDzMwKceIwM7NCnDjMzKwQJw4zMyvEicPMzApx4jAzs0KcOMzMrJDSEoekMZI6JT0mabak\nHWuU2VrSXZIWSPq9pJklhGpmZhXKPOM4HeiMiH2AW9P4RiLidWBqRBwAHAAcKelDzQ3TzMwqlZk4\njgEuTcOXAsfWKhQRa9LgKGAksL7xoZmZWT1lJo6xEdGdhrvJ3jK4CUkjJC1IZWZHxD3NCtDMzDaV\n97Hqm0VSJ7BbjVlnVI5EREiq+Wjb9AKpAyS1A7+U9O6I+EOtsjNnznxruKOjg46Ojs2M3Mxsy9TV\n1UVXV9eAllHaY9UlPQJ0RMRySbsDcyNi336+8/fAmoj4fo15fqy6mVlBrfZY9euAE9PwicC11QUk\n7dLb20rSNsARwMKmRWhmZpso84xjDHAl8A7gCeC4iFgpaQ/gooj4qKT3ApcAbWRJblZEfKvO8nzG\nYWZW0OaccfgNgGZmw1irNVWZmVkLcuIwM7NCnDjMzKwQJw4zMyvEicPMzApx4jAzs0KcOMzMrBAn\nDjMzK8SJw8zMCnHiMDOzQpw4zMysECcOMzMrxInDzMwKceIwM7NCnDjMzKwQJw4zMyvEicPMzApx\n4jAzs0KcOMzMrBAnDjMzK8SJw8zMCnHiMDOzQpw4zMysECcOMzMrxInDzMwKceIwM7NCnDjMzKwQ\nJw4zMyuktMQhaYykTkmPSZotacc+yrZJul/Sr5sZo5mZbarMM47Tgc6I2Ae4NY3XcxrwMBDNCMzM\nzOorM3EcA1yahi8Fjq1VSNJ4YAbwE0DNCc3MzOopM3GMjYjuNNwNjK1T7gfA3wLrmxKVmZn1aatG\nLlxSJ7BbjVlnVI5EREjapBlK0tHAcxFxv6SOxkRpZmZFNDRxRMQR9eZJ6pa0W0Qsl7Q78FyNYh8B\njpE0A9ga2EHSzyPihFrLnDlz5lvDHR0ddHR0DCR8M7MtTldXF11dXQNahiLKud4s6bvACxFxrqTT\ngR0jou4FckmHAn8TER+rMz/K2hYzs1YliYgodP24zGsc3wGOkPQYcFgaR9Iekm6o8x1nBjOzkpV2\nxjHYfMZhZlZcq51xmJlZC3LiMDOzQpw4zMysECcOMzMrxInDzMwKaegNgGbD3aOPLmXOnCX09Ixg\n5Mj1TJs2icmTJ5YdltmAuDuuWYM8+uhSLrlkMaNHH/7WtJ6euUyd2s60ae8vMTKzDdwd12wImTNn\nyUZJA2DkyKnMnt3OnDn3lRSV2cA5cZg1SE9P7T+vbbedxMKFq5ocjdngceIwa5CRI2u/CWDNmiXs\nt197k6MxGzxOHGYNMm3aJHp65m40raeni+nTV/kah7U0Jw6zBpk8eSJTp7azZs0SIDvTmDp1BycN\na3nuVWXWYHPm3MfChavYbz/3prKhZ3N6VTlxmJkNY+6Oa2ZmDefEYWZmhThxmJlZIU4cZmZWiBOH\nmZkV4sRhZmaFOHGYmVkhThxmZlaIE4eZmRXixGFmZoU4cZiZWSFOHGZmVogTh5mZFeLEYWZmhWxV\n1ooljQFmAROBJ4DjImJljXJPAC8D64CeiJjSxDDNzKxKmWccpwOdEbEPcGsaryWAjog4sNWSRldX\nV9khbMIx5TcU43JM+TimxiozcRwDXJqGLwWO7aNsoZeMDBVDsaI4pvyGYlyOKR/H1FhlJo6xEdGd\nhruBsXXKBTBH0nxJf9Wc0MzMrJ6GXuOQ1AnsVmPWGZUjERGS6r339eCIeFbS24FOSY9ExG8GO1Yz\nM8untHeOS3qE7NrFckm7A3MjYt9+vnMmsDoivl9jnl84bma2GYq+c7y0XlXAdcCJwLnp32urC0ja\nFmiLiFckbQdMB75Za2FFN9zMzDZPmWccY4ArgXdQ0R1X0h7ARRHxUUl7Adekr2wF/CIiziklYDMz\nA0pMHGZm1ppa6s5xSUdKekTSIklfr1Pmh2n+A5IOHApxSfqfKZ4HJf1O0nvLjqmi3AclvSnpk0Mh\nJkkdku6X9HtJXWXHJKld0q8lLUgxndSEmH4qqVvSQ32UaWo97y+mkup4v/splWtmHc9z7Jpdx/s7\ndsXreES0xAdoAxYDewIjgQXAflVlZgA3puEPAfOGSFwHAe1p+MhGx5Unpopy/wVcD3yq7JiAHYE/\nAOPT+C5DIKb/C5zTGw/wArBVg+M6BDgQeKjO/DLqeX8xNbWO54mp4hg3pY7n3E9NreM5Yypcx1vp\njGMKsDginoiIHuAK4ONVZd66qTAi7gJ2lFTv/pCmxRURd0bEqjR6FzC+7JiSvwauAp5vcDx5Yzoe\nuDoingKIiBVDIKb1wA5peAfghYh4s5FBRdbd/KU+ijS9nvcXUwl1PM9+gubW8TwxNbuO54mpcB1v\npcQxDlhWMf5UmtZfmUZX4DxxVfo8cGNDI8oRk6RxZP9JXpAmNfpiV579tDcwRtLcdMPnZ4dATOcD\n+0t6BngAOK3BMeVRRj0vohl1vF8l1PE8ml3H8yhcx8vsjltU3oNe3S230ZUl9/IlTQX+Eji4ceEA\n+WI6Dzg9IkKSaPxjXfLENBJ4P3A4sC1wp6R5EbGoxJiOBO6LiKmSJpHdhPq+iHilQTHl1ex6nksT\n63geza7jeTS7judRuI63UuJ4GphQMT6B7JdWX2XGp2llx0W6WHgRcGRE9Hd63YyY/gS4Ivt7Yhfg\nKEk9EXFdiTEtA1ZExGvAa5JuB94HNOqPKk9MJwHnAETEEkl/BCYD8xsUUx5l1PN+NbmO59HsOp5H\ns+t4HidRsI63UlPVfGBvSXtKGgX8BdlNhJWuA04AkPRhYGVseB5WaXFJegfZ/SifiYjFDY4nV0wR\nsVdEvDMi3knWBvzFBv9B5Tl+vwL+VFKbsps/PwQ8XHJMTwLTANJ1hMnA4w2MKY8y6nmfSqjj/Sqh\njufR7DqeR+E63jJnHBHxpqRTgVvIekpcHBELJZ2S5l8YETdKmiFpMfAq8LmhEBfwD8BOwAXp109D\n3yuSM6amynn8HpF0M/Ag2QW7iyKiYX9UOffT2cAlkh4ka+r4WkS82KiYACRdDhwK7CJpGXAmWRNH\nafW8v5hoch3PGVPT5Th2Ta3jeWJiM+q4bwA0M7NCWqmpyszMhgAnDjMzK8SJw8zMCnHiMDOzQpw4\nzMysECcOMzMrxInDzMwKceIwa4J0d3qf740waxVOHGZmVogTh1mF9La4BySNlrRdeiPa/jXKXS5p\nRsX4JZI+JWmipNsl3Zs+B9X47kmSflQxfr2kQ9PwdEl3pO9eKWm7NP07kv6QYvteY7beLJ+WeVaV\nWTNExD2SrgO+BWwDXFbnWUKzgOOAG9MDEg8DTiH7MXZERLwhaW/gP4AP9rdaICTtApwBHB4Rryl7\nle1XJP0/4NiI2BdA0g59LMus4Zw4zDZ1FtmTc18je4NcLTcD/5KSxlHAbSlZtAPnS3ofsA7YJ+c6\nBXwY2B+4Iz0ocBRwB7AKeF3SxWSvQL1+s7bKbJA4cZhtahdgO7In5m4DrKkuEBGvS+oC/hvZmcfl\nadaXgWcj4rOS2oDXayz/TTZuJt66YrgzIo6v/oKkKWQv//lz4NQ0bFYKX+Mw29SFwN+RNTOd20e5\nWWRvuzuE7AwEsnc2L0/DJ5Aln2pPAAcoM4Hs3ecBzAMOTm9hI11j2Ttd59gxIm4CvkL24h+z0viM\nw6yCpBOANyLiCkkjyJqNOiKiq0bx2cBlwLUR8Waa9mPg6rScm4HVFeUDICJ+m96y9jCwELg3TV8h\n6STgckmj03fOAF4BfiVpa7ImrS8P2gabbQa/j8PMzApxU5WZmRXipiqzPkh6D/DzqsmvR8Qm92eY\nDRduqjIWGJ5dAAAAJklEQVQzs0LcVGVmZoU4cZiZWSFOHGZmVogTh5mZFeLEYWZmhfx/p4Sdfra8\nBhkAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(transformed[0,0:3], transformed[1,0:3], 'o', markersize=7, color='blue', alpha=0.5, label='men')\n", "plt.plot(transformed[0,3:6], transformed[1,3:6], '^', markersize=7, color='red', alpha=0.5, label='women')\n", "#plt.xlim([-4,4])\n", "#plt.ylim([-4,4])\n", "plt.xlabel('x_values')\n", "plt.ylabel('y_values')\n", "#plt.legend()\n", "plt.title('Transformed samples with class labels')\n", "\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix W:\n", " [[ 0.561]\n", " [ 0.608]\n", " [ 0.562]]\n" ] } ], "source": [ "# Just one dimension \n", "matrix_w2 = np.hstack((eig_pairs[0][1].reshape(3,1),))\n", "print('Matrix W:\\n', matrix_w2)\n", "\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.731 0.733 0.907 0.141 0.593 0.098]]\n" ] } ], "source": [ "transformed2 = np.dot(X_r.T,matrix_w2).transpose()\n", "print (transformed2)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\njRrFqaeeWtE+doWTipn1aYtvu41jd9+dVbffzrp166q23Pvf/37uvfdeAObPn8/rr7/O+vXruffe\nexkxYgQXXHABd911FwsXLmTevHn88pe/BGDt2rVMnDiRP/7xj+y000589atf5Y477uDnP/85X/va\n1wC49tprGThwIHPnzmXu3Llcc801m95ivHDhQr773e/yyCOP8MQTT/Db3/62wiNUGScVM+uzXnvt\nNbZdupSGfv0Yu24d837zm6otN2bMGB588EFeffVVtt12W4444gjmz5/Pfffdx8CBA5kwYQLveMc7\naGho4JOf/CT33HMPAE1NTRx//PEAHHjggTQ3N9PQ0LDpdfkAs2bN4vrrr+fQQw9l3LhxvPTSSyxd\nuhRJjB07lr322gtJHHLIIVV/Zb6Tipn1WYtmz+aQhgYABvTvT9x/P2tWr67Kco2Njey7775MmzaN\nI488kqOOOoo777yTpUuXMnTo0M2uzUTEphdGNjY2bppe6nX5ba688koWLFjAggULWLZsGZMmTSIi\ntnhlfuEy1eCkYmZ90oYNG3hj4UJ2SB/SAGObmph7441VWQ5g/PjxfPvb3+boo49m/Pjx/OAHP2DM\nmDGMHTuWu+++mxdffJENGzYwY8YMjj766LL35fjjj+f73//+poTx+OOPs3bt2rKXz5OTipn1SYvn\nz2d00QdvU0MDg5YsYcUTT+S+HGRJ5bnnnuOII45g9913Z7vttmP8+PHsscceXHLJJUyYMIFDDjmE\nww47jA996ENA56/LB/jc5z7H6NGjGTNmDAceeCBnnXUW69evr8sr8+v+lmJJk4HLgQbgRxFxaYky\nVwAnAGuB0yNiQcG8BmA+8HREfKjEsn5LsZlt8SbeO266iYaVK7coFxGsHzyYY08+ueR6urpcd9Zr\nXn2fEsJjwCTgGWAecEpELC4oMwU4OyKmSDoc+G5EjCuY/0XgPcBOEXFiiW04qZiZX33fgd706vux\nwNKIWB4RrcAM4KSiMicC1wFExAPAQEmDACQNAaYAPwK658+gmZn1IfVOKoOBFQXjT6dp5Zb5DvBl\nYGO1AjQzs/LVO6mU2xYtboVI0geBv6TrK26lmJl1A9vUefvPAHsXjO9N1hLpqMyQNO2jwInpmsu2\nwM6Sro+I04o3MnXq1E3Dzc3NNDc35xG7mVmv0dLSQktLy1avp94X6rchu1A/EVgJzKXjC/XjgMsL\n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\nAeXu8Cd2KHOXAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(transformed2[0,0:3],[0,0,0], 'o', markersize=7, color='blue', alpha=0.5, label='men')\n", "plt.plot(transformed2[0,3:6],[0,0,0], '^', markersize=7, color='red', alpha=0.5, label='women')\n", "#plt.xlim([-4,4])\n", "#plt.ylim([-4,4])\n", "plt.xlabel('x_values')\n", "plt.ylabel('y_values')\n", "plt.legend()\n", "plt.title('Transformed samples with class labels')\n", "\n", "plt.show()" ] } ], "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.3.5" } }, "nbformat": 4, "nbformat_minor": 0 }