我正在浏览 Andrew Ng在斯坦福的免费在线机器学习课程中的视频。他讨论了梯度下降作为解决线性回归的算法,并在 Octave 中编写函数来执行它。大概我可以在 R 中重写这些函数,但我的问题是 lm() 函数不是已经给了我线性回归的输出吗?为什么我要编写自己的梯度下降函数?有什么好处还是纯粹作为一种学习练习?lm() 做梯度下降吗?
R中的梯度下降与lm()函数?
机器算法验证
r
回归
机器学习
梯度下降
2022-02-11 10:29:40
2个回答
梯度下降实际上是解决线性回归问题的一种非常糟糕的方法。R 中的lm()
函数在内部使用一种形式的QR 分解,这种形式要高效得多。然而,梯度下降是一种普遍有用的技术,值得在这个简单的上下文中介绍,以便更清楚地了解如何将其应用于更复杂的问题。如果您想实现自己的版本作为学习练习,这是值得做的事情,但lm()
如果您想要的只是一个进行线性回归的工具,这是一个更好的选择。
在线梯度有用的原因是用于大规模应用。无论如何,现在有一些库可以实现它,因此您无需对其进行编程。这是了解事物如何运作的好方法。
用 Leon Bottou 的话来说:
大规模机器学习最初是作为一个工程问题来处理的。例如,为了利用更大的训练集,我们可以使用并行计算机来运行已知的机器学习算法或采用更高级的数值方法来优化已知的机器学习目标函数。这种方法依赖于一个吸引人的假设,即人们可以将统计方面与机器学习问题的计算方面分离。
这项工作表明这个假设是不正确的,放弃它会导致学习算法更加有效。一个新的理论框架考虑了近似优化对学习算法的影响。
该分析显示了小规模和大规模学习问题的不同权衡。小规模学习问题受制于通常的近似 - 估计权衡。大规模学习问题受到质量不同的权衡,涉及以非平凡方式的底层优化算法的计算复杂性。例如,随机梯度下降 (SGD) 算法似乎是平庸的优化算法,但在大规模学习问题上表现得非常好。