【问题标题】:Batch gradient descent for polynomial regression多项式回归的批量梯度下降
【发布时间】:2014-09-01 08:30:59
【问题描述】:

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

不幸的是,它的效果不如简单的单变量线性回归:我得到的结果(当我得到它们时)与我期望的多项式不一致!

代码如下:

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 方程的某个地方,但我无法弄清楚它是什么。

【问题讨论】:

    标签: machine-learning octave regression gradient-descent


    【解决方案1】:

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

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

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

    • 在上图中,将“线性回归与多项式回归”替换为错误。

    如果您更好地观察该图,您会偶然发现(使用 rand() )我选择了一些初始点,这些初始点使我获得了比较其他初始点的最佳数据拟合......我用一个指针。

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 1970-01-01
      • 2020-05-08
      • 2021-01-23
      • 2021-06-23
      • 2021-04-30
      • 1970-01-01
      • 2017-06-20
      • 2019-10-09
      相关资源
      最近更新 更多