我已经尝试了一切,但无法弄清楚为什么我的梯度下降不起作用。我查看了许多示例,并多次更改了梯度下降代码。当我运行程序时,我得到一个
以下是我的代码:
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