梯度下降总是无穷大

时间:2018-07-14 21:33:35

标签: matlab gradient-descent

我已经尝试了所有方法,但无法弄清楚为什么我的梯度下降无法正常工作。我看了无数示例,并多次更改了梯度下降代码。当我运行程序时,得到的响应为NaN。然后,我打印出每个迭代,并发现在到达NaN之前,该值越来越高(或越来越低至负无穷大)。我尝试了不同的alpha值,开始的beta值,迭代次数以及每一次都不起作用。发生了什么事?

这是我的代码:

A = load('A2-datasets/data-build-stories.mat');
X = [ones(60,1) A.data_build_stories(:,1)];
y = A.data_build_stories(:,2);
b = gradDes(X, y);

function beta = gradDes(X,y)
    alpha = 0.01;
    beta = [0;0];
    m = length(y);
    for i = 1:1000
        beta = beta - (alpha/m) * (X' * (X * beta - y));
    end
end

这是data-build-stories.mat

770 54  
677 47  
428 28  
410 38  
371 29  
504 38  
1136 80  
695 52  
551 45  
550 40  
568 49  
504 33  
560 50  
512 40  
448 31  
538 40  
410 27  
409 31  
504 35  
777 57  
496 31  
386 26  
530 39  
360 25  
355 23  
1250 102  
802 72  
741 57  
739 54  
650 56  
592 45  
577 42  
500 36  
469 30  
320 22  
441 31  
845 52  
435 29  
435 34  
375 20  
364 33  
340 18  
375 23  
450 30  
529 38  
412 31  
722 62  
574 48  
498 29  
493 40  
379 30  
579 42  
458 36  
454 33  
952 72  
784 57  
476 34  
453 46  
440 30  
428 21  

1 个答案:

答案 0 :(得分:0)

您正在使用一个 对于您的数据而言,alpha太大。

尝试更改它:

    A = load('tmp.txt');
    X = [ones(60,1) A(:,1)];
    y = A(:,2);
    b = gradDes(X, y);

    function beta = gradDes(X,y)
        alpha = 0.00000001;
        beta = [0;0];
        m = length(y);
        for i = 1:1000
            beta = beta - (alpha/m) * (X' * (X * beta - y));
        end
    end

    b =[  0.0001 0.0719]