Tarea Parte 1 (Teoría)

¿Por qué una matriz equivale a una transformación lineal entre espacios vectoriales?

Sea T: V ->W una transformación lineal, y sean las bases de V y W las formadas por los vectores canónicos, existen escalares únicos aij ( i entre [1,m] , j entre [1,n]) pertenecientes a un campo tales que T(xi) = sigma (aij*yi)

Podemos expresar a T mediante una matriz A de mxn con elementos aij, donde la j-ésima columna de A es T(xj)

¿Cuál es el efecto de transformación lineal de una matriz diagonal y el de una matriz ortogonal?

La matriz diagonal expande o contrae los ejes, mientras que la matriz ortogonal rota los ejes

¿Qué es la descomposición en valores singulares de una matriz?

Es expresar una matriz de forma equivalente como el producto de tres matrices USigmaVt donde donde U y V son matrices ortogonales y Sigma es una matriz cuasi diagonal, a los valores de la diagonal de sigma se le llaman valores singulares y cumplen con aparecen de forma descendente, es decir, el primer valor siggular de la diagonal es el mayor de todos, y así sucesivamente

¿Qué es diagonalizar una matriz y que representan los eigenvectores?

Diagonalizar equivale a encontrar una base de eigenvectores

¿Intuitivamente qué son los eigenvectores?

Los eigenvectores son un sistema de las nuevas coordenadas

¿Cómo interpretas la descomposición en valores singulares como una composición de tres tipos de transformaciones lineales simples?

Se rotan los ejes -> se expanden o contraen los ejes ->nuevamente se rotan

¿Qué relación hay entre la descomposición en valores singulares y la diagonalización?

  • La diagonalización es exclusiva para matrices cuadradas
  • La descomposición en valores singulares (svd) siempre existe en número reales, la diagonaliazación siempre existe en número complejos
  • La svd permite solucionar sistemas de ecuaciones incluso cuando no existe la inversa de una matriz

¿Cómo se usa la descomposición en valores singulares para dar una aproximación de rango menor a una matriz?

Por medio de los valores de la diagonal distintos de cero de la matriz cuasi diagonal

Describe el método de minimización por descenso gradiente

Menciona 4 ejemplo de problemas de optimización (dos con restricciones y dos sin restricciones) que te parezcan interesantes como Científico de Datos

Tarea Parte 2, Ejercicio 1


In [5]:
#######################################################################
### Parte 2

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image

In [6]:
# Importar imagen

imagen = Image.open('C:/Users/Data Mining/Documents/ITAM/Propedeutico/Alumnos/PropedeuticoDataScience2017/Alumnos/Leonardo_Marin/black_and_white.jpg')
imagen_gris = imagen.convert('LA')   ## Convertir a escala de grises

In [7]:
## Convertir la imagen a una matriz

imagen_mat = np.array(list(imagen_gris.getdata(band=0)), float)
imagen_mat.shape = (imagen_gris.size[1], imagen_gris.size[0])
imagen_mat = np.matrix(imagen_mat)

plt.imshow(imagen_mat, cmap='gray')


Out[7]:
<matplotlib.image.AxesImage at 0x27c77128320>

In [8]:
imagen_gris


Out[8]:

In [9]:
## Desompoición singular

U, sigma, V = np.linalg.svd(imagen_mat)

Probar la visualización con los primeris n vectores


In [12]:
# n= 1
j = 1
matriz_equivalente = np.matrix(U[:, :j]) * np.diag(sigma[:j]) * np.matrix(V[:j, :])
plt.imshow(matriz_equivalente, cmap='gray')


Out[12]:
<matplotlib.image.AxesImage at 0x27c77143198>

In [13]:
# n = 5
j = 5
matriz_equivalente = np.matrix(U[:, :j]) * np.diag(sigma[:j]) * np.matrix(V[:j, :])
plt.imshow(matriz_equivalente, cmap='gray')


Out[13]:
<matplotlib.image.AxesImage at 0x27c771439e8>

In [14]:
# n = 25
j = 25
matriz_equivalente = np.matrix(U[:, :j]) * np.diag(sigma[:j]) * np.matrix(V[:j, :])
plt.imshow(matriz_equivalente, cmap='gray')


Out[14]:
<matplotlib.image.AxesImage at 0x27c77143f98>

In [15]:
# n = 50
j = 50
matriz_equivalente = np.matrix(U[:, :j]) * np.diag(sigma[:j]) * np.matrix(V[:j, :])
plt.imshow(matriz_equivalente, cmap='gray')


Out[15]:
<matplotlib.image.AxesImage at 0x27c7714f668>

Podemos ver como se puede reconstruir la imagen sin utilizar toda la información de la matriz original,

Ejercicio 2


In [17]:
A = np.array([[1,0],[1,2]])
A


Out[17]:
array([[1, 0],
       [1, 2]])

In [18]:
def pseudoinversa(A):
    U,s,V=np.linalg.svd(A)
    peudoinversa = V*(np.diag(1/s))*U.T
    return peudoinversa

In [19]:
B = pseudoinversa(A)
B


Out[19]:
array([[ 0.0527864,  0.       ],
       [ 0.       ,  0.1381966]])

In [ ]: