Impacto de los Valores Singulares en Transformaciones Matriciales
Resumen
¿Cómo intervienen los valores singulares en una transformación?
Entender la importancia de los valores singulares es fundamental para cualquier analista de datos que busque profundizar en la descomposición de matrices y sus aplicaciones prácticas. Al descomponer una matriz, obtenemos tres matrices: U, D y V, donde D es diagonal y está compuesta por los valores singulares. Pero, ¿qué provoca realmente la aplicación de estos valores en una transformación? Descubrir esto nos permite analizar cómo los valores singulares influyen en las direcciones principales y la extensión en las que el transformador impacta al espacio de datos.
¿Cómo se implementa la descomposición de matrices en Python?
El trabajo comienza llamando a las bibliotecas necesarias y definiendo una matriz a descomponer. Utilizando numpy (alias np) y matplotlib, podemos no solo ejecutar operaciones matemáticas complejas, sino también visualizar el efecto de estas descomposiciones:
import numpy as np
from matplotlib import pyplot as plt
# Definimos la matriz a descomponerA = np.array([[3,7],[5,2]])# Calculamos la descomposición en valores singularesU, D, Vt = np.linalg.svd(A)
Con numpy.linalg.svd(), se realiza la descomposición SVD de la matriz, devolviendo las matrices U, D (en forma de un vector diagonal) y V transpuesta, permitiendo así el análisis de sus efectos individuales.
¿Cómo afectan los valores singulares a los vectores?
Una vez que tenemos los valores singulares, podemos ver su influencia directa sobre los vectores al aplicar las matrices resultantes de la descomposición. Por ejemplo, al definir un nuevo conjunto de vectores, observamos cómo se transforman al aplicar los valores singulares:
# Definición de vectoresvector_1 = np.array([1,0])vector_2 = np.array([0,1])# Aplicación de D a los vectoresd_vector_1 = D[0]* np.array([U[0,0], U[1,0]])d_vector_2 = D[1]* np.array([U[0,1], U[1,1]])
Los valores de la matriz diagonal D escalan los vectores direccionales transformándolos, ampliando o reduciendo su longitud según su magnitud.
¿Cómo visualizamos las transformaciones de los vectores?
Para comprender mejor estas transformaciones, utilizamos gráficos en matplotlib para visualizar tanto la matriz original como los vectores transformados por los valores singulares. Al trazar estos en un gráfico, podemos contrastar cómo cambian tanto el tamaño como la dirección de los vectores iniciales y transformados:
# Visualización del efecto de la descomposiciónplt.quiver(0,0, vector_1[0], vector_1[1], angles='xy', scale_units='xy', scale=1, color='r', label='Vector Original 1')plt.quiver(0,0, d_vector_1[0], d_vector_1[1], angles='xy', scale_units='xy', scale=1, color='b', label='Vector Transformado 1')plt.quiver(0,0, vector_2[0], vector_2[1], angles='xy', scale_units='xy', scale=1, color='g', label='Vector Original 2')plt.quiver(0,0, d_vector_2[0], d_vector_2[1], angles='xy', scale_units='xy', scale=1, color='y', label='Vector Transformado 2')plt.xlim(-8,8)plt.ylim(-8,8)plt.grid()plt.legend()plt.show()
Al visualizar estos cambios, se obtiene una imagen clara de cómo los valores singulares transforman los vectores, revelando sus efectos de escala y rotación que impactan desde distintas direcciones.
¿Por qué es importante el análisis de valores singulares?
El análisis de valores singulares es esencial para diversas aplicaciones, desde la compresión de imágenes hasta el reconocimiento de patrones. Este enfoque permite descomponer las transformaciones complejas en alteraciones manejables en escala y dirección. Además, comprender estos conceptos abre nuevas oportunidades para mejorar procesos analíticos y modelar datos con precisión superior.
En conclusión, el estudio y la aplicación práctica de valores singulares nos proporcionan una herramienta extraordinariamente potente para manipular y comprender nuestras matrices y sus transformaciones.
Por si lo ven mas claro de esta forma, en las clases pasadas se habia dicho que D escala (amplia o reduce) la transformación. En este sentido queremos ver como cambia D a U. ¿Y como vemos este efecto? Pues con un simple producto interno, que es lo que se hizo en clase. (En la imagen se demuestra que esos vectores u1 y v1 no son mas que las filas del producto interno de D·U)
" que es lo que crea el grafico.
pueden generar un espacio de linea con \n , solo se debe concatenar y ya en vez de poner print()
Por qué el profesor ocupa DU y no UD, siendo que la descomposición es UDV?
:thinking: Creo que debe ser UD, como tu lo dices, sin embargo acá no hay lio porque A es cuadrada,
Tampoco lo entiendo, si queria que 'D' transforme a algo para experimentar entonces debió haber sido al 'V' pues son a sus ejes a los que los valores singulares escalan.
no entiendo ,ayuden . alguien me explique por que llama u1 , v1 y lo grafica indicando que es D(u1) y D(u2) .
Tambien por que en la gráfica se muestra :
u1 =[3,5]
pero lo codea como
u1 =[D[0]*U[0,0],D[0]*U[0,1]
D es una un vector de dos numeros, (aunque realmente es una matriz diagonal) para los calculos python lo simplifica en un vector de dos numeros eje: [a,b]
U es una matriz de 2x2
cuando multiplico matriz por vector entonces se genera esa multiplicacion u1 = [D[0]*U[0,0], D[0]*U[0,1]
U1 es la aplicacion de la multiplicacion UxD a la primera fila de la matriz 2x2 llamada U
-V1 es lo mismo pero aplicado a la segunda fila
u_1 y v_1 son transformaciones del espacio, es como si cortaras una naranja a la mitad, ves como son cada mitad y lo que hay dentro, si unis esas dos mitades tenes la naranja de nuevo, eso es U,V,D. VD es simplemente una parte de UV*D, que es A xd
Hola a todos, al correr el código no me muestra el resultado de "graficar matriz" y "graficar vectores" en el mismo gráfico. A alguien más le pasa? Gracias!
Me pasa lo mismo ¿Lo pudiste solucionar?
Hola, es necesario borrar la instruccion plt.figure() de la funcion graficarVectores, esto hacia que tuvieramos dos instancias basicamente, y plt.text se aplica a la ultima instancia creada.
for i in range(len(vecs)):
x = np.concatenate([[0,0], vecs[i]])
# concatenate un vector inicia de origen hasta destino [0,0] [3,2]
plt.quiver([x[0]],
[x[1]],
[x[2]],
[x[3]],
angles = 'xy', scale_units = 'xy',
scale = 1,
color=cols[i],
alpha = alpha)
Eso resuelve el problema
por que el profesor puedo
r"$u_1$"
sabiendo que se puede
r"$u1$"
Alguna diferencia en poner el _ a no ponerlo ? ¿ o solo es una buena practica o algo similar ?
Si te fijas, el profesor no busca que el texto aparezca como u1, sino como u (sub) 1. El guión bajo y los símbolos "$" se utilizan para darle formato, estilo LaTeX. :)
Como se menciono en el comentario anterior el guión bajo ( _ ) se utiliza en LaTeX para denotar el subindice, sin embargo, como algo extra, si quieres escribir un solo caracter como subindice basta con escribir $u_1$, en cambio si quieres escribir dos o más caracteres se usa las llaves: $u_{12}$
Con todo respeto, esta clase estuvo terrible. El ejemplo muestra con mucho ruido lo que se pretendía, que era ver como la matriz de valores singulares cambiaba la magnitud de los vectores singulares. Para peor, el profesor trata de justificar con las manos que es todo esperable, mientras que los vectores u1 y v1 del gráfico no son los mismos definidos en el código, sino los vectores que componen la matriz A… En resumen, un desorden.
Sé como los valores singulares escalan los ejes y tampoco vi reflejado eso en ningun momento (en la clase anterior sí se noto), entonces no entiendo por qué desde el inicio decidió experimentar como D transforma a U (D@U) y no U@'V' o por lo menos como D influye en U@D. Sabes si esa decisión es de algún modo justificada? Es que no lo veo.
El profesor se confundió en el texto que le puso a los vectores. Eso generó mas dudas.
La explicacion se puedo hacer mucho mas sencilla. En lugar de u1 y v1 poner defrente np.diag(D).dot(U)
U → vectores izquierdos singulares
D → matriz diagonal de valores singulares
V → vectores derechos singulares
La matriz D está compuesta por la diagonal con lo valores singulares lambdas.
Se puede hacer la transformación también a v? y con que fin se hacen estas transformaciones a las descomposiciones ?
¡Hola!
En algebra lineal es un problema importante el de factorizar matrices, esto tiene muchas aplicaciones, por ejemplo en el calculo de determinantes, la factorización LU es útil por que en esta forma el determinante de la matriz original es simplemente el producto de los elementos de la diagonal de L por el producto de los elementos de la diagonal de U.
Otra aplicación importante es para resolver sistemas de ecuaciones lineales ¿Recuerdas el método de eliminación Gaussiana? Bueno pues este método dice que para resolver un sistema de ecuaciones lineales basta con convertir la matriz orginial a una forma triangular superior ó up (De allí la U)
Los valores singulares son una parte fundamental de la descomposición en valores singulares (SVD). Cada valor singular representa la importancia o contribución de su correspondiente autovector en la transformación lineal de la matriz original.
Magnitud
Energía
Importancia relativa
Reducción de dimensionalidad
Los valores singulares proporcionan información importante sobre una matriz y se utilizan en diversas aplicaciones en álgebra lineal y análisis de datos. Cada valor singular nos da una medida de la importancia relativa de cada componente de la matriz. Los valores singulares también se utilizan en la descomposición en valores singulares (SVD) de una matriz.
# Generar una matriz de ejemplo
A= np.array([[1,2],[3,4]])# Calcular la descomposición SVDU,S,Vt= np.linalg.svd(A)# Imprimir los valores singulares
print("Valores singulares:",S)# Graficar los valores singulares
plt.plot(S,'o-')plt.xlabel('Índice')plt.ylabel('Valor singular')plt.title('Valores Singulares')plt.show()
Por poquito y la cabeza me explota xD
Después de 2 hrs le entendí, le agregué un vectorcito nuevo (el vector verde).
Los valores singulares afectan la forma final del círculo al modificar su tamaño y orientación en el espacio. En la descomposición de matrices, cada valor singular amplifica o contrae el vector original, lo que resulta en una transformación elíptica del círculo unitario. Así, los valores singulares determinan cuánto se estira o se comprime cada eje en la transformación, generando formas elípticas en vez de circulares. Esto se evidencia en la visualización de cómo los vectores son transformados según sus componentes.
Los valores singulares tienen un impacto fundamental en las transformaciones matriciales, ya que determinan cómo se deforma el espacio cuando se aplica una matriz a un conjunto de vectores.
🧮 ¿Qué son los valores singulares?
Dada una matriz A∈Rm×nA \in \mathbb{R}^{m \times n}, su descomposición en valores singulares (SVD) es:
A=UΣVTA = U \Sigma V^T
Σ\Sigma es una matriz diagonal con los valores singulares σ1≥σ2≥⋯≥σr>0\sigma_1 \geq \sigma_2 \geq \dots \geq \sigma_r > 0
Estos valores indican cuánto se estira o comprime el espacio en direcciones específicas.
🎯 ¿Cómo impactan en una transformación?
1. Estiramiento/Escalamiento
Cada valor singular σi\sigma_i indica cuánto se alarga o achica el vector en la dirección del autovector correspondiente.
Si σ1=3\sigma_1 = 3: la matriz triplica la magnitud en esa dirección.
Si σ2=0.5\sigma_2 = 0.5: la matriz comprime a la mitad en esa otra dirección.
2. Rango de la matriz
El número de valores singulares no nulos indica el rango de la matriz, es decir, cuántas dimensiones del espacio están preservadas.
Una gran diferencia entre el mayor y el menor valor singular indica una matriz mal condicionada (potencialmente inestable para inversión o resolución de sistemas lineales).
🔵 Ejemplo visual con el círculo unitario
La transformación de un círculo unitario por una matriz AA lo convierte en una elipse:
Ejes de la elipse: dados por los vectores propios de ATAA^TA (columnas de VV)
Longitud de los ejes: igual a los valores singulares σi\sigma_i
Orientación: definida por las matrices UU y VV
🧠 Aplicaciones:
AplicaciónImpacto de los valores singularesCompresión de imágenesUsar solo los kk mayores σi\sigma_iReducción de dimensionalidadPCA se basa en valores singularesDetección de redundanciaσi≈0\sigma_i \approx 0 indica dependencia linealEstabilidad numéricaMatrices con valores singulares muy pequeños pueden generar errores de redondeo
🐍 En Python (ejemplo rápido)
import numpy as np
A = np.array([[3, 1], [1, 3]])
U, S, VT = np.linalg.svd(A)
print("Valores singulares:", S)
Esto te dice cuánto deforma tu matriz el espacio y en qué direcciones principales.
Imagina una matriz $ A $ que transforma un círculo unitario en una elipse:
- Los valores singulares son las longitudes de los semiejes de la elipse.
- Los vectores singulares derechos ($ V $) indican las direcciones originales del círculo que se transforman en los semiejes.
- Los vectores singulares izquierdos ($ U $) indican las direcciones finales de los semiejes en el espacio transformado.