У меня есть фрагмент кода из репозитория Github о Регрессия ортогонального расстояния или Общая квадратичная ошибка оптимизация.
# Total Least Squares:
def line_total_least_squares(x,y):
n = len(x)
x_ = np.sum(x)/n
y_ = np.sum(y)/n
# Calculate the x~ and y~
x1 = x - x_
y1 = y - y_
# Create the matrix array
X = np.vstack((x1, y1))
X_t = np.transpose(X)
# Finding A_T_A and it's Find smallest eigenvalue::
prd = np.dot(X,X_t)
W,V = np.linalg.eig(prd)
small_eig_index = W.argmin()
a,b = V[:,small_eig_index]
# Compute C:
c = (-1*a*x_) + (-1*b*y_)
return a,b,c
a1,b1,c1 = line_total_least_squares(X,y)
# a1,b1,c1 = line_total_least_squares(X,y)
# in form of y = mx + c
# y = (-1*(c1/b1)) + x * -1*(a1/b1)
Я хочу понять математику следующего кода. Я понимаю, что это реализовано с использованием метода нормальных уравнений. Но я не совсем понимаю код.
Может кто-нибудь, пожалуйста, объясните мне, если это возможно.
Заранее спасибо