Álgebra Lineal: Vectores y Valores Propios de una Matriz
Como viste en la clase anterior, cuando tenemos un conjunto de datos con muchas variables, la matriz de covarianza es el objeto matemático que permite identificar cuáles variables están altamente correlacionadas.
Cuando dos variables están altamente correlacionadas, quiere decir que aportan básicamente la misma información del problema y eso podría indicar que solo necesitaríamos una sola de ellas. En la próxima clase veremos que esa reducción de variables se puede hacer con una técnica matemática denominada PCA (principal component analysis).
Esta técnica está basada en un concepto del álgebra de vectores y matrices, que llamamos el cálculo de los valores propios de una matriz, y en esta lectura profundizaremos sobre qué significa ese procedimiento.
Repaso de matrices
Las matrices en general son objetos matemáticos que tienen un cierto número de filas y columnas (estos números los denominamos dimensiones de la matriz).
Las matrices tienen una operación especial, que llamamos transponer, la cual consiste en ubicar cada fila como una columna en una nueva matriz, el resultado de una transposición se denomina matriz transpuesta y se ve así:
Así también, entre las matrices podemos definir reglas de suma y resta de forma similar a como hacemos con los números naturales o decimales, con una condición especial: ambas matrices deben tener las mismas dimensiones y cuando las dimensiones de una matriz son iguales entre ellas (# filas = # columnas) decimos que la matriz es cuadrada.
Con esto en mente resumimos lo anterior con un ejemplo de suma entre dos matrices cuadradas así:
Donde vemos que la suma de matrices se hace elemento a elemento para dar origen a otra matriz con las mismas dimensiones. Entonces para obtener el elemento de la primera fila y primera columna de la matriz suma, se suman los elementos correspondientes a cada matriz ubicados en la primera fila y primera columna:
1 + (-1) = 0
Ahora bien, las matrices también tienen una operación de multiplicación entre ellas que es más compleja de definir que la suma, sin embargo aquí vamos a desglosarla. Vamos a reemplazar los elementos numéricos de las matrices del ejemplo anterior por variables algebraicas, indicando que pueden ser cualquier número para así exponer el proceso con la mayor generalidad posible. De esta manera, vamos a definir el producto de dos matrices cuadradas de tal manera que el resultado sea otra matriz de las mismas dimensiones así:
Donde cada expresión algebraica tiene la forma de dos índices que denotan la fila y columna donde está posicionado el número, respectivamente. Y la manera de calcular cada elemento de la matriz resultante viene dado por una regla sencilla que ilustraremos con el siguiente ejemplo:
Que equivale a decir que el elemento de la fila 1 y columna 1 de la matriz resultado se calcula como la suma de los productos de los elementos de la primera fila de la primera matriz por los elementos de la primera columna de la segunda matriz
Veamos otro ejemplo para tenerlo más claro:
En este caso el elemento de la fila 1 y columna 2 de la matriz resultado se calcula como la suma de los productos de los elementos de la primera fila de la primera matriz por los elementos de la segunda columna de la segunda matriz.
En python el producto de matrices se calcula fácil usando la librería numpy:
np.matmul(A, B)
Donde, por ejemplo, una matriz:
Se escribe en python como:
A = np.array([[2,4],[-1,2]])
Esta definición se hizo para matrices de dos filas y dos columnas que denominamos matrices 2x2. Pero se aplica de la misma manera para matrices cuadradas de cualquier tamaño NxN. Por ahora solo nos interesará esta definición restringida para matrices cuadradas, pero en cualquier curso de álgebra de matrices podrás darte cuenta de que esta definición se puede hacer más general para matrices que no sean necesariamente cuadradas.
Ahora, así como cada número tiene su inverso, donde el inverso se define como aquel número tal que la multiplicación de ambos da 1:
En este caso ⅙ es el inverso de 6. Así también, las matrices también pueden tener su inversa (aunque no siempre), la matriz inversa A-1de una matriz dada A se define como aquella matriz donde (supongamos que A es 2x2):
El cálculo de matriz inversa se hace rápido usando NumPy nuevamente así:
A = np.array([[2,4],[-1,2]])Ainversa = np.linalg.inv(A)
Donde, el resultado de Ainversa en este caso particular sería:
array([[0.25,-0.5],[0.125,0.25]])
Para comprobar que esto está bien, puedes multiplicar ambas matrices para ver que da lo correcto:
np.matmul(A, Ainversa)
Repaso de Vectores
Como caso particular adicional a la definición anterior, consideremos el producto de una matriz cuadrada por un vector (aquí entendemos un vector como una matriz de una sola columna, también se le denomina por eso vectores columna en muchos libros de álgebra lineal) cuya longitud es igual al número de filas de la matriz así:
Donde definimos que el producto de una matriz por un vector resulta en otro vector de las mismas dimensiones (filas). Y la regla que consideramos para el caso de matrices cuadradas también aplica de manera que los elementos del vector resultante se obtendrían de multiplicar filas por columnas así:
También tenemos una operación entre vectores que denominamos el producto punto o producto interior. Normalmente al considerar esta definición se representa el primer vector como una sola fila y el segundo como una sola columna así (sigamos pensando con base en el ejemplo anterior de la matriz por el vector, pero ahora la matriz solo tiene una fila):
Y como ya te estás dando cuenta (teniendo en mente la misma definición de multiplicación de matrices) al solo haber una fila en la primera matriz y una columna en la segunda matriz, el resultado solo podrá tener un elemento y es por esto que el resultado de multiplicar dos vectores de esta manera es siempre un número:
Simplifiquemos la notación así:
Y esto nos recuerda la clásica regla de multiplicar vectores como x por x más y por y. Y si los vectores tienen más dimensiones, entonces .. más z por z y así. Recuerda que la notación simplificada es porque ahora tenemos que la primera componente es el eje X del vector y la segunda componente el eje Y del vector cuando lo dibujamos en un plano cartesiano.
Ahora, cuando pensamos en multiplicar un vector por el mismo, la misma definición aplica:
Y nos damos cuenta de que esto se relaciona con el Teorema de Pitágoras al ver que el producto de un vector por el mismo nos da el cuadrado de la longitud de la flecha que representa al vector en el plano cartesiano:
Así vemos que la longitud de un vector, también conocida como norma del vector se calcula como:
Listo, con esto terminamos un repaso básico de lo mínimo de matrices y vectores para lo que viene.
Vectores y Valores propios de una matriz
En álgebra lineal podemos tener ecuaciones donde la incógnita es un vector, supongamos la siguiente ecuación:
Aquí A es una matriz cuadrada NxN cuyos elementos conocemos perfectamente y X es un vector columna cuyas componentes desconocemos. Aquí recordemos que multiplicar un vector por un número es simplemente multiplicar cada componente del vector por dicho número.
Entonces lo que esta ecuación nos pregunta es:
¿Existen vectores X tales que al multiplicarlos por la matriz A eso es equivalente a simplemente multiplicarlos por un número?
Si tal vector existe y está asociado a un valor específico de Λ, entonces decimos que el vector X es un vector propio de la matriz A y Λ es su valor propio correspondiente.
Consideremos esto para el caso de una matriz 2 x 2, como la siguiente:
Esto se traduce en el sistema de ecuaciones (haciendo el producto matriz por vector):
Aquí entonces debemos encontrar las combinaciones de x e y, que satisfacen el sistema de ecuaciones. En general, hacer esto requiere otros conceptos más detallados del álgebra de matrices como el cálculo de determinantes y resolver ecuaciones polinomiales cuya explicación solo puede dejarse a un curso exclusivo de álgebra lineal. Pero no te preocupes, ya que podemos hacer este cálculo de manera rápida con python así:
import numpy as np
A = np.array([[1,2],[1,0]])values, vectors = np.linalg.eig(A)
Donde la matriz A contiene los elementos exactos de la matriz anterior y el comando np.linalg.eig(A) lo que hace es calcular directamente los valores y vectores propios, llamados values y vectors en el código, respectivamente.
Aquí es importante anotar que los vectores que entrega la función np.linalg.eig(A) son vectores columna de manera que los elementos de la primera columna de vectors corresponden con el primer valor de values y así sucesivamente. Entonces en nuestro lenguaje matemático usual, escribimos las dos soluciones como:
Puedes verificar que cada vector y su respectivo valor propio cumplen la ecuación original ejecutando cada parte así:
np.matmul(A, vectors.T[1])
Que te da como resultado:
array([0.70710678,-0.70710678])
Mientras que por otro lado calculando:
values[1]*vectors.T[1]
Resulta en lo mismo:
array([0.70710678,-0.70710678])
Donde hemos considerado el segundo vector y valor propio respectivamente tomando λ = -1 y el vector incógnita X igual a vectors.T[1].
Uno de los hechos más importantes de obtener los vectores y valores propios de una matriz es poder diagonalizarla. En general se define que una matriz A es diagonalizable si es posible escribirla como el producto de:
Donde D es una matriz diagonal (matriz donde todos los elementos por fuera de la diagonal son cero), un ejemplo de matriz diagonal sería:
Y aquí un resultado matemático bien conocido es que si una matriz es diagonalizable, la matriz D se construye colocando sus valores propios en la diagonal y la matriz P se construye colocando en cada columna el vector propio,siguiendo el mismo orden de valores propios correspondientes de la matriz D, así:
Lo importante de estudiar este procedimiento en nuestro curso, es que cuando aplicamos este cálculo de vectores y valores propios a una matriz de covarianza, los vectores representan las direcciones a lo largo de las cuales percibimos la mayor cantidad de varianza de ese conjunto de datos, donde la cantidad de varianza es proporcional al valor propio de cada vector propio.
Y es importante tener en cuenta que este procedimiento aplica para un conjunto de datos con N variables al que le corresponde una matriz de covarianza de tamaño NxN.
Ahora, el último factor importante de esta técnica es que para matrices de covarianza, sus vectores propios siempre son independientes unos de otros y esto es justamente lo que queremos en un proceso de reducción de variables, porque direcciones independientes implica que estos vectores representan nuevas variables cuya correlación es la más baja posible y así cada nueva variable es lo más representativa posible.
En álgebra lineal se dice más precisamente que los vectores propios de una matriz de covarianza son ortogonales y esto quiere decir que el producto interno de cualquier par de estos vectores siempre da como resultado cero:
Como consecuencia la matriz se denomina matriz ortogonal, y se sabe en matemáticas que la inversa de una matriz ortogonal es igual a la transpuesta, de manera que:
En la próxima clase veremos esto de forma más detallada y visual, te veo allí.
En esta clase, hay un error muy grave, sobre todo para quienes no conocen los vectores propios. Me refiero a que los vectores propios que entrega np.linalg.eig(A)
son vectores columnas, es decir v[:, 0], esta asociado al valor propio lambda_0, v[:, 1]
será el vector asociado a lambda_1 y así sucesivamente. Para este ejemplo la matriz construida a raíz de los vectores propios es:
esta asociado al valor propio -1
otro dato, esque los vectores que entrega está función están normalizados y se cumple que sqrt((0.89442719)^2 + (0.4472136)^2)=1sqrt((-0.70710678)^2 + (0.70710678)^2)=1
Esto pasa desapercibido en este ejemplo, pero es importante
Hola Faustino, gracisa por reportar este error, estas en lo cierto, ya mismo corregimos este texto.
Muchas gracias por tu reporte, Faustino 🙌
Ya quedó corregido ✅
Esto links te ayudaran a entender mejor la lectura
Magnitud, Norma o Módulo de un Vector
Creo que aquí me bajo de la escuela de Data Science, hasta luegooooooooooo!
jaja, que no decaiga!
!every day it gets a little more easier
Cada dia se vuelve un poco más fácil,
pero tenés que hacerlo todos los días,
esa es la parte dificil.
sí se puede, esto me detuvo tambien pero ahora no, sí se puede<3
Les dejo una explicación muy buena de vectores y valores propios de una matriz:
en youtube
Explicación simple y sencilla!
Hace 10 anios aprox tome el curso de algebra lineal en la universidad y lo que recuerdo es muy poco. Recuerdo que me gustaba mucho pero en mi carrera nunca le vi un uso. Hoy que estoy ampliando mis conocimientos me cruzo nuevamente con este bello tema con la sorpresa de que he olvidado un 70% de aquello que un dia sabia realizar facilmente.
Retomar apuntes y estudiar de nuevo que se viene lo bueno.
Para entender toda los conceptos detrás de algebra lineal, particularmente matrices y lo que representan sus operaciones y derivados (como los valores y vectores propios) les recomiendo ampliamente la lista de videos de 3blue1brown. Es de los mejores contenidos para entender las nociones principales en este tema, en parte gracias a que explica todo con representaciones gráficas y animaciones. ¡Espero les sea de utilidad!
Pienso que aquí hay un error:
"Si tal vector existe y está asociado a un valor específico de , entonces decimos que el vector X es un vector propio de la matriz A y x es su valor propio correspondiente."
Debería ser:
Si tal vector existe y está asociado a un valor específico de λ, entonces decimos que el vector X es un vector propio de la matriz A y λ es su valor propio correspondiente.
Ya fue corregido; gracias por tu advertencia
Acabo de hacer algunas pruebas, aprovechando que estoy dando matrices en la facultad. No es muy comodo calcular la inversa con numpy ya que da números horribles en lugar de fracciones. Probé pasar los números irracionales a fracciones con los métodos conocidos y no tuve buenos resultados tampoco.
También probé la multiplicacion de una matriz conocida con su inversa, y no me dio la identidad. No estoy muy conforme con el funcionamiento de numpy en estos casos.
Esto que mencionas es muy cierto. Busqué un poco y encontré este post en Stack Overflow.
Espero que te ayude :)
Igual es muy util, pero si quieres obtener los resultados que buscas podrias trabajar con Sympy que esta construido para estos casos
Si no se tienen fundamentos de algebra lineal, es recomendable parar aquí y ver cursos de algebra lineal para luego continuar.
Recomiendo ampliamente este canal (dejo en español, pero el original está en inglés), explica el tema de una manera intuitiva.
Está demasiado fuerte de digerir esta clase 🤯 de verdad, tardé como tres días solo en esta clase, y mira que no me considero mala en matemáticas pero siento que para ver el curso se necesitaba algo que yo no ví, igual ya la acabo de terminar de leer, hice mis apuntes, hice mis preguntas y respuestas y lo seguiré estudiando a lo largo de esta semana.
Coincido contigo, está bastante densa esta clase 🤯
Información resumida de esta clase
#EstudiantesDePlatzi
Cuando dos variables están altamente correlacionadas significa que están aportando la misma información y no tiene sentido usar las dos, lo mejor es solo usar una de ellas
La reducción de variables se hace con una técnica llamada PCA = Principal Component Analysis
Con las matrices podemos hacer una operación especial llamada transponer, lo que buscamos con está operación es reacomodar las filas en columnas
También podemos sumas matrices
Podemos multiplicar matrices y es importante practicarlo
En Python todo es mucho más fácil
Las matrices igual que los números pueden tener sus inversos
Podemos encontrar vectores y así mismo hacer operaciones entre ellos
El resultado de multiplicar 2 vectores es un solo número
Es importante tomar un curso sobre vectores y matrices
Valores y vectores propios
Permiten diagonalizar una matriz, así podemos compactar variables con alto gramo de correlación.
Enpython usamos el método np.linakg.eig(matriz) que nos devuelve los autovalores y autovectores (valores o vectores propios)
Nota:
El método eig() devuelve la matriz de autovectores ordenados en columnas
Me encantó esta clase, definitivamente es cine 🚬🚬🚬🚬🗿🗿🗿🗿
Esto me dejó un poco mareado, no sé si es porque no tengo muchos conceptos matemáticos claros. Aún así seguiré estudiando para aprender y entender estas clases.
En realidad no creo que sea tan complicado de entender.
"Si tal vector existe y está asociado a un valor específico de , [...]"
Falta algo ahi no? es "A" lo que falta?
El curso de Javier Santaolalla aquí mismo en Platzi es brutal para entender estos temas
Si alguien no entendió esto, en el siguiente video lo explica super fácil:
Análisis de Componentes Principales - YouTube