Я пишу линейное регрессионное присваивание в Matlab (y-пересечение фиксировано в начале координат).Мне нужно обновлять значение наклона на каждом шаге итерации.N - количество моих точек данных.Я сделал это внутри цикла for:
for i = 1:numIter
sum = 0;
for i = 1:n
sum = sum + (slope*x(i) - y(i))*x
end
slope = slope - factor*sum;
end
Моя программа возвращает неверные результаты с ошибкой в несколько процентов, и после выполнения тестовых случаев я пришел к выводу, что один шаг итерации делает неправильную вещь.Я что-то упускаю из виду?Я новичок в численных расчетах в Matlab.
Спасибо за любой вклад.
Редактировать.Что запускается, это
data = load('data.txt');
x = [data(:,1)];
y = [data(:,2)];
slope = 0;
iter = 1000; %number of iterations
factor = 0.1/n; %rate at which we approach the optimum
slope = fit(x, y, slope, factor, iter);
Функция находится в другом файле, и это выглядит так:
function slope = fit(x, y, slope, factor, iter)
n = length (x);
for i = 1:iter
sum = 0;
for j = 1:n
sum = sum + (slope*x(j) - y(j))*x(j)
% we were given such a formula
end
slope = slope - factor*sum;
end
end
Интересно, не проскользнул ли я где-нибудь вокруг взаимодействий.
Правка2.Уравнение для обновления наклона (S).
S_i + 1 = S_i - скорость / n сумма _j = 1 ^ n [(S_i * x_j - y_j) * S_i]