El álgebra lineal (linear algebra) es la rama de la matemática sobre ecuaciones lineales que utiliza espacio vectorial y matrices.
Las dos entidades matemáticas primarias que son de interés en álgebra lineal son el vector y la matriz. Son ejemplos de una entidad más general conocida como tensor. Los tensores poseen un orden (o rango), que determina el número de dimensiones en una matriz requerida para representarlo.
Vectores: Conjunto de elementos numéricos de un tamaño concreto y unidimensionales. Por ejemplo:
numpy
es la librería por excelencia para trabajar con estas estructuras de datos. Algunos ejemplos para generar vectores aleatorios son:
import numpy as np
# Vector de 10 unos
a1 = np.ones(10)
print(a1)
# Vector de 10 números que tienen la misma distancia entre sí, empezando por el 3 y acabando por el 15
a2 = np.linspace(3, 15, 10)
print(a2)
# Vector de 10 números aleatorios entre [0, 1)
a3 = np.random.rand(10)
print(a3)
# Vector de 10 números aleatorios entre [1, 10)
a4 = np.random.randint(1, 10, size=10)
print(a4)
Matriz: Conjunto de vectores que conforman una estructura rectangular con filas y columnas. Por ejemplo:
Con numpy
también se puede trabajar para generar matrices. Algunos ejemplos para generarlas son:
# Matriz identidad de 5x5 (5 filas, 5 columnas)
m1 = np.identity(5)
print(m1)
# Matriz de 3x2 (3 filas, 2 columnas) con números aleatorios entre [0, 1)
m2 = np.random.rand(3, 2)
print(m2)
# Matriz de 7x5 (7 filas, 5 columnas) con números aleatorios entre 5 y 19
m3 = np.random.randint(5, 19, size=(7, 5))
print(m3)
Tensores: Los tensores son una matriz de números o funciones que se transmutan con ciertas reglas cuando cambian las coordenadas. Normalmente, el trabajo con tensores es más avanzado y requiere de librerías más orientadas al Machine Learning y a los modelos como TensorFlow
o PyTorch
.
El Machine Learning es el punto de contacto para Ciencias Informáticas y Estadística.
Dado que los escalares existen para representar valores, ¿por qué son necesarios los vectores? Uno de los principales casos de uso de los vectores es representar cantidades físicas que tienen tanto una magnitud como una dirección. Los escalares solo son capaces de representar magnitudes.
Por ejemplo, los escalares y los vectores marcan su diferencia entre la rapidez de un automóvil y su velocidad. La velocidad contiene no solo su rapidez, sino que también su dirección de viaje.
En Machine Learning los vectores a menudo representan vectores de características, con sus componentes individuales especificando qué tan importante es una característica en particular. Tales características podrían incluir la importancia relativa de las palabras en un documento de texto, la intensidad de un conjunto de píxeles en una imagen bidimensional o valores de precios históricos para una muestra representativa de instrumentos financieros.
Operaciones Escalares
Las operaciones escalares involucran un vector y un número.
# Sumar un escalar y un vector. En el siguiente ejemplo, a cada elemento del vector se le sumará 2
a1 = np.array([1, 2, 3, 4])
print(a1 + 2)
# Restar un escalar y un vector. En el siguiente ejemplo, a cada elemento del vector se le restará 1
print(a1 - 1)
# Multiplicar un escalar y un vector. En el siguiente ejemplo, a cada elemento del vector se le multiplicará por 10
print(a1 * 10)
# Dividir un escalar y un vector. En el siguiente ejemplo, a cada elemento del vector se le dividirá entre 5
print(a1 / 5)
Multiplicación de vectores
Hay dos tipos de multiplicación vectorial: producto punto y producto de Hadamard.
El producto punto de dos vectores es un escalar. El producto punto de vectores y matrices (multiplicación de matrices) es una de las operaciones más importantes en el aprendizaje profundo.
a1 = np.array([1, 2, 3, 4])
a2 = np.linspace(0, 20, 4)
a1.dot(a2)
El producto de Hadamard es una multiplicación por elementos y genera un vector.
a1 = np.array([1, 2, 3, 4])
a2 = np.array([10, 10, 10, 10])
a1 * a2
Una matriz (matrix) es una cuadrícula rectangular de números o elementos (como una hoja de cálculo de Excel) con reglas especiales para sumar, restar y multiplicar.
Dimensiones de la matriz: Describimos las dimensiones de una matriz en términos de filas por columnas.
Operaciones escalares de matrices
Las operaciones escalares con matrices funcionan de la misma manera que con los vectores.
Simplemente, aplica el escalar a cada elemento de la matriz — suma, resta, divide, multiplica, etc.
# Sumar un escalar y una matriz (en este caso de 2 filas y 4 columnas). En el siguiente ejemplo, a cada elemento de la matriz se le sumará 10
m1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(m1 + 10)
# Restar un escalar y una matriz. En el siguiente ejemplo, a cada elemento de la matriz se le restará 5
print(m1 - 5)
# Multiplicar un escalar y una matriz. En el siguiente ejemplo, a cada elemento de la matriz se le multiplicará por 3
print(m1 * 3)
# Dividir un escalar y una matriz. En el siguiente ejemplo, a cada elemento de la matriz se le dividirá entre 2
print(m1 / 2)
Operaciones con matrices
Para sumar, restar o dividir dos matrices deben tener las mismas dimensiones. Combinamos los valores correspondientes de forma elemental para producir una nueva matriz.
m1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
m2 = np.array([[2, 4, 6, 8], [-1, -2, -3, -4]])
# Sumar dos matrices. Deben tener la misma dimensión (mismo número de filas y de columnas). Se suman los elementos en la misma posición de la primera matriz y de la segunda
print(m1 + m2)
# Restar dos matrices. Deben tener la misma dimensión (mismo número de filas y de columnas). Se restan los elementos en la misma posición de la primera matriz y de la segunda
print(m1 - m2)
# Dividir dos matrices. Deben tener la misma dimensión (mismo número de filas y de columnas). Se dividen los elementos en la misma posición de la primera matriz y de la segunda
print(m1 / m2)
Multiplicación de matrices
Hay dos tipos de multiplicación de matrices: producto punto y producto de Hadamard.
El producto punto de dos matrices es una matriz con el número de filas de la primera y el número de columnas de la segunda. Tiene que haber igualdad entre el número de columnas de la primera y el número de filas de la segunda. Esto es, si la matriz "A" tiene unas dimensiones de x (5 filas y 3 columnas) y la matriz "B" unas dimensiones de x (3 filas y 2 columnas), la matriz resultante tras multiplicarlas tendrá unas dimensiones de x (y se pueden multiplicar porque la primera tiene 3 columnas y la segunda 3 filas).
En el producto punto de matrices, el elemento de la matriz producto se obtiene multiplicando cada elemento de la fila de la matriz A por cada elemento de la columna de la matriz B y sumándolos.
m1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
m2 = np.array([[2, 4], [6, 8], [-1, -2], [-3, -4]])
m1.dot(m2)
El producto de Hadamard de matrices es una operación elemental. Los valores que corresponden posicionalmente se multiplican para producir una nueva matriz.
m1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
m2 = np.array([[2, 4, 6, 8], [-1, -2, -3, -4]])
m1 * m2
Transposición de matriz
La transposición de matriz proporciona una forma de "rotar" una de las matrices para que la operación cumpla con los requisitos de multiplicación y pueda continuar.
Hay dos pasos para transponer una matriz:
m1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
m1.T
m1.transpose()
El álgebra lineal tiene un impacto directo sobre todos los procesos que involucren el tratamiento de datos: