Мой градиент приличный сходится, но кривая не подходит должным образом - PullRequest
0 голосов
/ 23 марта 2020

Мой код градиента приличный не работает. Я не понимаю, где я делаю что-то не так

close all;
clear all;
clc
xx=linspace(0,10,100);
y=xx.^3+rand(1,100)*10;
subplot(1,2,1);
plot(xx,y,'.');
hold on
x0=ones(1,100);
x1=xx;
x1=x1;
x2=xx.^2;
x2=x2;
x3=xx.^3;
x3=x3;
X = [(x0);
    (x1);
    (x2);
    (x3);
    ];
X=X';
y=y';
alpha=.00001;
m=100;
n=4;
iteration=30000;
J=zeros(iteration,1);
theta=zeros(n,1);
for itr=1:iteration
    temp=zeros(n,1);
    for i=1:n
        temp(i)=sum((X*theta-y).*X(:,i))*alpha*1/m;
    end
    theta=theta-temp;
    J(itr)=sum((X*theta-y).^2);
end
Y=theta(1)+theta(2)*x1+theta(2)*x2+theta(3)*x3;
plot(xx,Y);
subplot(1,2,2);
plot(J);

right one is cost function curve

Левый - это кривая справа, один - кривая функции стоимости. Функция стоимости сходится быстрее .Если я увеличиваю число выходных данных функции стоимости итерации, остается неизменным, но измененная кривая изменяется. Но если я делаю это,

            temp(i)=sum((X*theta-y))*alpha*1/m; 

код просто отлично работает.

enter image description here

...