我了解普通最小二乘法和梯度下降法的作用,但我只是对它们之间的区别感到困惑。
我能想到的唯一区别是——
- 梯度下降是迭代的,而 OLS 不是。
- 梯度下降使用学习率达到最小值,而 OLS 只是使用偏微分找到方程的最小值。
这两种方法在线性回归中都非常有用,但它们都给了我们相同的结果:截距和系数的最佳可能值。
它们之间有什么区别,为什么有两种线性回归方法?
我了解普通最小二乘法和梯度下降法的作用,但我只是对它们之间的区别感到困惑。
我能想到的唯一区别是——
这两种方法在线性回归中都非常有用,但它们都给了我们相同的结果:截距和系数的最佳可能值。
它们之间有什么区别,为什么有两种线性回归方法?
梯度下降更通用,因为它可以通过迭代过程应用于任何优化问题(包括非线性回归)。在这种情况下,我们正在优化
OLS 是一种特殊情况,已证明存在全局最小值的解析表达式:
计算的进步使梯度下降成为可能,而 OLS 是从数学上推导出来的。
卡尔·弗里德里希·高斯于 1809 年在“Theoria motus corporum coelestium in sectionibus conicus solemambientium”中第一个正确描述了 OLS 。这些天人们试图预测矮行星谷神星的运动,而高斯是第一个使用 OLS 根据很少的数据计算它的运动的人。显然 1809 年还没有计算机,因此梯度下降中使用的昂贵的迭代计算是痛苦的。需要“简单”的方法来解决像 OLS 这样的问题,使用笔和纸激发的解决方案,比如使用 OLS的矩阵解决方案。
所以梯度下降是“唯一”解决 OLS的一种方法。矩阵代数中的 OLS 解决方案还允许研究 OLS(和相关方法)的有趣属性。例如,当您查看诸如 Davidson/MacKinnon “计量经济学理论和方法”之类的书籍时,您会发现 OLS 的矩阵解决方案允许详细研究它的属性。
在下面找到一些 OLS 矩阵解决方案与梯度下降的 R 示例。请注意maxiter
参数是梯度下降中所需更新的数量。使用计算机进行大量更新是没有问题的。但是,当您使用笔和纸时,进行数千次更新并不是一个好的解决方案。
x0 <- c(1,1,1,1,1)
x1 <- c(1,2,3,4,5)
x2 <- c(8,4,3,1,8)
x <- as.matrix(cbind(x0,x1,x2))
y <- as.matrix(c(3,7,5,11,14))
x
y
# (X'X)^-1 X'y
beta1 = solve(t(x)%*%x) %*% t(x)%*%y
# R's regression command
beta2 = summary(lm(y ~ x[, 2:3]))
# Gradient decent
m <- nrow(y)
grad <- function(x, y, theta) {
gradient <- (1/m)* (t(x) %*% ((x %*% t(theta)) - y))
return(t(gradient))
}
# Gradient update
grad.descent <- function(x, maxiter){
theta <- matrix(c(0, 0, 0), nrow=1)
alpha = 0.01 # learning rate
for (i in 1:maxiter) {
theta <- theta - alpha * grad(x, y, theta)
#print(theta)
}
return(theta)
}
# Gradien descent
print(grad.descent(x,10000))
# Matrix OLS solution
beta1
# R's regression command
beta2