多项式回归的批量梯度下降

时间:2014-07-10 20:14:32

标签: machine-learning octave regression gradient-descent

我试图从简单的线性单变量梯度下降转向更高级的东西:最佳多项式适合一组点。我创建了一个简单的八度音阶测试脚本,它允许我在2D空间中可视地设置点,然后启动渐变dsecent算法,看看它是如何逐渐接近最佳拟合的。

不幸的是,它没有像简单的单变量线性回归那样好用:我得到的结果(当我得到它们时)与我期望的多项式不一致!

以下是代码:

dim=5;
h = figure();
axis([-dim dim -dim dim]);

hold on
index = 1;
data = zeros(1,2);
while(1)
    [x,y,b] = ginput(1);
    if( length(b) == 0 )
        break;
    endif
    plot(x, y, "b+");
    data(index, :) = [x y];
    index++;
endwhile

y = data(:, 2);
m = length(y);
X = data(:, 1);
X = [ones(m, 1), data(:,1), data(:,1).^2, data(:,1).^3 ];

theta = zeros(4, 1);

iterations = 100;
alpha = 0.001;
J = zeros(1,iterations);
for iter = 1:iterations
    theta -= ( (1/m) * ((X * theta) - y)' * X)' * alpha;

    plot(-dim:0.01:dim, theta(1) + (-dim:0.01:dim).*theta(2) + (-dim:0.01:dim).^2.*theta(3) + (-dim:0.01:dim).^3.*theta(4), "g-");

    J(iter) = sum( (1/m) * ((X * theta) - y)' * X);
end

plot(-dim:0.01:dim, theta(1) + (-dim:0.01:dim).*theta(2) + (-dim:0.01:dim).^2.*theta(3) + (-dim:0.01:dim).^3.*theta(4), "r-");

figure()
plot(1:iter, J);

我不断得到错误的结果,即使J似乎正确地最小化了。我用正常方程检查了绘图函数(当然,它正常工作,虽然我认为误差位于theta方程的某处,但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:3)

我实现了你的代码,它看起来很好,你没有得到你想要的结果的原因是当你试图最小化目标函数时,你的情况下的线性回归或多项式回归会受到局部最小值的影响。算法在执行期间陷入局部最小值。我实现你的代码改变步骤(alpha),我看到较小的步骤,它更好地适应数据,但你仍然陷入局部最小值。

每当我陷入不同的局部最小值时,选择thetaas的随机初始化点。如果你很幸运,你会找到更好的θ初始点并更好地拟合数据。我认为有一些算法可以找到最佳的初始点。

下面我附上随机初始点的结果和Matlab的polyfit结果。

enter image description here

  • 在上面的图中,使用多项式回归替换"线性回归",输入错误。

如果你观察到更好的情节,你会看到偶然的(使用rand())我选择了一些初始点,这使得我得到了比较其他初始点的最佳数据....我正在展示指针。

相关问题