векторизация в бесконечном цикле в октаве - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь вычислить equation где h(x) = X*theta, theta is nx1 matrix and X is an mxn and y is also m x 1 матрица. alpha,m,theta(j) and x(j)(i) - скалярные значения. Я пытаюсь векторизовать это следующим образом

    theta0 =(X*theta - y)
    theta1 = (X*theta - y).*X(:,2)
    theta0 = sum(theta0);
    theta1 = sum(theta1);
    theta0 = theta(1) - theta0*alpha/m;
    theta1 = theta(2) - theta1*alpha/m;
    theta = [theta0;theta1];    

где num_iter=1500 и m=length(y) но мой код зашёл в бесконечный цикл. мой эквивалент для решения петли ниже

     theta0 =0;
     theta1= 0;
     for i = 1:m,
        theta0 = theta0 + (sum(X(i,:)*theta) - y(i));
         theta1 = theta1 + (sum(X(i,:)*theta) - y(i))*X(i,2);
     end
     theta(1) =  theta(1) - theta0*alpha/m;
     theta(2) =  theta(2) - theta1*alpha/m;

пожалуйста, дайте мне, где я ошибся

1 Ответ

0 голосов
/ 30 июня 2018

Формула может быть записана в векторизованном виде как:

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