Не могу понять, как напечатать ошибку наименьших квадратов - PullRequest
1 голос
/ 20 мая 2019

Я написал некоторый код, чтобы найти лучшую подходящую линию для пары точек данных, используя аналитическое решение для метода наименьших квадратов. Теперь я хотел бы напечатать ошибку между фактическими данными и моей оценочной линией, но я не знаю, как ее вычислить. Вот мой код:

import numpy as np
import matplotlib.pyplot as plt

A = np.array(((0,1),
             (1,1),
             (2,1),
             (3,1)))

b = np.array((1,2,0,3), ndmin = 2 ).T

xstar = np.matmul( np.matmul( np.linalg.inv( np.matmul(A.T, A) ), A.T), b)

print(xstar)

plt.scatter(A.T[0], b)
u = np.linspace(0,3,20)
plt.plot(u, u * xstar[0] + xstar[1], 'b-')

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Вы уже построили прогнозы из линейной регрессии. Таким образом, из значения прогноза вы можете рассчитать «сумму квадратичных ошибок (SSE)» или «среднеквадратичную ошибку (MSE)» следующим образом:

y_prediction = u * xstar[0] + xstar[1]
SSE = np.sum(np.square(y_prediction - b))
MSE = np.mean(np.square(y_prediction - b))
print(SSE)
print(MSE)

Примечание в сторону. Возможно, вы захотите использовать np.linalg.pinv, так как это более численно устойчивый матричный обратный оператор.

0 голосов
/ 20 мая 2019

Обратите внимание, что numpy имеет функцию для этого: calles lstsq (т.е. наименьших квадратов), которая возвращает остатки, а также решение, поэтому вам не нужно ее реализовыватьсебя:

xstar, residuals = np.linalg.lstsq(A,b) MSE = np.mean(resuiduals) SSE = np.sum(residuals)

попробуй!

...