{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Főkomponens-analízis (PCA)\n", "\n", "A [főkomponens-analízis](https://hu.wikipedia.org/wiki/F%C5%91komponens-anal%C3%ADzis) ([Principal Component Analysis](https://en.wikipedia.org/wiki/Principal_component_analysis#Singular_value_decomposition), PCA) az SVD közeli \"rokona\". \n", "\n", "Mi a PCA célja? Idézet a fenti cikkből:\n", "\"Működése felfogható úgy, mint az adat belső struktúrájának feltárása oly módon, hogy az a legjobban magyarázza az adathalmaz szóródását. Ha egy többváltozós adathalmaz egy nagy-dimenziós adattérben koordináták halmazaként ábrázolt, a főkomponens-analízis egy alacsonyabb dimenziójú képet szolgáltathat a felhasználó számára, a leginformatívabb nézőpontból nézve az objektum egy levetítése vagy „árnyéka” által. Ez az első néhány főkomponens felhasználásával történik úgy, hogy a transzformált adat dimenzióit lecsökkentjük.\"\n", "\n", "A PCA ezért igen hasznos az adatok ábrázolásához, illetve a gépi tanulás különböző eljárásaihoz (regresszió, klaszterezés).\n", "\n", "Legyen $\\mathbf{X}$ egy $p\\times n$ méretű mátrix, amelynek sorai az egyes \"jellegzetességek\", oszopai pedig az egyes mérések\". A \"jellegzetességek\" a mért változók vagy azok valamilyen kombinációi. \n", "\n", "Ha $\\mathbf{X}$ soronként zérus átlagú, akkor állítsuk elő a mérések tapasztalati kovariancia mátrixát:\n", "\n", "$$\\mathbf{C}_{\\mathbf{X}} = \\frac{1}{n-1} \\mathbf{X}\\mathbf{X}^T$$\n", "\n", "Állítsuk elő a $\\mathbf{C}_{\\mathbf{X}}$ mátrix sajátérték felbontását:\n", "\n", "$$\\mathbf{C}_{\\mathbf{X}} = \\mathbf{P}\\mathbf{\\Lambda}\\mathbf{P}^T.$$\n", "\n", "Ebben az esetben az $\\mathbf{Y}=\\mathbf{P}\\mathbf{X}$ mátrix adja az $\\mathbf{X}$ mátrix ábrázolását a főkomponensek terében.\n", "\n", "A PCA elvégezhető az $\\mathbf{X}$ mátrix SVD felbontása segítségével is. Legyen az $\\mathbf{X}$ mátrix SVD felbontása:\n", "\n", "$$\\mathbf{X}=\\mathbf{U}\\mathbf{S}\\mathbf{V}^T.$$\n", "\n", "Ekkor a $p\\times p$ méretű $\\mathbf{U}$ mátrix oszlopai tartalmazzák a $\\mathbf{C}_{\\mathbf{X}}$ kovariancia mátrix *főkomponenseit*.\n", "\n", "A PCA egy olyan új koordinátarendszert próbál megtalálni, amelyben a variancia az első komponens szerint maximális. Kiderül, hogy ez a $\\mathbf{C}$ kovariancia mátrix SVD (sajátérték) felbontása. Mivel mindegyik sajátvektorhoz egy sajátérték tartozik, ezért a sajátvektorok valamilyen részhalmazát kiválasztva (ezek jellemzően a legnagyobb sajátértékekhez tartozó sajátvektorok), lecsökkenthetjük a jellegzetességek vektorának dimenzióját erre az altérre történő vetítéssel.\n", "\n", "Legyen $\\mathbf{\\hat{U}}$ az SVD bal oldali sajátvektoraiból álló $m\\times k$ méretű mátrix, amelyben csak a legnagyobb $k$ sajátértékhez tartozó sajátvektorok oszlopait választottuk ki. Ekkor elő tudjuk állítani az $\\mathbf{X}$ mátrix egy $\\mathbf{\\hat{X}}$ $n\\times k$ méretű közelítését:\n", "\n", "$$\\mathbf{\\hat{X}}=\\mathbf{\\hat{U}}\\mathbf{X}.$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Először megírjuk a `PCA(X)` Python függvényt, amely elvégzi az `X` mátrix főkomponens-elemzését. Először levonjuk `X` soronkénti átlagait (mivel az `X` mátrix egyes sorai a változókra vonatkozó mérések) és kiszámoljuk a `Cx` kovariancia mátrixot. Ezután az `eig()` függvénnyel átlós alakra transzformáljuk." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "# PCA függvény\n", "def PCA(X):\n", " \"\"\" főkomponens-elemzést végez (PCA)\n", " a (p,n) méretű A adatmátrixon\n", " X soraiban vannak az egyes változókra vonatkozó mérések, oszlopaiban az összes változó egy adott mérése\n", "\n", " Eredmények : \n", " var :\n", " a főkomponensek varianciái\n", " Y : \n", " 'X' ábrázolása a főkomponensek terében, Y = P.X\n", " P : \n", " 'X' kovariancia mátrixa sajátértékeit tartalmazó vektor.\n", " \"\"\"\n", " # soronként kivonjuk az átlagot\n", " M = (X - np.mean(X,axis=1,keepdims=True))\n", " # kiszámítjuk a kovariancia mátrix torzítatlan becslését\n", " Cx = 1.0/(X.shape[1]-1) * np.dot(M,M.T)\n", " # a kovariancia mátrix sajátértékeinek és sajátvektorainak a számítása \n", " var, P = np.linalg.eig(Cx) # a sajátértékek nem mindig nagyság szerint rendezettek!\n", " Y = np.dot(P,M) # az adatok vetítése az új térbe\n", " return var, Y, P" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Kétváltozós minta adatrendszer. Az `X` mátrix sorai az egyes változók." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.28402771 0.0490834 ]\n", "[[-1.07495104e-01 -1.55202114e-03 4.63456244e-01 1.52193204e-01\n", " -7.31119496e-02 2.48633173e-01 -3.56701329e-01 -4.64172582e-02\n", " -1.77646297e-02 -2.61240329e-01]\n", " [ 8.39431238e-01 -1.78331085e+00 9.57814340e-01 2.62749365e-01\n", " 1.68726247e+00 8.95757526e-01 -7.04568090e-02 -1.14457216e+00\n", " -4.38046137e-01 -1.20662898e+00]]\n", "[[ 0.73517866 -0.6778734 ]\n", " [ 0.6778734 0.73517866]]\n" ] } ], "source": [ "X = np.array([ [2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9],\n", " [2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1] ])\n", "# PCA elemzés\n", "var, Y, P = PCA(X)\n", "print(var)\n", "print(Y)\n", "print(P)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A két főkomponenst szaggatott vonallal ábrázoljuk, az eredeti adatokat kék pontokkal, az új adatokat piros csillaggal. Az első főkomponens az adatok legnagyobb változékonyságát mutatja és a második erre merőleges." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgOElEQVR4nO3de3RU5b3/8feXiCLeYJGoaICwLNWqFNGUhQLiDYUCokILmKOtt0jxRr3wU/F4alu02lNbKworWkQstSggRUQBRUTwoATEC43+RA8IP7AiIkSDYMz398dMbIyTZE8ykz2z83mtNSuz9zyZ/Q1r+GTn2c+zH3N3REQk+7UKuwAREUkNBbqISEQo0EVEIkKBLiISEQp0EZGI2CesA+fm5npBQUFYh5eIW7169SfunhfGsfXZlnSq77MdWqAXFBRQWloa1uEl4sxsY1jH1mdb0qm+z7a6XEREIiJwoJtZjpm9bmbzE7xmZvZnM1tvZm+a2YmpLVNERBqSzBn6dUBZHa8NArrFH8XA5CbWJSIiSQoU6GaWDwwGHq6jyTBgusesBNqZWccU1SgiIgEEPUP/EzAeqKrj9SOBTTW2N8f3fYuZFZtZqZmVbtu2LZk6RUSkAQ0GupkNAT5299X1NUuw7zt3/XL3EncvdPfCvLxQRpSJiERWkDP0PsC5ZrYB+Dtwhpn9tVabzUCnGtv5wJaUVCgiIoE0GOjufou757t7ATAKWOLu/1Gr2Tzg4vhol97ATnffmvpyRUSkLo2eWGRmYwDcfQqwAPgxsB6oAC5JSXUiIhJYUoHu7kuBpfHnU2rsd+CqVBYmIiLJ0UxREZGIUKCLiESEAl1EJCIU6CIiEaFAFxGJCAW6iEhEKNBFRCJCgS4iEhEKdBGRiFCgi4hEhAJdRCQiFOgiIhGhQBcRiQgFuohIRCjQRUQiIsiaom3M7DUze8PM1pnZHQnanGZmO81sbfxxe3rKFRGRugRZ4GIPcIa7f25mrYHlZvasu6+s1e5ldx+S+hJFwmNmnYDpwOFAFVDi7veFW5VIYg0Genw1os/jm63jD09nUSIZpBK4wd3XmNlBwGozW+zu/wy7MJHaAvWhm1mOma0FPgYWu/urCZqdHO+WedbMjqvjfYrNrNTMSrdt29b4qkWaibtvdfc18eflQBlwZLhViSQWKNDd/Wt3PwHIB3qZ2fG1mqwBurh7D+B+YG4d71Pi7oXuXpiXl9f4qkVCYGYFQE/gOyc0OlmRTJDUKBd3/4zYItEDa+3f5e6fx58vAFqbWW6KahQJnZkdCMwGxrn7rtqv62RFMkGQUS55ZtYu/nx/4CzgnVptDjcziz/vFX/f7SmvViQE8cEAs4EZ7j4n7HpE6hJklEtH4FEzyyEW1E+4+3wzGwPg7lOAEcAvzKwS2A2Mil9MFclq8ROVvwBl7n5v2PWI1CfIKJc3ifUb1t4/pcbzScCk1JYmkhH6ABcBb8UHBgDcGu9aFMkoQc7QRVosd18OWNh1iAShqf8iIhGhQBcRiQgFuohIRGRkoL/yyitUVVWFXYaISFbJuEB//fXX6du3L9dddx0a+SgiElzGBfoJJ5zA9ddfzyOPPMIHH3wQdjkiIlkj4wLdzPj973/P2rVrOeqoo8IuR0Qka2RcoEMs1L/3ve8BMGnSJP72t7+FXJGISObL6IlFlZWVzJo1ixUrVtC+fXsGDRoUdkkiIhkrI8/Qq+2zzz784x//oHv37gwfPpxXXnkl7JIkA7g7d9xxB48//njYpYhklIwOdIBDDjmE5557jvz8fAYPHsxbb70VdknSSDNmQEEBtGoV+zpjRuPe5+abb+ZXv/oVS5cuTWF1Itkvo7tcqh166KEsWrSIvn378sorr9C9e/ewS5IkzZgBxcVQURHb3rgxtg1QVJTce5199tm0atWKO++8M7VFimQ5C2usd2FhoZeWlib1PeXl5Rx00EFA7M/u+C3YJQsUFMRCvLYuXWDDhoa//4svvmDx4sWcd955gY5nZqvdvTCZGlOlMZ9tkaDq+2xnfJdLTdVhvnTpUvr3789nn30WbkES2IcfJre/pk8//ZQBAwYwYsQI3n///dQWJhIhWRXo1fbs2cPKlSsZOnQoFdV/w0tG69w5uf3VtmzZQv/+/Vm9ejUzZ87U3ASRegRZgq6Nmb1mZm+Y2TozuyNBGzOzP5vZejN708xOTE+5Meeccw6PPfYYK1asYOTIkXz11VfpPJykwMSJ0Lbtt/e1bRvbX5f169fTt29fNmzYwIIFCxg+fHh6ixTJckHO0PcAZ7h7D+AEYKCZ9a7VZhDQLf4oBiansshERo4cyYMPPsj8+fO59NJLdTOvDFdUBCUlsT5zs9jXkpL6L4i+8MIL7Nq1iyVLlnDmmWc2X7EiWSrIEnQOfB7fbB1/1L6SOgyYHm+70szamVlHd9+a0mprGTNmDNu3b6esrIyvv/6aVq2ysgepxSgqCjai5YsvvuCAAw7gyiuvZPjw4eTm5qa/OJEICJSAZpYTX0/xY2Cxu79aq8mRwKYa25vj+2q/T7GZlZpZ6bZt2xpZ8rfdeuutTJ8+ndatW7N79+6UvKeEZ/78+XTt2pU1a9YAKMxFkhAo0N39a3c/AcgHepnZ8bWaJBo/+J3xkO5e4u6F7l6Yl5eXdLGJmBmtWrXio48+okePHkyenPbeHkmTxx57jPPOO48uXbrQuaGrpSLyHUn1Ubj7Z8BSYGCtlzYDnWps5wNbmlJYsjp06MDRRx/NVVddxcyZM5vz0JIC9913HxdffDH9+/dnyZIlOjMXaYQgo1zyzKxd/Pn+wFnAO7WazQMujo926Q3sTHf/eW2tW7fmiSeeoG/fvlx00UUsWrSoOQ8vTfDUU08xbtw4LrjgAhYsWPDNfAMRSU6QM/SOwItm9iawilgf+nwzG2NmY+JtFgAfAOuBh4Cxaam2Afvvvz/z5s3j2GOP5fzzz2fVqlVhlCFJGjJkCA888ABPPPEE++23X9jliGStIKNc3gR6Jtg/pcZzB65KbWmN065dOxYuXMi1115LQUFB2OVIHfbu3cutt97KTTfdxGGHHcbYsaGcA4hESiTH+R122GHMnDmTvLw89u7dy9atzdr7Iw344osvGDp0KH/4wx9YuHBh2OWIREYkA72mn//85/Tv35+PP/447FIE2L59O2eeeSbPP/88U6dO5eKLLw67JJHIiHygX3311WzevJmBAweyc+fOsMtp0bZs2cKpp57K2rVrmT17NpdccknYJYlESuQD/ZRTTmH27Nm89dZbnHvuuZp8FKJ9992XAw88kGeffTbwbXBFJLjIBzrAoEGDmD59Oi+//DLF1asqSLMpKytj79695ObmsnLlSk4//fSwSxKJpKxYsSgVRo8eTUVFBSeemNYbQUotL730EkOHDuWSSy7hvvvu06IkImnUIs7Qq1122WX07Bkbgbl06VLCWq2ppZg3bx7nnHMO+fn53HTTTWGXIxJ5LSrQqz399NOcfvrp3H333WGXElnTpk3jggsuoEePHrz88svk5+eHXVKjmdlUM/vYzN4OuxaR+rTIQB88eDAXXnght9xyCw899FDY5UTO9u3b+eUvf8kZZ5zBCy+8QIcOHcIuqamm8d37F4lknBbTh15Tq1atmDZtGjt27GDMmDG0b9+eESNGhF1W1qteuLtDhw4sW7aM73//+5GYyu/uy8ysIOw6RBrSIs/QIXYzr1mzZnHyySdz0UUXaTZpE3399ddceeWV3HPPPQB07949EmEeVDru9S+SrBYb6ABt27bl6aef5oknnqBjx45hl5O19uzZw8iRI3nooYfYtWtX2OWEIh33+hdJVosOdID27dszdOhQABYvXkxZWVnIFWWX8vJyBg8ezOzZs7n33nv57W9/G3ZJIi1Wi+xDT2TPnj1cfvnlVFVVsWLFCq2YE0BlZSVnn302q1at4tFHH9V9WURC1uLP0Kvtt99+zJs3j/Lycs4++2zUD9qwffbZh0svvZSnnnoq0mFuZo8D/wMcbWabzeyysGsSSSTIikWdzOxFMyszs3Vmdl2CNqeZ2U4zWxt/3J6ectOrR48ezJ8/n40bNzJo0CDKy8vDLiktZsyAggJo1Sr2dcaM5L7/nXfe4fnnnwfgiiuu+KbLKqrcfbS7d3T31u6e7+5/CbsmkUSCnKFXAje4+w+A3sBVZnZsgnYvu/sJ8cevU1plM+rbty+zZs1i7dq1PPzww2GXk3IzZkBxMWzcCO6xr8XFwUO9tLSUfv36UVxczN69e9NbrIgkpcFAd/et7r4m/rwcKAOOTHdhYRo8eDCvvvoq48aNC7uUlJswASoqvr2voiK2vyFLlizh9NNP58ADD2ThwoXsu+++6SlSRBolqT70+OSKnsCrCV4+2czeMLNnzey4Or4/a8bqnnTSSZgZ69ev57bbbovMfV8+/DC5/dXmzJnDoEGD6NKlCytWrKBbt26pL05EmiRwoJvZgcBsYJy71x5svAbo4u49gPuBuYneIxvH6s6ePZuJEydyyy23hF1KStQ1eKehQT2LFy/mxBNPZNmyZRxxxBGpL0xEmizQsEUza00szGe4+5zar9cMeHdfYGYPmlmuu3+SulLDMX78eDZu3Mjdd99Nhw4dsv6ugRMnxvrMa3a7tG0b25/Ijh07aN++PZMmTWLPnj20bdu2eQoVkaQFGeViwF+AMne/t442h8fbYWa94u+7PZWFhsXMuP/++xk5ciTjx49n6tSpYZfUJEVFUFICXbqAWexrSUlsf03uzvjx4+nZsyfbtm0jJydHYS6S4YKcofcBLgLeMrO18X23Ap0B3H0KMAL4hZlVAruBUR6VTmcgJyeH6dOns2PHDh555BF+9rOfkZOTE3ZZjVZU9N0Ar6myspIrr7ySqVOnMnbs2CjcLVGkRWgw0N19OVDvMjPuPgmYlKqiMtG+++7LnDmx3qZsDvOGfPnll4wePZq5c+dy++2386tf/UqrDIlkCc0UTcIBBxzAAQccQHl5Oeeffz6rV68Ou6SUmzBhAnPnzuW+++7jjjvuUJiLZBEFeiOUl5ezdu1aBg4cyLvvvht2OSl12223MXfuXK699tqErzd1lqmIpI8CvRGOOOIIFi1aRKtWrRgwYACbNm0Ku6Qm+fDDD7niiiv48ssvad++PcOGDUvYrqmzTEUkvRTojdStWzeee+45du7cydlnn80nn2TnCM2ysjL69OnDk08+yXvvvVdv26bMMhWR9FOgN0HPnj15+umn+eqrr7Iy0F977TX69etHZWUly5Yto3v37vW2b+wsUxFpHgr0Jjr11FMpKyvjmGOOwd2prKwMu6RAXnzxRc444wwOOeQQli9fzg9/+MMGv6exs0xFstbWrdC/P3z0UdiVBKJAT4HWrVsDcMMNNzB69Gi+/vrrkCtq2KGHHsqPfvQjli9fzlFHHRXoeyZOjM0qramuWaa6eCqR8JvfwPLl8OvsuIGsAj2F8vPzmTVrFmPHjs3Ym3mtWLECd+e4447jxRdfTGot1aCzTHXxVLLe/vvHPuSTJ0NVVeyrWWx/BlOgp9D111/PLbfcQklJCRMy7Eqhu3PnnXfSt29fHn/88Ua/T1ERbNgQ+4xv2JB4xqkunkrW++ADuPDCf/9J2rZt7MP+v/8bbl0N0JqiKTZx4kQ++eQT7rrrLnJzc7n++uvDLomqqipuvPFG/vjHP1JUVMRPfvKTtB5PF08l63XsCAcfDF9+CW3axL4efDAcfnjYldVLgZ5iZsbkyZPZvXs3Xbt2DbscKisrufzyy3n00Ue55ppr+NOf/kSrVun9w6xz51g3S6L9IlnjX/+CMWNi/YUlJbELpBlOgZ4GOTk5PPbYY99sf/LJJ+Tm5oZSy2uvvcZf//pXfv3rX3Pbbbc1y1T+ZG/RK5KR5tS4U/gDD4RXRxLUh55m8+fPp2vXrrz00kvNetyqqioATjnlFN5++23+8z//s9nuyxL04qmIpJYCPc169+5Np06dOPfcc3n99deb5Zj/+te/6N27N/PmzQPgmGOOaZbj1hTk4qlIxsqy8efVFOhplpuby6JFi2jXrh0DBw5scHp9U23YsIG+ffuybt06LeIs0lhZNv68mgK9GeTn57No0SKqqqoYMGAAO3bsSMtx1q1bR58+fdi+fTvPP/88AwcOTMtxRCIrS8efVwuyBF0nM3vRzMrMbJ2ZXZegjZnZn81svZm9aWYnpqfc7FF7pmRp6dE899xzXH755bRr1y7lx9u0aRP9+vXD3Vm2bBknn3xyyo8hEnlZOv68WpAz9ErgBnf/AdAbuMrMjq3VZhDQLf4oBiantMosU9dMyXfeOembkSbvvfcen3/+ecqOmZ+fzw033MCKFSs4/vjjU/a+Ihkl3X3bWTr+vFqDge7uW919Tfx5OVAGHFmr2TBgusesBNqZWfA55RHT0EzJ8vJy+vXrx/Dhw9m7d2+TjvXkk0/yz3/+EzNjwoQJGTH2XSRtmqNvu3r8+cqVsa/ZdGHU3QM/gALgQ+DgWvvnA31rbL8AFCb4/mKgFCjt3LmzR5WZe+zc/NsPs3+3efjhhx3wkSNHemVlZaOO8+CDD7qZ+ahRo1JUeXQApZ7EZzuVj5NOOqk5fsSWpU2bxP+p2rQJu7JmV99nO/BFUTM7EJgNjHP3XbVfTvS7IsEvjxJ3L3T3wry8vKCHzjpBbjN72WWXcc899zBz5kyuvvrqpG7m5e785je/YezYsQwZMoSpU6c2sWKRDJflfdvNJVCgm1lrYmE+w93nJGiyGehUYzsf2NL08rJT0NvM3nTTTYwfP54pU6YEDuWqqirGjRvH7bffzkUXXcTs2bPZv8YVeN22ViIpy/u2m0uQUS4G/AUoc/d762g2D7g4PtqlN7DT3TP/xgdpksxMyd/97nc8+OCDXHjhhYHe+6uvvuKNN95g3LhxTJs27Zt7sYNuWysRl819283EGvpT38z6Ai8DbwFV8d23Ap0B3H1KPPQnAQOBCuASdy+t730LCwu9tLTeJi3OZ599xsqVKxOOH6+oqGDv3r20a9eOL7/8kv322+87U/kLChLfFKtLl9hszZbEzFa7e2GK3msgcB+QAzzs7r+rr32dn+2tW2HUKJg5U2eW0mj1fbaDjHJZ7u7m7j909xPijwXuPsXdp8TbuLtf5e5HuXv3hsJcEpswYQJDhw7lmWee+db+zz77jHPOOYdzzz2Xqqoq2rRpk/C+LLptbeqZWQ7wALGhuccCoxMM2w0mS2cf1itLp8hHlWaKZpC77rqLHj16MGLECJYvXw7ARx99RP/+/Xn11Ve55ppr6r31rdb8TItewHp3/8Dd9wJ/JzZMN7jmnH3Y3AEbxV9SWUyBnkEOPvhgnn32Wbp06cKQIUNYsGABffr04f333+eZZ55pcGGKZNb8lMCOBDbV2N7Md+dhYGbFZlZqZqXbtm379ovNOUKjuQI2y6fIZ7Qm/FJWoGeYvLw8Fi1axEEHHcRPf/pTduzYwZIlSxgwYECD36vb1qZF04fkNscIjeYO2CgOI8yU7qMm/FJWoGegzp07s3jxYp555hmWL19Or169An+vblubcqkZkpvuERrNHbBRHEYYdvdRCn4pa8WiDHXMMceEch9z+Y5VQDcz6wr8P2AUEGyMaU3pXv0mjIDNwiXaEtp//9i/V7XJk2OPNm1g9+7mq+ODD+DGG2Hu3Ni9Qtq2hfPPh//+78BvoUAXqYe7V5rZ1cBCYsMWp7r7upDLSqy5AzYLl2hLKAVBmhIp+KWsQBdpgLsvABaEXUeDohKwzS2Tuo+a+EtZgS4ikindR038paxAFxGJyF83GuUiEgWZMuROQqVAF4mCsIfcSUZQoItkM83YlBoU6CLZLJtnbKqbKOUU6CLZLJOG3CVL3UQpp0AXyXbZtvCDuonSJsiKRVPN7GMze7uO108zs51mtjb+uD31ZWYfLQUnzWbOnNhQux49Yl9rDsHLRNncTZThgoxDn0ZsNaLp9bR52d2HpKSiCKheCq6iIrZdvRQc6GZZIlndTZThgqxYtAz4tBlqiYwJE/4d5tUqKmL7RYTs6ybKEqmaKXqymb1B7LaiN9Z18yIzKwaKIXaL2KjSUnAiDYjIzMxMk4qLomuALu7eA7gfmFtXw3oXAYgQLQUnImFocqC7+y53/zz+fAHQ2sxym1xZFtNScCIShiYHupkdbvEl6M2sV/w9tzf1fbOZloITkTA02IduZo8DpwG5ZrYZ+C+gNYC7TwFGAL8ws0pgNzDK3b+z5mJLU1SkABeR5tVgoLv76AZen0RsWKOIiIRIM0VFRCJCgS4iEhEKdBGRiFCgi4hEhAJdRCQiFOgiIhGhQBcRiQgFuohIRCjQRUQiQoEuIhIRCnQRkYiIXKBrLU8RaalStWJRRtBaniLSkkXqDF1reYpISxapQNdanpJKZvYTM1tnZlVmVhh2PSINaTDQzWyqmX1sZm/X8bqZ2Z/NbL2ZvWlmJ6a+zGC0lqek2NvABcCysAsRCSLIGfo0YGA9rw8CusUfxcDkppfVOMms5amLp9IQdy9z93fDrkMkqAYD3d2XAZ/W02QYMN1jVgLtzKxjqgpMRtC1PKsvnm7cCO7/vniqUJfGMrNiMys1s9Jt27aFXY60UKnoQz8S2FRje3N8XyiKimDDBqiqin1NNLpFF0+lmpk9b2ZvJ3gMS+Z93L3E3QvdvTAvLy9d5YrUKxXDFi3BvoSLRJtZMbFuGTqH2LGti6dSzd3PCrsGkVRJxRn6ZqBTje18YEuihplyFqOLpyISRakI9HnAxfHRLr2Bne6+NQXvmzbJXDyVlsvMzjezzcDJwDNmtjDsmkTq02CXi5k9DpwG5MY/3P8FtAZw9ynAAuDHwHqgArgkXcWmSnW/+oQJsW6Wzp1jYa7ZpFKTuz8FPBV2HSJBNRjo7j66gdcduCplFTWToiIFuIhES6RmioqItGQKdBGRiFCgi4hEhAJdRCQiFOgiIhGhQBcRiQgFuohIRCjQRUQiQoEuIhIRCnQRkYhQoIuIRIQCXUQkIhToIiIRoUAXEYkIBbqISEQo0EVEIiJQoJvZQDN718zWm9nNCV4/zcx2mtna+OP2VBc6YwYUFECrVrGvM2ak+ggiItktyBJ0OcADwABiC0KvMrN57v7PWk1fdvchaaiRGTOguBgqKmLbGzfGtkGrDomIVAtyht4LWO/uH7j7XuDvwLD0lvVtEyb8O8yrVVTE9ouISEyQQD8S2FRje3N8X20nm9kbZvasmR2X6I3MrNjMSs2sdNu2bYGL/PDD5PaLiLREQQLdEuzzWttrgC7u3gO4H5ib6I3cvcTdC929MC8vL3CRnTsnt19EpCUKEuibgU41tvOBLTUbuPsud/88/nwB0NrMclNV5MSJ0Lbtt/e1bRvbLyIiMUECfRXQzcy6mtm+wChgXs0GZna4mVn8ea/4+25PVZFFRVBSAl26gFnsa0mJLoiKiNTU4CgXd680s6uBhUAOMNXd15nZmPjrU4ARwC/MrBLYDYxy99rdMk1SVKQAFxGpT4OBDt90oyyotW9KjeeTgEmpLU1ERJKhmaIiIhGhQBcRiQgFuohIRCjQRUQiQoEuIhIRCnSROpjZ783sHTN708yeMrN2YdckUh8FukjdFgPHu/sPgf8L3BJyPSL1UqCL1MHdF7l7ZXxzJbHbXohkLAW6SDCXAs/W9WJj7yQqkkqBZoqKRJWZPQ8cnuClCe7+j3ibCUAlUOc6We5eApQAFBYWpvS2FyJBKdClRXP3s+p73cx+BgwBzkz1/YlEUk2BLlIHMxsI/B+gv7tXNNReJGzqQxep2yTgIGBxfPHzKQ19g0iYdIYuUgd3/17YNYgkQ2foIiIRESjQzWygmb1rZuvN7OYEr5uZ/Tn++ptmdmLqSxURkfo0GOhmlgM8AAwCjgVGm9mxtZoNArrFH8XA5BTXKSIiDQhyht4LWO/uH7j7XuDvwLBabYYB0z1mJdDOzDqmuFYREalHkEA/EthUY3tzfF+ybUREJI2CBLol2Fd7gkWQNpoeLSKSRkECfTPQqcZ2PrClEW1w9xJ3L3T3wry8vGRrFRGRegQJ9FVANzPramb7AqOAebXazAMujo926Q3sdPetKa5VRETq0eDEInevNLOrgYVADjDV3deZ2Zj461OABcCPgfVABXBJ+koWEZFEAs0UdfcFxEK75r4pNZ47cFVqSxMRkWRopqiISEQo0EVEIkKBLiISEQp0EZGIUKCLiESEAl1EJCIU6CIiEaFAFxGJCAW6iEhEKNBFRCJCgS4iEhEWuw1LCAc22wZsbObD5gKfNPMxU00/QzBd3D2UezSH9NkOItM/O6ovmDo/26EFehjMrNTdC8Ouoyn0M0hjZfq/u+prOnW5iIhEhAJdRCQiWlqgl4RdQAroZ5DGyvR/d9XXRC2qD11EJMpa2hm6iEhkKdBFRCKiRQS6mU01s4/N7O2wa2kMM+tkZi+aWZmZrTOz68KuKVlm1sbMXjOzN+I/wx1h19QSmdlP4v/+VWaWEUPwzGygmb1rZuvN7Oaw66ktm/KjRQQ6MA0YGHYRTVAJ3ODuPwB6A1eZ2bEh15SsPcAZ7t4DOAEYaGa9wy2pRXobuABYFnYhAGaWAzwADAKOBUZn4Gd7GlmSHy0i0N19GfBp2HU0lrtvdfc18eflQBlwZLhVJcdjPo9vto4/dEW+mbl7mbu/G3YdNfQC1rv7B+6+F/g7MCzkmr4lm/KjRQR6lJhZAdATeDXkUpJmZjlmthb4GFjs7ln3M0jKHQlsqrG9mSw7Wckk+4RdgARnZgcCs4Fx7r4r7HqS5e5fAyeYWTvgKTM73t0zvl8y25jZ88DhCV6a4O7/aO56GmAJ9ukvt0ZSoGcJM2tNLMxnuPucsOtpCnf/zMyWEuuXVKCnmLufFXYNSdgMdKqxnQ9sCamWrKculyxgZgb8BShz93vDrqcxzCwvfmaOme0PnAW8E2pRkglWAd3MrKuZ7QuMAuaFXFPWahGBbmaPA/8DHG1mm83ssrBrSlIf4CLgDDNbG3/8OOyiktQReNHM3iT2n3ixu88PuaYWx8zON7PNwMnAM2a2MMx63L0SuBpYSOxi/xPuvi7MmmrLpvzQ1H8RkYhoEWfoIiItgQJdRCQiFOgiIhGhQBcRiQgFuohIRCjQRUQiQoEuIhIR/x9xOMTSlmhQNQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.figure()\n", "plt.subplot(121)\n", "# minden sajátvektor egy főkomponens irányát mutatja\n", "m = np.mean(X,axis=1)\n", "plt.plot([0, P[0,0]*2]+m[0], [0, P[1,0]*2]+m[1],'--k')\n", "plt.plot([0, P[0,1]*2]+m[0], [0, P[1,1]*2]+m[1],'--k')\n", "plt.plot(X[0,:],X[1,:],'ob') # a mérések\n", "plt.axis('equal')\n", "plt.subplot(122)\n", "# a transzformált adatok\n", "plt.plot(Y[1,:],Y[0,:],'*r')\n", "plt.axis('equal')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most számítsuk ki a főkomponenseket SVD segítségével. Ehhez elvégezzük az `M` mátrix SVD felbontását:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.49 -1.21 0.99 0.29 1.09 0.79 -0.31 -0.81 -0.31 -1.01]\n", " [ 0.69 -1.31 0.39 0.09 1.29 0.49 0.19 -0.81 -0.31 -0.71]]\n", "[1.28402771 0.0490834 ]\n", "[[-0.73517866 -0.6778734 ]\n", " [-0.6778734 0.73517866]]\n" ] } ], "source": [ "M = (X - np.mean(X,axis=1,keepdims=True))\n", "print (M)\n", "U,S,V = np.linalg.svd(M)\n", "print (S**2/(M.shape[1]-1))\n", "print (U)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Az `S` szinguláris értékek négyzete segítségével meghatározott varianciák ($1/(n-1)$-es szorzótól eltekintve) és az `U` mátrix oszlopaiban levő főkomponensek (az első komponens $-1$-es szorzójától eltekintve) megegyeznek a kovariancia mátrix sajátérték felbontásával kapott eredményekkel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A következő példa egy négyváltozós adatrendszer PCA-ját mutatja be. Most az `X` mátrix oszlopai az egyes változók, ezért a mátrix transzponáltjára végezzük el a PCA-t." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "az X mátrix a főkomponensek terében:\n", "[ 1.38594653e+01 2.14053472e+00 -2.35674713e-16 1.29088833e-16]\n", "X rangja: 3\n" ] } ], "source": [ "X = np.array([[-1, 1, 2, 2],\n", " [-2, 3, 1, 0],\n", " [ 4, 0, 3,-1]],dtype=np.double)\n", "\n", "var, Y, P = PCA(X.T)\n", "perc = np.cumsum(var)/np.sum(var)\n", "plt.figure()\n", "# a következő ábra azt mutatja, hogy az első\n", "# két főkomponens gyakorlatilag már kiadja a teljes (1 = 100%) változékonyságot\n", "plt.stem(range(len(perc)),perc,'--b')\n", "plt.axis([-0.3,4.3,0,1.3])\n", "plt.show()\n", "print ('az X mátrix a főkomponensek terében:')\n", "print (var.T) # csak az első két oszlop nem zérus\n", "print ('X rangja: ', end='')\n", "print (np.linalg.matrix_rank(X))" ] } ], "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.9.16" } }, "nbformat": 4, "nbformat_minor": 2 }