Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

2D
1H
6M
50S

Podemos y debemos pensar a las matrices como transformaciones lineales

2/18
Recursos
Transcripci贸n

Aportes 30

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Por si no entendieron . Lo que el profe quiso transmitir es que las matrices aplicadas a vectores se les puede ver como una transformacion lineal a ese vector . En este caso la transformacion es una rotacion en el sentido antihorario .

Explicaci贸n para los que se inclinan m谩s por el fundamento matem谩tico:
Sea AxB=C
El producto interno entre Anxm y Boxp d贸nde n,o son las filas y m,p son las columnas, para que AxB pueda existir c贸mo producto, se debe cumplir que n=o, y las dimensiones de la matriz resultante 漏 ser谩 siempre nxp, entonces, si vas probando a l谩piz y papel con dimensiones que a ti se te ocurran (pares dimensionales que cumplan con la condicion de producto interno) te vas a dar cuenta que todas las operaciones tranforman, o bien a la primera matriz o a la segunda, la 煤nica excepci贸n a esta regla, es que ambas matrices sean cuadradas, lo cu谩l nos deja la siguiente conclusi贸n
Las matrices son intr铆nsecamente transformaciones lineales en d贸nde el espacio es transformado con ciertas excepciones

B谩sicamente lo que hace el profe Sebastian es mostrarnos el resultado de la ecuaci贸n de un sistema de ecuaciones lineal con dos inc贸gnitas A*x = b como se ve en la imagen. Donde A es la matriz [[-1,3], [2,-2]], x es el vector columna [[2],[1]] (graficado en azul) y b es el vector columna [[1], [2]] obtenido como respuesta (graficado en naranja).

El tiene que aplicar la funci贸n flatten() porque la funci贸n que 茅l cre贸 graficarVectores() no acepta vectores columna o matrices 鈥渘ormales鈥.

Ser铆a genial ver a este profe en todos los cursos de machine learning.

Para los que estan haciendo la prectica en Windows debe ir %run 鈥渇unciones_auxiliares\graficarVectores.ipynb鈥

Notebook de la funci贸n para graficar:

# Recibir谩 los vectores, los colores y el nivel de trasparencia con el cual trabajaremos 

def graficarVectores(vecs, cols, alpha = 1):
    
    # Agregamos el eje vertical. Este se cruzar谩 en x = 0, el color ser谩 gris y el orden de z ser谩 0 
    plt.axvline(x = 0, color = "grey", zorder = 0)
    # Agregamos el eje horizontal. Este se cruzar谩 en y = 0, el color ser谩 gris y el orden de z ser谩 0 
    plt.axhline(y = 0, color = "grey", zorder = 0)
    
    # Ahora ara cada uno de los vectores en el par谩metro 
    for i in range(len(vecs)):
        # Tomaremos que la x es la concatenaci贸n de esos valores como 0 0 que es lo que estamos tomando como punto de origen 
        # Despu茅s de agregar el 0 0 le concatenamos el vector i 
        x = np.concatenate([[0,0], vecs[i]])
        # Vamos a graficar y agregamos todas las coordenadas
        plt.quiver([x[0]],
                   [x[1]],
                   [x[2]],
                   [x[3]],
                   # Los 谩ngulos estar谩n expresados en xy y la escuela de unidad ser谩 xy 
                   angles = 'xy', scale_units = 'xy',
                   # La escala con la que graficaremos ser谩 1 
                   scale = 1,
                   color = cols[i],
                   alpha = alpha
                  )

Para los que est谩n trabajando con Google Colab, el m茅todo que uso para trabajar con archivos en carpetas internas es el siguiente:

Importar drive en el espacio de trabajo y vincular con su cuenta de google:

from google.colab import drive
drive.mount('/content/drive')

Aqu铆 para vincular les pedir谩 un c贸digo de acceso que obtendr谩n del link que se les mostrar谩 al momento de ejecutar el c贸digo. Con esto ya est谩n listos para importar el archivo:

%run 'ubicacion archivo drive'

En mi caso para la funci贸n graficarVectores, lo encuentro as铆:

%run '/content/drive/My Drive/Mau/cursos/脕lgebra Lineal Aplicada para Machine Learning/funciones_auxiliares/graficarVectores.ipynb'

Y listo, ya pueden trabajar con su funci贸n.

Matrices

  • Podemos ver a las matrices como transformaciones lineales del espacio sobre el que se aplican, es decir deforman los puntos del espacio sobre el que se aplican, traslad谩ndolos, alarg谩ndolos o rot谩ndolos.

Nota:
.flatten() 鈫 convierte el vector o matriz en un vector fila

Una **transformaci贸n lineal ** es b谩sicamente una funci贸n, solo que toma como par谩metro de entrada a un vector y devuelve como salida a otro vector.

Se dice que una matriz representa una transformaci贸n lineal, porque si multiplicas a una matriz por un vector, obtienes como resultado otro vector.

Introducci贸n:


A las matrices las podemos pensar como transformaciones lineales que cuando las aplicamos a un espacio o a un vector generan una transformaci贸n. La transformaci贸n en el caso de un vector podr铆a ser cuando se estira, se achica o incluso cuando generamos una rotaci贸n.

para entender mejor todas las implicaciones de esto les recomiendo este video

tambi茅n este en espa帽ol solo hay que buscarlo

Por si no entendieron . Lo quiso transmitir es que las matrices aplicadas a vectores se les puede ver como una transformaci贸n lineal a ese vector.
En este caso la transformaci贸n es una rotaci贸n en el sentido antihorario .

Este conjunto de videos me ayudo a tomar ritmo de lo que el profesor explica!
https://www.youtube.com/watch?v=kjBOesZCoqc&ab_channel=3Blue1Brown

Recomiendo el canal de youtube 3blue1brown. Tiene videos muy buenos como este para el cambio de base (parte de lo que vimos en esta clase).

Hola, si quieren correr el c贸digo desde Google colaboratory鈥

Para ubicarse en la carpeta donde esta el archivo 鈥01 - Matrices y transformaciones lineales.ipynb鈥 qu en mi caso esta en 鈥楳y Drive/Platzi/Algebra Lineal aplicada para ML鈥, deben usar:

from google.colab import drive
drive.mount('/content/drive/')
%cd '/content/drive/My Drive/Platzi/Algebra Lineal aplicada para ML'

Y posteriormente suponiendo que la carpeta 鈥榝unciones_auxiliares鈥 este en la misma ubicaci贸n, utilizan:

%run "./funciones_auxiliares/graficarVectores.ipynb"

C贸digo visto en clase:

# Importamos las bibliotecas

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

# Definimos una matriz 

A = np.array([[-1,3], [2,-2]])
print(A)

# Generamos un vector

vector = np.array([[2],[1]])
print(vector)

# Miramos la ruta en donde estamos
import os

os.getcwd()

# # Importamos nuestra funci贸n para graficar. 
%run ".\\Funciones auxiliares\graficarVectores.ipynb"

# Mostramos que es lo que tenemos como vector 
print(vector)

# Esta funci贸n nos devolver谩 como una fila nuestro vector que estaba definido como una columna   
print(vector.flatten())

# Imprimimos la matriz normal 
print(A)

# Ahora vemos como la funci贸n flatten nos muestra toda la matriz como una sola fila
print(A.flatten())

# Graficamos vectores con nuestra funci贸n y le daremos como par谩metro el vector flatten.  
graficarVectores([vector.flatten()], cols = 'blue')

plt.xlim(-0.5, 3)
plt.ylim(-0.5, 2)


# Definimos nuestro vector transformado
vector_transformado = A.dot(vector)
print(vector_transformado)

# Graficamos vectores con nuestra funci贸n, de daremos como par谩metro el vector flatten y el vector transformado 

graficarVectores([vector.flatten(), vector_transformado.flatten()],
                cols = ['blue', 'orange'])
plt.xlim(-0.5, 2.5)
plt.ylim(-0.5, 2.5)

# Obtenemos el determ铆nate de una nuestra trasformaci贸n 
print(np.linalg.det(A))

# Obtenemos las normas de los vectores. 
print(np.linalg.norm(vector))
print(np.linalg.norm(vector_transformado))

Todo bien salvo que el espacio no esta girando para nada, se esta deformando de forma muy agresiva, imaginen que el vector unitario 鈥榠鈥 esta rotando en sentido antihorario como 120 grados duplicando su tama帽o (aprox) para transformarse en 鈥榰鈥, y el 鈥榡鈥 tambi茅n pero en sentido contrario casi triplicando su tama帽o para transformarse en 鈥榲鈥. Al final que [2 1] y [1 2] -medidos desde el plano cartesiano original- se parezcan (como que tengan misma norma) y parezca que uno rot贸 es pura coincidencia.
.






Hola, estoy usando Google Colab, tengo el mismo c贸digo del v铆deo, pero no puedo graficar nada, alguien me puede ayudar? Este es el archivo:

https://colab.research.google.com/drive/1WYz5wln5xVu7vxrvE6DO9C_q5wXTuAEi

La funci贸n graficarVectores que sale en el video, le falta una parte: color = cols[i]
def graficarVectores(vecs, cols, alpha = 1):

plt.axvline(x = 0, color = "grey", zorder = 0)
plt.axhline(y = 0, color = "grey", zorder = 0)

for i in range(len(vecs)):
    x = np.concatenate([[0,0], vecs[i]])
    plt.quiver([x[0]],
               [x[1]],
               [x[2]],
               [x[3]],
               angles = 'xy', scale_units = 'xy',
               scale = 1,
               color = cols[i],
               alpha = alpha
              )

As铆 es como quedar铆a al final para que se ejecute correctamente.

La operaci贸n de 鈥渇latten鈥 se utiliza en el contexto de machine learning y procesamiento de im谩genes principalmente para transformar matrices o tensores multidimensionales en un vector unidimensional. Esto se hace por varias razones:

  1. Reducci贸n de dimensionalidad: En el aprendizaje autom谩tico, a menudo se trabaja con datos en forma de matrices o tensores multidimensionales. Sin embargo, muchos algoritmos y modelos de machine learning, como las redes neuronales, requieren que los datos de entrada se presenten en forma de vectores unidimensionales. Flatten es una manera de hacer que los datos sean compatibles con estos modelos.

  2. Capa de entrada de una red neuronal: En las redes neuronales convolucionales (CNN), que son ampliamente utilizadas en el procesamiento de im谩genes, la capa de entrada se espera que sea un vector unidimensional. Flattening convierte la matriz de p铆xeles de una imagen en un vector, de modo que pueda ser procesada por las capas posteriores de la red neuronal.

  3. Simplicidad en el procesamiento: Trabajar con datos en forma de vectores suele ser m谩s sencillo y eficiente computacionalmente que trabajar con matrices o tensores. La operaci贸n de flatten simplifica el preprocesamiento de datos y el c谩lculo en muchas ocasiones.

Por ejemplo, considera una imagen en blanco y negro de 28x28 p铆xeles. Si se aplica flatten a esta imagen, se obtiene un vector de 784 elementos (28x28 = 784). Esto permite alimentar f谩cilmente esta imagen a una red neuronal que espera una entrada de 784 dimensiones.

En resumen, se utiliza la operaci贸n de flatten para convertir datos en formatos multidimensionales, como im谩genes o matrices, en vectores unidimensionales, con el fin de que puedan ser procesados por algoritmos y modelos de machine learning que requieren entradas en forma de vectores.

%run funciones_auxiliares\graficarVectores.ipynb

definicion para windows

para los que tiene linux el comando para llamar a la funcion es:
%run "鈥//funciones_auxiliares//graficarVectores.ipynb"
es con doble slash (//) y no backslash (\).

Otra forma de graficar

# Vector original
v = np.array([1, 2])

# Matriz de traslaci贸n
T = np.array([[1, 0, 3], [0, 1, 2]])

# Aplicar la transformaci贸n
v_transformed = T.dot(np.append(v, 1))

# Graficar los vectores
plt.plot([0, v[0]], [0, v[1]], label='Original')
plt.plot([0, v_transformed[0]], [0, v_transformed[1]], label='Transformado')
plt.legend()
plt.grid(True)
plt.axis('equal')
plt.show()

El mejor contenido en alg茅bra lineal y matem谩tica en s铆:
https://www.3blue1brown.com/topics/linear-algebra

El determinante sirve para tener un indicio de cual va a ser el efecto de la transformaci贸n. Si es negativo, el vector se rota y el coeficiente nos dice la magnitud en que cambiar谩.

Cree mi propia funcion para graficar vectores, con plotly, le coloque solo para 4 vectores, pero se puede modificar facilmente, para que reciba mas vectores.

import plotly.figure_factory as ff

def graficarVectoresplotly(vector1=[0, 0], vector2=[0, 0], vector3=[0, 0], vector4=[0, 0]):
    fig1 = ff.create_quiver([0], [0], [vector1[0]], [vector1[1]], scale=1, arrow_scale=0.1)
    fig2 = ff.create_quiver([0], [0], [vector2[0]], [vector2[1]], scale=1, arrow_scale=0.1)
    fig3 = ff.create_quiver([0], [0], [vector3[0]], [vector3[1]], scale=1, arrow_scale=0.1)
    fig4 = ff.create_quiver([0], [0], [vector4[0]], [vector4[1]], scale=1, arrow_scale=0.1)
    fig1.add_traces(data = fig2.data + fig3.data + fig4.data)
    fig1.update_layout(showlegend=False)
    fig1.show()

graficarVectoresplotly(vector, vector_transformado)

No se si sea porque yo trabajo en Ubuntu, pero me marcaba error al tratar de importar la funci贸n 鈥榞raficarVector鈥 como lo hace el profe, as铆 que yo lo pude hacer con la l铆nea:

%run 鈥./Funciones_auxiliares/my_functions.ipynb鈥

Suponeiendo que 鈥榤y_functions.ipynb鈥 esta en la carpeta 鈥楩unciones_auxiliares鈥

Yo utilice este c贸digo en mac para que tomara la carpeta de funciones, espero y le sirva.
%run 鈥溾//funciones_auxiliares/graficarVectores.ipynb鈥