Векторизация кода градиентного спуска

Я выполняю спуск градиента партии на Matlab. У меня проблема с этапом обновления theta. theta - вектор двух компонентов (две строки). X - это матрица, содержащая строки m (количество обучающих образцов) и столбцы n=2 (количество функций). Y является вектором строк m.

Во время этапа обновления мне нужно установить каждый theta(i) в

theta(i) = theta(i) - (alpha/m)*sum((X*theta-y).*X(:,i))

Это можно сделать с помощью цикла for, но я не могу понять, как его векторизовать (из-за термина X(:,i)).

Любое предложение?

Ответ 1

Похоже, вы пытаетесь сделать простое матричное умножение, что, по-видимому, лучше всего подходит MATLAB.

theta = theta - (alpha/m) * (X' * (X*theta-y));