Градиентный спуск Поиск в matlab theta1 некорректен - PullRequest
0 голосов
/ 17 октября 2018

Я изучал курс машинного обучения, который вел профессор Эндрю Нг. Это ссылка

Я пытаюсь выполнить первое задание этого курса. Упражнение 2: линейная регрессия на основе Контролируемая проблема обучения

1. Градиентный спуск с использованием коэффициента обучения альфа = 0,07. С индексами Matlab / Octave и Octaveначиная с 1, а не с 0, вы, вероятно, будете использовать theta (1) и theta (2) в Matlab / Octave для представления theta0 и theta1.

Я записываю код matlab для решения этой проблемы:

clc
clear
close all

x = load('ex2x.dat');
y = load('ex2y.dat');
figure % open a new figure window
 plot(x, y, '*');
 ylabel('Height in meters')
 xlabel('Age in years')
m = length(y); % store the number of training examples
x = [ones(m, 1), x]; % Add a column of ones to x
theta = [0 0];
temp=0,temp2=0;
h=[];
alpha=0.07;n=2; %alpha=learning rate
for i=1:m
temp1=0;
for j=1:n
    h(j)=theta(j)*x(i,j);
    temp1=temp1+h(j);
end
temp=temp+(temp1-y(i));
temp2=temp2+((temp1-y(i))*(x(i,1)+x(i,2)));

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

Я получаю ответ:

>> theta

theta =

0.0745    0.4545

Here, 0.0745 is exact answer but 2nd one is not accurate. 

Фактический ответ

theta =

0.0745 0.3800

Набор данных предоставляетсяв ссылке.Может ли кто-нибудь помочь мне решить проблему?

1 Ответ

0 голосов
/ 18 октября 2018

Вы получаете неправильные результаты, потому что вы пишете длинный ненужный код, который легко подвержен ошибкам, именно поэтому у нас есть matlab:

clear

x = load('d:/ex2x.dat');
y = load('d:/ex2y.dat');
figure(1), clf, plot(x, y, '*'), xlabel('Age in years'), ylabel('Height in meters')

m = length(y); % store the number of training examples
x = [ones(m, 1), x]; % Add a column of ones to x


theta=[0,0];  alpha=0.07;

residuals = x*theta' - y ; %same as:  sum(x.*theta,2)-y
theta = theta - alpha*mean(residuals.*x);

disp(theta)
...