Линейная регрессия - Реализация масштабирования объектов - PullRequest
1 голос
/ 29 мая 2019

Я пытался реализовать линейную регрессию в октаве 5.1.0 для набора данных, связывающего оценку GRE с вероятностью допуска.Набор данных имеет вид

337 0,92
324 0,76
316 0,72
322 0,8
.
.
.

Мой основной файл Program.m выглядит следующим образом:

     % read the data

  data = load('Admission_Predict.txt');

  % initiate variables
  x = data(:,1);
  y = data(:,2);
  m = length(y);
  theta = zeros(2,1);
  alpha = 0.01;
  iters = 1500;
  J_hist = zeros(iters,1);

  % plot data
  subplot(1,2,1);
  plot(x,y,'rx','MarkerSize', 10);
  title('training data');

  % compute cost function
  x = [ones(m,1), (data(:,1) ./ 300)]; % feature scaling
  J = computeCost(x,y,theta);

  % run gradient descent
  [theta, J_hist] = gradientDescent(x,y,theta,alpha,iters);


  hold on;
  subplot(1,2,1); 
  plot((x(:,2) .* 300), (x*theta),'-');
  xlabel('GRE score');
  ylabel('Probability');
  hold off;

  subplot (1,2,2); 
  plot(1:iters, J_hist, '-b');
  xlabel('no: of iteration');
  ylabel('Cost function');

computeCost.m выглядит так,

 function J = computeCost(x,y,theta)
  m = length(y);
  h = x * theta;
  J = (1/(2*m))*sum((h-y) .^ 2);
endfunction

и GradientDescent.m выглядитнапример,

    function [theta, J_hist] = gradientDescent(x,y,theta,alpha,iters)
  m = length(y);
  J_hist = zeros(iters,1);

  for i=1:iters

    diff = (x*theta - y);
    theta = theta - (alpha * (1/(m))) * (x' * diff);
    J_hist(i) = computeCost(x,y,theta);

  endfor

endfunction

Графики, изображенные на графике, выглядят следующим образом:

Graphs

, который вы видите, не чувствует себя хорошо, хотя моя функция Cost кажетсябыть минимизированным.

Может кто-нибудь сказать мне, если это правильно?Если нет, что я делаю не так?

1 Ответ

1 голос
/ 29 мая 2019

Самый простой способ проверить правильность вашей реализации - сравнить ее с проверенной реализацией линейной регрессии. Я предлагаю использовать альтернативный подход к реализации, такой как предложенный здесь , а затем сравнить ваши результаты. Если совпадения совпадают, то это наилучшее линейное соответствие вашим данным, а если они не совпадают, возможно, в вашей реализации что-то не так.

...