2. Álgebra Lineal y la teoría de ACP

El análisis de componentes principales (ACP) es un método muy utilizado en estadística, inteligencia artificial (machine learning), entre otras áreas, para analizar y simplificar una colección de datos. Dicha simplificación se conoce como reducción de dimensionalidad y geométricamente se puede pensar como la proyección ortogonal de los datos a cierto subespacio vectorial. Si los datos están aglomerados cerca a un subespacio (como una recta o plano), dicha proyección no altera mucho los datos con la ventaja que se reduce el número de variables involucradas.
En esta lectura vamos a describir brevemente la teoría básica utilizada en el análisis de componentes principales, en particular vamos a ver la manera en la que la diagonalización ortogonal de matrices simétricas puede ser utilizada en el análisis de componentes principales.

Matriz de datos

Para empezar, supongamos que tenemos $n$ muestras donde medimos $m$ atributos por cada muestra. Por ejemplo, podemos estar interesados en tener una base de datos con la edad, salario, años de experiencia laboral, etc, de los trabajadores de una empresa. La información de cada trabajador se puede agrupar en un vector con $m$ entradas (que lo vamos a pensar como un vector columna). Aquí $m$ es el número de atributos que estamos considerando. De esta forma obtenemos $n$ vectores $x_{1}, x_{2},\dots, x_{n}$, donde $n$ es el número de trabajadores. Consideremos la matriz $X$ de tamaño $m\times n$ dada por $X=[x_{1}| x_{2}|\cdots |x_{n}]$, es decir, las columnas de $X$ son precisamente los vectores $x_{1}, x_{2},...,x_{n}$. Por lo tanto, nuestro punto de partida consiste en tener una matriz de tamaño $m\times n$ que contiene la información relevante de nuestros datos.
Nota: En análisis de datos es común ensamblar los datos como vectores fila y no como vectores columna, sin embargo, en estas notas seguiremos nuestra convención de pensar los vectores como vectores columna.

Como un ejemplo explícito, consideremos los datos de $5$ trabajadores de una empresa donde se describen la edad (en años), años de experiencia laboral y salario (en millones de pesos) consignados en la siguiente tabla:

 Trabajador 1    Trabajador 2    Trabajador 3    Trabajador 4    Trabajador 5  
    Edad   35 45 40 55 25
  Años de experiencia laboral  10 12 10 18 5
Salario 4 5 5 6 3

Como se explicó anteriormente, con estos datos podemos construir una matriz $X$ dada a continuación:

\[X=\begin{bmatrix} 35 & 45 & 40 & 55 & 25\\ 10 & 12 & 10 & 18 & 5\\ 4 & 5 & 5 & 6 & 3 \end{bmatrix}.\]En este ejemplo, la matriz $X$ tiene tamaño $3\times 5$ ya que tenemos $m=3$ atributos que corresponden a la edad, años de experiencia laboral y salario y tenemos $n=5$ muestras correspondientes a los $5$ trabajadores.

Matriz de datos centrada

Un primer paso para realizar análisis de componentes principales es centrar los datos al origen. Geométricamente, centrar los datos corresponde a una translación de ejes de tal forma que el nuevo centro corresponde al promedio de los datos. Para esto podemos restar a cada vector $x_{i}$ el promedio de los datos $\overline{x}:=\frac{1}{n}\sum_{i=1}^{n}x_{i}$. De manera explícita, para cada $i=1,2,\dots, n$ podemos considerar el vector
\[y_{i}=x_{i}-\overline{x}=x_{i}-\frac{1}{n}\sum_{i=1}^{n}x_{i}.\]Los vectores $y_{1}, y_{2},\dots, y_{n}$ se pueden ensamblar como las columnas de una matriz $Y$ que también tiene tamaño $m\times n$, es decir, $Y=[y_{1}| y_{2}|\cdots| y_{n}]$. La matriz $Y$ contiene los datos ya centrados. Es importante resaltar que esta translación de ejes no cambia la posición relativa de los datos.

Consideremos los datos consignados en la matriz $X$ del ejemplo anterior. Con un cálculo sencillo podemos concluir que en este caso el promedio de los datos está dado por el vector \[ \overline{x}= \begin{bmatrix}40 \\ 11 \\ 4.6 \end{bmatrix}.\] Restando el vector $\overline{x}$ a cada una de las columnas de la matriz $X$ obtemos la matriz con los datos centrados
\[Y=\begin{bmatrix} -5& 5 &0 & 15 &-15\\ -1 & 1 & -1 & 7 & -6\\ -0.6 & 0.4 & 0.4 & 1.4 & -1.6\end{bmatrix}.\]Observamos que las entradas de cada fila de $Y$ suman $0$, esto se debe a que hemos centrado los datos en el origen.

Matriz de covarianzas

El siguiente paso consiste en una rotación de los datos. Para esto debemos calcular la matriz de covarianzas. Dicha matriz se define formalmente como la matriz de tamaño $m\times m$ dada por:
\[ S:=\frac{1}{n}YY^{T}. \] Notemos que la entrada $i,j$ de la matriz $S$ corresponde a la covarianza de los vectores que aparecen en las filas $i$, $j$ de la matriz $Y$. Una observación fundamental es que la matriz de covarianza es una matriz simétrica. En efecto, utilizando las propiedades de la transpuesta obtenemos: \[ S^{T}=\frac{1}{n}(YY^{T})^{T}=\frac{1}{n}(Y^{T})^{T}Y^{T}=\frac{1}{n}YY^{T}=S. \]
Adicionalmente, la forma cuadrática definida por la matriz $S$ es definida semi-positiva, es decir, los valores propios de $S$ son todos mayores o iguales a $0$.

Para el ejemplo de los trabajadores de la empresa considerada anteriormente, con un cálculo sencillo podemos llegar a que la matriz de covarianza está dada por:

\[S=\begin{bmatrix} 100 & 41 & 10 \\ 41 & 17.6 & 4\\ 10 & 4 & 1.04\end{bmatrix}.\]

Diagonalización ortogonal

Dado que $S$ es una matriz simétrica, entonces por el teorema espectral la matriz $S$ es diagonalizable ortogonalmente. Por lo tanto podemos encontrar una matriz ortogonal $Q$ y una matriz diagonal $D$ tales que \[S=QDQ^{T}=QDQ^{-1}.\] Llamemos $\lambda_{1}, \lambda_{2},\dots, \lambda_{m}$ a las entradas de la diagonal principal de $D$ (que corresponden a los valores propios de $S$). Vamos a diagonalizar ortogonalmente a la matriz $S$ de tal forma que los valores propios están ordenados de tal forma que $\lambda_{1}\ge \lambda_{2}\ge \cdots \ge \lambda_{m}\ge 0$. Adicionalmente, vamos a escoger la matriz $Q$ tal que $det(Q)=1$. Bajo estas hipótesis y como se explicó en esta clase, el cambio de variables $x'=Q^{T}x$ corresponde a una rotación de ejes. Los ejes de esta rotación son las columnas de la matriz $Q$ que denotaremos por $q_{1}, q_{2},\dots, q_{m}$. Estos vectores son llamados las direcciones principales. Un primer ingrediente en el análisis de componentes principales corresponde precisamente a rotar los datos de acuerdo con la matriz $Q^{T}$, los datos rotados se ensamblan en la matriz $Z=Q^{T}Y$. Las filas de la matriz $Z$ son llamadas las componentes principales. Observamos que los datos originales se pueden recuperar por medio de las matriz $Z$, en efecto, si $z_{i}$ denota la $i$-ésima columna de la matriz $Z$, entonces para $i=1,2,\dots, n$ tenemos que \[x_{i}=y_{i}+\overline{x}=Qz_{i}+\overline{x}.\] Un segundo ingrediente en el análisis de componentes principales y en la reducción de la dimensionalidad está relacionado con el tamaño de los valores propios. Si los datos (centrados) están aglomerados cerca a un subespacio podemos aproximarlos proyectándolos a dicho subespacio. La idea general, es que cuando los datos están aglomerados cerca a un subespacio, algunos de los valores propios de $S$ son pequeños. Supongamos que los valores propios $\lambda_{k+1}, \lambda_{k+2},\dots, \lambda_{m}$ son muy cercanos a $0$. Bajo estas hipótesis podemos reducir el número de variables solamente considerando los datos dados por $\tilde{Z}=[q_{1}|\cdots|q_{k}]^{T}Y$, es decir, solamente consideramos las direcciones dadas por $q_{1}, q_{2},\dots, q_{k}$. Esto corresponde a solamente mirar las primeras $k$ filas de matriz $Z$, es decir, solamente tomamos las primeras $k$ componentes principales. Geométricamente, esto se puede pensar como  la proyección de los datos rotados al subespacio generado por los vectores $q_{1}, q_{2},\dots, q_{k}$. Notemos que la matriz $\tilde{Z}$ tiene tamaño $k\times n$, es decir, la información de los $m$ atributos originales la estamos resumiendo en los $k$ atributos dados por las filas de $\tilde{Z}$. De esta forma podemos analizar nuestros datos pero con un número menor de atributos.

Para el ejemplo de los trabajadores, la matriz de covarianzas $S$ se puede diagonalizar ortogonalmente de la forma $S=QDQ^{T}$, donde \[Q=\begin{bmatrix} 0.9205 &-0.3602 &-0.1515\\ 0.3799 & 0.9158 & 0.1304\\0.0918 &-0.1776 &0.9798 \end{bmatrix}, \ \ \ D=\begin{bmatrix} 117.9167 & 0 & 0 \\ 0 & 0.6970 & 0\\ 0 & 0 & 0.0263\end{bmatrix}.\]

Los valores propios de $S$ son $\lambda_{1}=117.9167$, $\lambda_{2}=0.6970$ y $\lambda_{3}= 0.0263$. En particular, observamos que los valores propios $\lambda_{2}$ y $\lambda_{3}$ son comparatiavamente cercanos a $0$. Esto nos sugiere que podemos estudiar los datos con la primera componente principal o con las dos primeras componentes principales. En este caso las componentes principales están dadas por las filas de matriz \[ Z=\begin{bmatrix}-5.0375 & 5.0191 & -0.3432 & 16.5953 &-16.2338\\ 0.9918 &-0.9562 & -0.9868 & 0.7590& 0.1924\\ 0.0392 &-0.2352 & 0.2615 & 0.0120 &-0.0776\end{bmatrix}. \]Observamos que las entradas de la tercera componente principal son muy pequeñas, esto corresponde al hecho que el valor propio $\lambda_{3}$ es muy cercano a $0$.

Finalmente, si estamos interasados en interpretar estos datos en las variables originales, entonces debemos deshacer la rotación dada originalemente y luego sumar el promedio de los datos originales. De forma explícita, si utilizamos las primeras $k$ componentes principales, entonces la matriz $X$ que contiene los datos originales se puede aproximar por la matriz \[\tilde{X}=[\overline{x}|\overline{x}|\cdots|\overline{x}]+[q_{1}|q_{2}|\cdots|q_{k}]\tilde{Z}.\] Equivalentemente, si las entradas de la $i$-ésima columna de $Z$ las denotamos por $z_{1,i}, z_{2,i},\dots, z_{m,i}$, entonces al utilizar las primeras $k$ componentes principales obtenemos la aproximación de $x_{i}$ dada por: \[x_{i}\cong \overline{x}+\sum_{j=1}^{k}z_{ji}q_{j}.\] En el ejemplo de los trabajadores, si aproximamos los datos utilizando solamente la primera componente principal obtemos la aproximación \[ \tilde{X}_{1}= \begin{bmatrix}35.3630 & 44.6201 &39.6841 & 55.2760 & 25.0568\\ 9.0863 & 12.9068 & 10.8696 & 17.3046 & 4.8328\\ 4.1376 & 5.0608 & 4.5685 & 6.1234 & 3.1097 \end{bmatrix}.\] Si utilizamos las dos primeras componentes principales obtenemos la aproximación \[ \tilde{X}_{2}= \begin{bmatrix} 35.0057 & 44.9645 & 40.0395 & 55.0026 & 24.9875\\ 9.9945 & 12.0311 & 9.9659 & 17.9996 & 5.0090\\ 3.9614 & 5.2306 & 4.7437 & 5.9887 & 3.0756\end{bmatrix}.\] Notamos que estas matrices son buenas aproximaciones de la matriz $X$ que tiene los datos originales \[X=\begin{bmatrix} 35 & 45 & 40 & 55 & 25\\ 10 & 12 & 10 & 18 & 5\\ 4 & 5 & 5 & 6 & 3 \end{bmatrix}.\]