Mínimos cuadrados en NumPy

Muhammad Maisam Abbas 20 noviembre 2021
Mínimos cuadrados en NumPy

Este artículo presentará cómo calcular AX = B con el método de mínimos cuadrados en Python.

Mínimos cuadrados NumPy con función numpy.linalg.lstsq() en Python

La ecuación AX = B se conoce como ecuación de array lineal. La función numpy.linalg.lstsq() se puede utilizar para resolver la ecuación matricial lineal AX = B con el método de mínimos cuadrados en Python. De hecho, es bastante sencillo. Esta función toma las matrices y devuelve la solución de mínimos cuadrados a la ecuación del array lineal en forma de otra matriz. Vea el siguiente ejemplo de código.

import numpy as np

A = [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0]]
B = [1, 1, 1, 1, 1]

X = np.linalg.lstsq(A, B, rcond=-1)
print(X[0])

Producción :

[5.00000000e-01 5.00000000e-01 1.09109979e-16 1.64621130e-16]

En el código anterior, calculamos la solución de la ecuación de array lineal AX = B con la función np.linalg.lstsq() en Python. Este método se vuelve un poco complicado cuando comenzamos a agregar pesos a nuestras matrices. Hay dos métodos principales que podemos utilizar para encontrar la solución a este tipo de problema.

La primera solución implica usar la indexación de matrices con el especificador np.newaxis para agregar una nueva dimensión a los pesos. Se ilustra en el siguiente ejemplo de codificación.

import numpy as np

A = np.array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0]])
B = np.array([1, 1, 1, 1, 1])

W = np.array([1, 2, 3, 4, 5])

Aw = A * np.sqrt(W[:, np.newaxis])
Bw = B * np.sqrt(W)

X = np.linalg.lstsq(Aw, Bw, rcond=-1)
print(X[0])

Producción :

[ 5.00000000e-01  5.00000000e-01 -4.40221936e-17  1.14889576e-17]

En el código anterior, calculamos la solución de la ecuación de array lineal AX = B junto con los pesos W usando la función np.newaxis y np.linalg.lstsq() en Python. Este método funciona bien, pero no es muy fácil de entender y leer.

La segunda solución es un poco más legible y fácil de entender. Implica transformar los pesos en un array diagonal y luego usarla. Se demuestra en el siguiente ejemplo de codificación.

import numpy as np

A = [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0]]
B = [1, 1, 1, 1, 1]
W = [1, 2, 3, 4, 5]

W = np.sqrt(np.diag(W))

Aw = np.dot(W, A)
Bw = np.dot(B, W)

X = np.linalg.lstsq(Aw, Bw, rcond=-1)
print(X[0])

Producción :

[ 5.00000000e-01  5.00000000e-01 -4.40221936e-17  1.14889576e-17]

En el código anterior, calculamos la solución de la ecuación de array lineal AX = B junto con los pesos W convirtiendo los pesos en un array diagonal y luego usando la función np.linalg.lstsq().

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn