线性回归中OLS和梯度下降的区别

数据挖掘 线性回归 梯度下降
2022-02-20 21:27:19

我了解普通最小二乘法梯度下降法的作用,但我只是对它们之间的区别感到困惑。

我能想到的唯一区别是——

  1. 梯度下降是迭代的,而 OLS 不是。
  2. 梯度下降使用学习率达到最小值,而 OLS 只是使用偏微分找到方程的最小值。

这两种方法在线性回归中都非常有用,但它们都给了我们相同的结果:截距系数的最佳可能值。

它们之间有什么区别,为什么有两种线性回归方法?

2个回答

梯度下降更通用,因为它可以通过迭代过程应用于任何优化问题(包括非线性回归)。在这种情况下,我们正在优化

β^=argminβ (yXβ)2

OLS 是一种特殊情况,已证明存在全局最小值的解析表达式:

β^=(XX)1Xy

计算的进步使梯度下降成为可能,而 OLS 是从数学上推导出来的。

卡尔·弗里德里希·高斯于 1809 年在“Theoria motus corporum coelestium in sectionibus conicus solemambientium”中第一个正确描述了 OLS 。这些天人们试图预测矮行星谷神星的运动,而高斯是第一个使用 OLS 根据很少的数据计算它的运动的人。显然 1809 年还没有计算机,因此梯度下降中使用的昂贵的迭代计算是痛苦的。需要“简单”的方法来解决像 OLS 这样的问题,使用笔和纸激发的解决方案,比如使用 OLS的矩阵解决方案。(XX)1Xy=β^

所以梯度下降是“唯一”解决 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