Empezaré este post con una introducción sencilla a mi misma “La Natalia del pasado odiaría (pero con un odio mortal) en lo que se metió la Natalia del ahora” 

Ah, matemáticas. No puedes evitarlas para siempre. Puedes intentarlo, y luego esforzarse más y fingir que no las necesitas pero tarde o temprano llegará la hora de ver álgebra lineal 

If Data Science was Batman, Linear Algebra would be Robin

Pero ¿Porqué álgebra lineal? 

Si entendemos álgebra lineal podremos desarrollar una mejor intuición para el aprendizaje automático y algoritmos. Además, también seremos capaces de desarrollar algoritmos desde cero y hacer variaciones de ellos. (Ya se, suena complicado) 

¿Porque debería quedarme leyendo este post?

Este post no cubrirá cada mínimo detalle sobre el tema, ni mencionara mil ejemplos o pruebas, para eso existen ciertos cursos y libros (que recomiendo al final de cada post) mi objetivo es poder compartir lo que voy a aprendiendo y necesitando para cada clase de data de un forma fácil del que hasta la Natalia del pasado pudiera entender. No sé en cuantos post se divida el tema (espero no muchos) y lo iré escribiendo con calma, aquí les pongo fecha de cuando comencé (3/10/2019) y veremos cuándo será publicado el primero. 

Algo que visualice antes de empezar a escribir es que es más sencillo para mi como para quien lee, tener una estructura definida del desarrollo del tema así que así van está series de post

  • Explicación teórica
  • Ejemplo (cálculos manuales y gráficos)
  • Implementación en Python (con Numpy)

 Lo primero de lo que vamos a empezar a hablar son los vectores:

  1. Que es un vector
  2. Suma de vectores
  3. Multiplicación escalar de vectores
  4. Producto punto (multiplicación de vectores)
  5. Norma vectorial
  6. Vector unitario
  7. Ángulos entre vectores
  8. Producto cruz o producto vectorial 

¿Qué es un vector? 

Lo primero que debemos saber es que un vector tiene tanto magnitud como dirección. Utilizamos vectores para describir, por ejemplo, la velocidad de objetos en movimiento. 

Por dirección, me refiero a dónde en el espacio apunta la “flecha”, y la magnitud te dice qué tan lejos debes ir en esa dirección. Si solo tienes magnitud, pero no dirección, entonces estás hablando de escalares. Una vez que le das al escalar alguna dirección, se convierte en un vector.

Un vector se representa con una letra minúscula y una flecha arriba, apuntando a la derecha:

2. Suma de vectores: 

Para sumar los vectores (x₁,y₁) y (x₂,y₂), sumamos los componentes correspondientes de cada vector: (x₁+x₂,y₁+y₂)

a = np.array([6, -2])
b = np.array([-4, 4])
print(a + b)

3. Multiplicar un vector por un escalar

Si solo tienes magnitud, pero no dirección, entonces estás hablando de escalares

¿Recuerdas que lo dije cuando estaba definiendo vectores? Pues aquí vamos a multiplicar vectores con escalares

Primero la formula:

Ahora el ejemplo: 

Como podemos observar en la multiplicación la dirección se mantiene y cambia la magnitud. Lo que estamos haciendo es escalar al vector 3 veces 

Pero ¿Sucede lo mismo si el número es negativo? Observemos con un ejemplo

En este caso observamos que cambia la dirección pero no la magnitud ¡Una locura!

a = np.array([2, 1])
print(3 * a)

4. Producto punto o escalar: 

Esto suena raro, pero no es más que la multiplicación de vectores cuyo resultado es un escalar. Para calcular el producto escalar de dos vectores, primero debemos multiplicar los elementos correspondientes y luego sumar los términos del producto.

En la siguiente fórmula lo vemos mucho más fácil 

a = np.array([3, 2])
b = np.array([2, 2])
print(a.dot(b))

5. Norma vectorial 

La norma es solo otro término para la magnitud de un vector y se denota con dos lineas dobles (||) en cada lado. Se define como una raíz cuadrada de la suma de cuadrados para cada componente de un vector

Para ser un poco más organizados y hacer más entendible la fórmula, voy a dejar los pasos para desarrollar los ejercicios: 

  • Elevar al cuadrado cada componente
  • Suma todos los cuadrados
  • Toma la raíz cuadrada

Trabajemos ahora con la formula:

Muy simple, ¿cierto?

Vamos a hacer un ejercicio en mi ipad para que quede muy muy claro

Ahora en python:

a = np.array([3, 2, 6])
print(np.linalg.norm(a))

6. Vector unitario:

Los vectores unitarios son aquellos cuya magnitud es exactamente 1 unidad. Son muy útiles por diversas razones. Específicamente, los vectores unitarios [0,1] y [1,0] juntos pueden formar cualquier otro vector.

Un vector unitario se denota con mayor frecuencia con un símbolo de sombrero (^) y se computa (el sinónimo que mejor encontré para no poner se calcula, calculando) calculando la norma y luego dividiendo cada componente del vector con la norma.

Suena complejo, pero vamos a hacer un ejercicio para poder ver que es más complejo de lo que imaginamos (risa maligna) 

¿Vieron? No es tan complicado.

Ahora en python, después de buscar por más de 2 horas en Google y no encontrar una forma directa de calcular un vector unitario. Me encontré con un post donde la persona que lo escribía tampoco sabia el comando exacto, pero daba una solución bastante razonable. Gracias Dario. 

def unit_vector(a):
return a/ np.linalg.norm(a)u = np.array([3, 6, 4])
print(unit_vector(a))

7. Ángulos entre vectores

Este fue un tema que me mato de primera (tengo que confesarlo) 

Leí varia documentación y sonaba muy complejo, así que quiero empezar contando como el ángulo entre vectores puede ser muy funcional en data y PNL (creo que cuando vemos la funcionalidad de algo, podemos hacer ese clic positivo en la mente para aprenderlo

El cálculo del ángulo entre vectores tiene muchas aplicaciones prácticas. Es ampliamente utilizado en PNL (procesamiento del lenguaje natural) cuando se buscan cadenas que son muy similares. Por ejemplo, cuando se usa TF-IDF en algunos datos textuales, cada entrada (intente pensar en la entrada como un texto de correo electrónico individual) se convierte en un vector.
Al hacerlo, estará seguro de que todos los vectores son de las mismas dimensiones, y si la entrada contiene una determinada palabra en una determinada posición, el valor en el componente correspondiente del vector será 1 y 0 en caso contrario. Si luego calcula el ángulo entre vectores, aquellos en los que el ángulo en el más pequeño será más similar (en el ejemplo del correo electrónico piense que dos correos electrónicos individuales están en el mismo tema).

Ahora vamos con la fórmula:

*Hola Coseno, no te veía desde el colegio*

Ahora hagamos un ejercicio para que todo que muy muy claro. 

Al igual que con los vectores unitarios, Numpy no tiene una función incorporada para el cálculo del ángulo. Así que busqué algunas alternativas
El único “truco” aquí es convertir radianes a grados porque Numpy devolverá el resultado en radianes de forma predeterminada. 

def angle_between(v1, v2):
dot_pr = v1.dot(v2)
norms = np.linalg.norm(v1) * np.linalg.norm(v2)

return np.rad2deg(np.arccos(dot_pr / norms))
a = np.array([1, 4, 5])
b = np.array([2, 1, 5])
print(angle_between(a, b))

8. Producto cruz o producto vectorial:

Se llama producto vectorial o producto cruz de vectores v y w el vector . Cuya longitud equivale al área del paralelogramo constuído en vectores v y w. Y el vector resultante es perpendicular al plano de estos vectores. (suena muy complicado)

En Numpy:

a = np.array([1,0,0]) b = np.array([0,1,0]) print np.cross(a,b)

Y acabamos vectores, espero que este post te ayude un montón, que te ayude a recordar conceptos y a visualizar resultados. Recuerda que no debes recordar fórmulas o desarrollo de estas (Numpy lo hace todo por ti) y si no recuerdas los comandos puedes venir corriendo a este post. Lo importante aquí es tener en mente que vectores existen, como usar cada uno, como se veria gráficamente, como obtener un resultado y lo más importante como usarlo para resolver posibles problemas.

Aquí termina este post y les dejo la maravilla de curso de khan academy quien me ayudó a resolver dudas y aprender todo de forma sencilla para poder explicarlo así mismo en este blog. 

Aquí les dejo el link. 

¡Feliz código!

Lo logramos, aprendimos de vectores. Como les digo siempre: celebren los pequeños logros. 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *