我试图用Octave来计算梯度下降。每次迭代,我的thetas都会成倍增长。我不确定问题是什么,因为我直接复制了另一个功能。
这是我的矩阵:
X = 1 98
1 94
1 93
1 88
1 84
1 82
1 79
y = 97
94
94
78
85
85
76
theta = 1
1
我使用这个公式:
theta = theta - 0.001 * (1 / 7) * (X' * (X * theta - y))
我弄清楚了使用正规方程的最佳方法是什么,但经过几次迭代后,我的数据是数千。知道什么是错的吗?
答案 0 :(得分:2)
您似乎使用渐变下降进行线性回归,其中您的学习率太高,如前面的答案中所述,这篇文章只是为了添加一些可视化并准确解释您的案例中发生了什么。
如下图所示,学习率足够高,可以收敛到凸成本表面的全局最小值,并且θ值会振荡并错过最小点,因为步骤太大(如RHS图所示) )。如果您降低学习率(如在LHS中),收敛率将会降低,但最终您将达到全球最低值。
你需要找到一个恰到好处的alpha(学习率),这样收敛速度不会太慢或太高(这将取决于数据,缩放功能会有所帮助)。
答案 1 :(得分:1)
如果值正在爆炸,那么你的步骤必须太大。从本质上讲,你每次都会超调。如果您的步骤太大,您将看到一系列估计,如[100,-100,1000,-1000,...] ...估计将在连续的大正数和负数之间振荡。最简单的解决方法是从
更改步长常量0.001 *(1/7)
类似
1E-6
或者甚至更小。