Les moindres carrés dans NumPy

Muhammad Maisam Abbas 4 juillet 2021
Les moindres carrés dans NumPy

Cet article présentera comment calculer AX = B avec la méthode des moindres carrés en Python.

NumPy des moindres carrés avec la fonction numpy.linalg.lstsq() en Python

L’équation AX = B est connue sous le nom d’équation matricielle linéaire. La fonction numpy.linalg.lstsq() peut être utilisée pour résoudre l’équation matricielle linéaire AX = B avec la méthode des moindres carrés en Python. En fait, c’est assez simple. Cette fonction prend les matrices et renvoie la solution des moindres carrés à l’équation matricielle linéaire sous la forme d’une autre matrice. Voir l’exemple de code suivant.

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])

Production:

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

Dans le code ci-dessus, nous avons calculé la solution de l’équation matricielle linéaire AX = B avec la fonction np.linalg.lstsq() en Python. Cette méthode devient un peu délicate lorsque nous commençons à ajouter des poids à nos matrices. Il existe deux méthodes principales que nous pouvons utiliser pour trouver la solution à ce genre de problème.

La première solution consiste à utiliser l’indexation de tableau avec le spécificateur np.newaxis pour ajouter une nouvelle dimension aux poids. Il est illustré dans l’exemple de codage ci-dessous.

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])

Production:

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

Dans le code ci-dessus, nous avons calculé la solution de l’équation matricielle linéaire AX = B avec les poids W en utilisant les fonctions np.newaxis et np.linalg.lstsq() en Python. Cette méthode fonctionne bien mais n’est pas très facile à comprendre et à lire.

La deuxième solution est un peu plus lisible et facile à comprendre. Il s’agit de transformer les poids en une matrice diagonale puis de l’utiliser. Il est démontré dans l’exemple de codage ci-dessous.

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])

Production:

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

Dans le code ci-dessus, nous avons calculé la solution de l’équation matricielle linéaire AX = B avec les poids W en convertissant les poids en une matrice diagonale, puis en utilisant la fonction 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