NumPy의 최소 제곱
이 기사에서는 Python에서 최소 제곱 법으로 AX = B를 계산하는 방법을 소개합니다.
Python에서numpy.linalg.lstsq()
함수를 사용한 최소 제곱 NumPy
방정식AX = B
는 선형 행렬 방정식으로 알려져 있습니다. numpy.linalg.lstsq()
함수를 사용하여 Python에서 최소 제곱 법으로 선형 행렬 방정식AX = B
를 풀 수 있습니다. 사실 꽤 간단합니다. 이 함수는 행렬을 가져 와서 다른 행렬의 형태로 선형 행렬 방정식에 대한 최소 제곱 솔루션을 반환합니다. 다음 코드 예제를 참조하십시오.
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])
출력:
[5.00000000e-01 5.00000000e-01 1.09109979e-16 1.64621130e-16]
위 코드에서 우리는 Python의np.linalg.lstsq()
함수를 사용하여 선형 행렬 방정식AX = B
에 대한 해를 계산했습니다. 이 방법은 행렬에 가중치를 추가하기 시작할 때 약간 까다로워집니다. 이러한 종류의 문제에 대한 해결책을 찾는 데 사용할 수있는 두 가지 주요 방법이 있습니다.
첫 번째 해결책은np.newaxis
지정자와 함께 배열 인덱싱을 사용하여 가중치에 새 차원을 추가하는 것입니다. 아래 코딩 예제에 설명되어 있습니다.
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])
출력:
[ 5.00000000e-01 5.00000000e-01 -4.40221936e-17 1.14889576e-17]
위의 코드에서 우리는 파이썬에서np.newaxis
및np.linalg.lstsq()
함수를 사용하여 가중치W
와 함께 선형 행렬 방정식AX = B
에 대한 해를 계산했습니다. 이 방법은 잘 작동하지만 이해하고 읽기 쉽지는 않습니다.
두 번째 솔루션은 좀 더 읽기 쉽고 이해하기 쉽습니다. 가중치를 대각 행렬로 변환 한 다음 사용하는 것이 포함됩니다. 아래 코딩 예제에서 설명합니다.
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])
출력:
[ 5.00000000e-01 5.00000000e-01 -4.40221936e-17 1.14889576e-17]
위의 코드에서 가중치를 대각선 행렬로 변환 한 다음np.linalg.lstsq()
함수를 사용하여 가중치W
와 함께 선형 행렬 방정식AX = B
에 대한 해를 계산했습니다.
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