R中的梯度下降与lm()函数?


14

我正在看吴安德(Andrew Ng)的免费在线机器学习课程中的视频在斯坦福大学中。他讨论了梯度下降作为解决线性回归的算法,并在Octave中编写函数来执行该算法。大概我可以用R重写那些函数,但是我的问题是lm()函数是否已经给了我线性回归的输出?为什么要编写自己的梯度下降函数?有优势还是纯粹作为学习练习?lm()会进行梯度下降吗?


我认为,在R中没有好的解决方案的情况下,您可能需要用另一种语言来实现梯度下降(例如,回归的某些变化,例如大数据的正则回归)
Manoel Galdino 2012年

Answers:


20

梯度下降实际上是解决线性回归问题的一种很差的方法。lm()R中的函数在内部使用QR分解形式,效率大大提高。但是,梯度下降是一种普遍有用的技术,值得在这种简单的情况下进行介绍,以便更清楚地将其应用于更复杂的问题。如果您想将自己的版本实现为学习练习,这是一件值得做的事情,但是lm()如果您只想做线性回归的工具,那是一个更好的选择。


@Martin如果我们有很多功能,lm()还会更好吗?
user2626445

0

在线渐变非常有用的原因是针对大规模应用。无论如何,现在都有实现它的库,因此您无需对其进行编程。这是学习事物运作方式的好方法。

用莱昂·巴托(Leon Bottou)的话说:

大规模机器学习最初是作为工程问题解决的。例如,为了利用更大的训练集,我们可以使用并行计算机来运行已知的机器学习算法,或者采用更高级的数值方法来优化已知的机器学习目标函数。这样的方法基于一种有吸引力的假设,即人们可以将统计方面与机器学习问题的计算方面分离。

这项工作表明该假设是不正确的,并且放弃它会导致更有效的学习算法。一个新的理论框架考虑了近似优化对学习算法的影响。

分析显示了针对小规模和大规模学习问题的明显权衡。小规模的学习问题需要进行通常的近似-估计折衷。大规模学习问题要经历质的不同权衡,涉及以非平凡的方式进行基础优化算法的计算复杂性。例如,随机梯度下降(SGD)算法似乎是中等优化算法,但在大规模学习问题上却表现出色。

大规模学习

sgd项目

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.