Реализация линейной регрессии в Октаве - PullRequest
0 голосов
/ 09 января 2019

Я недавно пытался реализовать линейную регрессию в октаве и не смог пройти мимо онлайн-судьи. Вот код

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
    for i = 1:m
      temp1 = theta(1)-(alpha/m)*(X(i,:)*theta-y(i,:));
      temp2 = theta(2)-(alpha/m)*(X(i,:)*theta-y(i,:))*X(i,2);
      theta = [temp1;temp2];
    endfor

    J_history(iter) = computeCost(X, y, theta);

end

end

Мне известна векторизованная реализация, но я просто хотел попробовать итерационный метод. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 января 2019

Вам не нужен внутренний цикл for. Вместо этого вы можете использовать функцию sum.

В коде:

for iter = 1:num_iters

    j= 1:m;

    temp1 = sum((theta(1) + theta(2) .* X(j,2)) - y(j)); 
    temp2 = sum(((theta(1) + theta(2) .* X(j,2)) - y(j)) .* X(j,2));

    theta(1) = theta(1) - (alpha/m) * (temp1 );
    theta(2) = theta(2) - (alpha/m) * (temp2 );

    J_history(iter) = computeCost(X, y, theta);

end

Было бы неплохо также реализовать векторизованное решение, а затем сравнить их оба, чтобы увидеть, как на практике эффективность векторизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...