Least square solution

rlawlgus·2022년 11월 13일
0

import numpy as np
import matplotlib.pyplot as plt

scalar case

데이터 소개

x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 3.1])

계산

  • X=[x1, x2, x3, x4]와 같은 의미
  • matmul는 matrixmultiply와 같은 의미
  • (X1 X1T(트렌스포즈))-1 (역행렬)
  • w[0] -> w, w[1] -> b
  • m, c =np.np.linalg.lstsq(X,T, y, rcond=None)[0] #using library
X1 = np.vstack([x, np.ones(len(x))])

Temp = np.linalg.inv(np.matmul(X1, X1.T))
w = np.matmul(np.matmul(Temp, X1), y)

# 데이터 시각화
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, w[0] * x + w[1], 'r', label='Fitted line')
# plt.plot(x, m*x+c, 'r', label='Fitted line')
plt.legend()
plt.show()

vector case

데이터 소개

x1 = np.array([[0, 1, 2, 3, 4], [0, 2, 4, 5, 6]])
y1 = np.array([-1, 0.2, 0.9, 2, 3])
X2 = np.vstack([x1, np.ones(len(y1))])

계산

  • x2=np.vstack([x1])
  • w[0:2] -> w, w[2] -> b
  • X_hat=np.matmul(w[0:2].T,x1)
Temp = np.linalg.inv(np.matmul(X2, X2.T))
w = np.matmul(np.matmul(Temp, X2), y1)


X_hat=np.matmul(w[0:2].T,x1)+w[2]
ax=plt.axes(projection='3d')
ax.plot3D(x1[0,:],x1[1,:],y1,'o',label='Original data', markersize=10)
ax.plot3D(x1[0,:],x1[1,:],X_hat,'r',label='Fitted line')
plt.legend()
plt.show()

profile
Hello

0개의 댓글