Может ли кто-нибудь объяснить, почему мое вычитание матрицы портит индекс? - PullRequest
0 голосов
/ 06 мая 2020

Итак, я работаю над регрессионной моделью для набора данных о жилье в Бостоне, и по какой-то причине, когда я пытаюсь вычесть две матрицы 506x1 в моем алгоритме градиентного спуска (prediction_error = np.subtract (y, prediction_function), это дает мне Матрица 506x506 (prediction_error). Раньше я проделывал ту же операцию дважды, и ничего плохого не произошло. Я попытался использовать np.subtract вместо обычного знака минус в python, но ничего не изменилось. Может кто-нибудь мне помочь?

theta_grad = np.zeros((14,1))
print(theta_grad.shape) #debugging
prediction_function = X @ theta_grad 
print(prediction_function.shape) #debugging
prediction_error = np.subtract(y,prediction_function.reshape(y.shape))
print(prediction_error.shape) #debugging
gradient = X.T @ prediction_error

1 Ответ

2 голосов
/ 06 мая 2020

Ваши массивы y имеют форму (506,), а другие имеют форму (506,1) и python, которые транслируются один поверх другого. Попробуйте преобразовать их в похожие формы, например:

np.subtract(y,prediction_function.reshape(y.shape))

Чтобы увидеть эффект, вот пример кода для лучшего понимания:

A = np.arange(5) #shape (5,)
B = np.arange(5).reshape(5,1)  #shape (5,1)
np.subtract(A, B)

[[ 0  1  2  3  4]
 [-1  0  1  2  3]
 [-2 -1  0  1  2]
 [-3 -2 -1  0  1]
 [-4 -3 -2 -1  0]]   

np.subtract(A, B.reshape(A.shape))

[[0 0 0 0 0]]
...