ValueError. Линейная регрессия и нахождение среднеквадратичной ошибки на питоне

В задаче требуется найти среднеквадратичное отклонение для заданного набора данных. X - хранит в себе признаки, y - ожидаемые ответы. По сути это имитация обучения нейросети с учителем. Массив с признаками стандартизируется, к нему для учёта смещения добавляется вектор-столбец единиц слева, потом находятся веса по формуле, которую можно понять из кода и после этого требуется определить собственно само предсказание, то есть скалярное произведение вектора весов w на вектор признаков X. Здесь и возникает ошибка: ValueError: shapes (9,1) and (10,9) not aligned: 1 (dim 1) != 10 (dim 0). Понимаю, что что-то не так с размерностями, но найти конкретное место не могу.

import numpy as np

X = np.array([[ 8.32520000e+00,  4.10000000e+01,  6.98412698e+00,1.02380952e+00,  3.22000000e+02,  2.55555556e+00,3.78800000e+01, -1.22230000e+02],
       [ 8.30140000e+00,  2.10000000e+01,  6.23813708e+00,9.71880492e-01,  2.40100000e+03,  2.10984183e+00,3.78600000e+01, -1.22220000e+02],
       [ 7.25740000e+00,  5.20000000e+01,  8.28813559e+00,1.07344633e+00,  4.96000000e+02,  2.80225989e+00,3.78500000e+01, -1.22240000e+02],
       [ 5.64310000e+00,  5.20000000e+01,  5.81735160e+00,1.07305936e+00,  5.58000000e+02,  2.54794521e+00,3.78500000e+01, -1.22250000e+02],
       [ 3.84620000e+00,  5.20000000e+01,  6.28185328e+00,1.08108108e+00,  5.65000000e+02,  2.18146718e+00,3.78500000e+01, -1.22250000e+02],
       [ 4.03680000e+00,  5.20000000e+01,  4.76165803e+00,1.10362694e+00,  4.13000000e+02,  2.13989637e+00,3.78500000e+01, -1.22250000e+02],
       [ 3.65910000e+00,  5.20000000e+01,  4.93190661e+00,9.51361868e-01,  1.09400000e+03,  2.12840467e+00,3.78400000e+01, -1.22250000e+02],
       [ 3.12000000e+00,  5.20000000e+01,  4.79752705e+00,1.06182380e+00,  1.15700000e+03,  1.78825348e+00,3.78400000e+01, -1.22250000e+02],
       [ 2.08040000e+00,  4.20000000e+01,  4.29411765e+00,1.11764706e+00,  1.20600000e+03,  2.02689076e+00,3.78400000e+01, -1.22260000e+02],
       [ 3.69120000e+00,  5.20000000e+01,  4.97058824e+00,9.90196078e-01,  1.55100000e+03,  2.17226891e+00,3.78400000e+01, -1.22250000e+02]])
# тут объявлено первые 10 ответов для первых 10 признаковых описаний
y = np.array([4.526, 3.585, 3.521, 3.413, 3.422, 2.697, 2.992, 2.414, 2.267, 2.611])

# стандартизация
X =(X-np.mean(X,axis=0))/X.std(axis=0)
# добавление единиц слева для смещения
ones=np.ones(10)
ones=ones[:, np.newaxis]
X = np.c_[ones, X]

# веса
w=np.dot(np.dot(np.linalg.inv(np.dot(X.T,X)),X.T),y)
# в строке ниже преобразовала вектор-строку w в вектор-столбец, в надежде, что это поможет исправить ошибку
w=w[:, np.newaxis]

# прогнозы
#ошибка в следующей строке
preds = np.dot(w,X)

# среднеквадратичная ошибка
error = (1/len(y))*(y-preds)**2

print(round(error, 5))

Ответы (2 шт):

Автор решения: CrazyElf

Умножать нужно видимо в другом порядке, поменять элементы местами:

# preds = np.dot(w,X)
preds = np.dot(X,w)

Для умножения матриц соседние размерности (в середине) должны совпадать

 (9,1) * (10,9) - середина не совпадает
(10,9) * (9,1)  - совпадает, 9 = 9

И ещё квадраты разностей нужно суммировать:

error = (1/len(y))*((y-preds)**2).sum()
                                 ^^^^^^
→ Ссылка
Автор решения: Karina

Уже разобралась. Ответ 0.00982. Решение в таком виде приняли.

# прогнозы
preds = np.dot(w,X.T)
# среднеквадратичная ошибка
error = (1/len(y))*sum((y-preds)**2)
print(round(error, 5))
→ Ссылка