Я решаю назначение программирования в курсе Machine Learning
. В который я реализовать Gradient Descent Algorithm
, как показано нижеРеализация «Алгоритм спуска градиента» в Matlab
Я использую следующий код в Matlab
data = load('ex1data1.txt');
% text file conatins 2 values in each row separated by commas
X = [ones(m, 1), data(:,1)];
theta = zeros(2, 1);
iterations = 1500;
alpha = 0.01;
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
k=1:m;
j1=(1/m)*sum((theta(1)+theta(2).*X(k,2))-y(k))
j2=((1/m)*sum((theta(1)+theta(2).*X(k,2))-y(k)))*(X(k,2))
theta(1)=theta(1)-alpha*(j1);
theta(2)=theta(2)-alpha*(j2);
J_history(iter) = computeCost(X, y, theta);
end
end
theta = gradientDescent(X, y, theta, alpha, iterations);
На выполнения кода я получаю сообщение об ошибке
Из сообщения об ошибке видно, что результат приведенного ниже выражения
((1/m)*sum((theta(1)+theta(2).*X(k,2))-y(k)))*(X(k,2))
Это вектор, который мы пытаемся сохранить в скалярной переменной j2. Я думаю, что X (k, 2) создает проблему, я использовал ее как индекс для вектора X для извлечения значения из k-й строки и второго столбца. Но, с другой стороны, весь вектор умножается, пожалуйста, предложите мне, как я могу его исправить.
На самом деле, Matlab имеют свои собственные методы для подобных проблем.Я знаю, что не может быть и речи, но стоило сказать:) ... – hyprfrcb