线性回归-实现特征缩放

时间:2019-05-29 15:38:26

标签: machine-learning octave linear-regression gradient-descent feature-scaling

我正尝试在将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

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

Graphs

即使您的Cost函数似乎已最小化,您看到的

感觉也不对。

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

1 个答案:

答案 0 :(得分:1)

检查实现是否正确的最简单方法是与经过验证的线性回归实现进行比较。我建议使用一种替代的实施方法,例如建议的here,然后比较您的结果。如果拟合匹配,则这是对数据的最佳线性拟合;如果拟合不匹配,则实现中可能存在问题。