1

我试图在将 GRE 分数与录取概率相关联的数据集上在 Octave 5.1.0 中实现线性回归。数据集是这样的,

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

然后绘制的图表如下所示,

图表

您可以看到,即使我的成本函数似乎已最小化,也感觉不对。

有人可以告诉我这是否正确吗?如果没有,我做错了什么?

4

1 回答 1

1

检查您的实现是否正确的最简单方法是与经过验证的线性回归实现进行比较。我建议使用另一种实现方法,例如此处建议的方法,然后比较您的结果。如果拟合匹配,那么这是对您的数据的最佳线性拟合,如果它们不匹配,那么您的实现可能有问题。

于 2019-05-29T16:53:46.650 回答