B = M*A + c + e
С < strong>e — это гауссова ошибка (среднее значение 0 и дисперсия сигмы^2).
Моя цель — оценить матрицу M и вектор c, для которого сумма квадратов расстояний между B и прогнозы сводятся к минимуму.
Я не эксперт по программированию/питону и не знаю, как это сделать правильно. На данный момент я сделал вот что:
Код: Выделить всё
import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt
A = np.array([
[0, -6],
[0, 6],
[-6, 0],
[6, 0],
[-3, -3],
[-3, 3],
[0,0],
[2, -2],
[2, 4],
[-3, 0],
[-5, -3],
[2, 5]
])
B = np.array([
[0.45070423, 0.52288732],
[0.125, 0.5625],
[0.1754386, 0.15789474],
[0.200489, 0.55012225],
[0.30769231, 0.32451923],
[0.1375, 0.45],
[0.19935691, 0.46302251],
[0.32142857, 0.53571429],
[0.12765957, 0.53191489],
[0.15246637, 0.30269058],
[0.2247191, 0.20224719],
[0.14379085, 0.55882353],
])
# MAPPING : getting M and c
def error_function(params):
# Unpack M and c from the flat parameter array
M = params[:4].reshape(2, 2)
c = params[4:]
predicted_B = (A @ M) + c
# Calculate the sum of squared distances
return np.sum(np.sum((predicted_B - B) ** 2, axis=1))
# Perform the optimization
initial_guess = np.zeros(6)
result = minimize(error_function, initial_guess)
M = result.x[:4].reshape(2, 2)
c = result.x[4:]
# Getting predictions
predicted_B = (A @ M) + c
print(predicted_B)
Во-вторых, я не имею дело с гауссовой ошибка в моем коде, потому что я не уверен, нужно ли это делать. Это неявно сделано в функции минимизации scipy?
Подробнее здесь: https://stackoverflow.com/questions/782 ... sing-scipy