线性回归使用什么算法?


42

我通常会听说“普通最小二乘法”。那是用于线性回归的最广泛使用的算法吗?是否有其他理由使用其他理由?


@hxd,除非设计矩阵中有任何特殊结构,否则所有都是O(mn2)算法,仅在常数因子上有所不同。分解方法是从数值线性代数的传统继承的好习惯。
JM不是统计学家

@hxd,这就是为什么我的答案被定制为所涉及算法的说明的原因。如果您有此主题未涵盖的问题,请考虑提出一个新问题。
JM不是统计学家

Answers:


32

关于标题中的问题,有关使用的算法是什么:

从线性代数的角度来看,线性回归算法是一种求解线性系统Ax=b且方程组多于未知数的方法。在大多数情况下,无法解决此问题。这是因为向量b不属于A的列空间C(A)

best straight linee=Axb b Ç e2bC(A)

将向量投影(正交)到的列空间中的最近点,可以得到向量,它以最小的误差来求解系统(其分量位于最佳直线上)。A b *bAb

ATAx^=ATbx^=(ATA)1ATb

投影向量由下式给出:b

b=Ax^=A(ATA)1ATb

也许不是唯一地使用最小二乘法,因为这会squaring 过度补偿离群值。

让我在R中给出一个简单的示例,该示例使用以下算法解决了回归问题:

library(fBasics)

reg.data <- read.table(textConnection("
   b      x
  12      0
  10      1
   8      2
  11      3
   6      4
   7      5
   2      6
   3      7
   3      8 "), header = T)

attach(reg.data)

A <- model.matrix(b~x)

# intercept and slope
inv(t(A) %*% A) %*% t(A) %*% b

# fitted values - the projected vector b in the C(A)
A %*% inv(t(A) %*%A ) %*% t(A) %*% b

# The projection is easier if the orthogonal matrix Q is used, 
# because t(Q)%*%Q = I
Q <- qr.Q(qr(A))
R <- qr.R(qr(A))

# intercept and slope 
best.line <- inv(R) %*% t(Q) %*% b

# fitted values 
Q %*% t(Q) %*% b

plot(x,b,pch=16)
abline(best.line[1],best.line[2])

我得到一个错误could not find inv吗?
hhh


5
当fBasics只是Solve的代名词时,是否有理由使用fBasics中的inv?如果不需要不必要的外部答案,不是更好的答案吗?
戴森

@George我喜欢一个明确的答案,但是,我认为最初的问题是询问算法,QR只是其中之一。LU,SVD,Cholesky分解如何?另外,在R中,lmQR 的方法是QR,这是有原因的,您能解释一下原因吗?
Haitao Du

@GeorgeDontas注意,可能是不可逆。如该答案所述,一种解决方法是从列中删除其他列的线性组合。一个ATAA
奥伦·米尔曼

70

要回答问题的字母,“普通最小二乘法”不是一种算法;相反,它是计算线性代数中的一种问题,其中线性回归就是一个例子。通常,其中一个具有数据和一个临时函数(“模型”),可以将数据拟合为。该被称为“基础功能”,可以从任何单项到三角函数(如,)和指数函数()。这里的“线性回归”中的“线性”一词不是指基函数,{(x1,y1),,(xm,ym)}f(x)=c1f1(x)++cnfn(x)fj(x)xjsin(jx)cos(jx)exp(jx)cj,因为采用模型相对于任何的偏导数,得到乘以的因子;即。cjcjfj(x)

现在,它有一个矩形矩阵(“设计矩阵”)(通常)具有比列多的行,并且每个条目的形式为,为行索引,为列索引。现在,OLS的任务是查找向量使数量(以矩阵符号;在这里,通常称为“响应向量”)。m×nAfj(xi)ijc=(c1cn)j=1m(yjf(xj))2Acy2y=(y1ym)

实际上,至少有三种方法用于计算最小二乘解:法线方程,QR分解和奇异值分解。简而言之,它们是将矩阵转换为矩阵的乘积的方法,可以容易地对其进行求解以求解向量。Ac

乔治在回答中已经展示了正规方程的方法。只是解决了线性方程组n×n

AAc=Ay

用于。由于矩阵是对称正(半)定的事实,因此通常使用的方法是Cholesky分解,它分解了的形式为,其中为下三角矩阵。尽管能够将设计矩阵压缩成一个(通常)更小的 ×矩阵的优点,但是这种方法的问题是此操作易于丢失有效数字(这有一些不足之处。用设计矩阵的“条件编号”来完成)。cAAAAGGGm×nn×n

更好的方法是QR分解,它可以直接与设计矩阵配合使用。它会将为,其中是正交矩阵(将此类矩阵与其转置相乘得到一个单位矩阵),并且是上三角。随后被计算为。由于某些原因,我不愿讨论(只需看一下像这样的体面数值线性代数文本),它就具有比正态方程方法更好的数值属性。AA=QRQRcR1Qy

半正规方程法是使用QR分解的一种变化。简而言之,如果具有分解,则要求解的线性系统的形式为A=QR

RRc=Ay

有效地,一种方法是使用QR分解以这种方式形成的Cholesky三角形。这对于稀疏并且(或其分解版本)的显式存储和/或形成是不需要的或不切实际的情况非常有用。AAAQ

最后,解决OLS的最昂贵但最安全的方法是奇异值分解(SVD)。这次,被分解为,其中和都是正交的和 = û Σ Vù V ΣAA=UΣVUVΣ是对角矩阵,其对角线条目称为“奇异值”。这种分解的力量在于奇异值赋予您的诊断能力,即如果您看到一个或多个微小奇异值,那么您很可能选择了一个不完全独立的基础集,因此有必要对您的模型。(实际上,前面提到的“条件数”与最大奇异值与最小奇异值的比有关;如果最小奇异值为“微小”,则该比当然会变得很大(矩阵因此是病态的)。 )

这只是这三种算法的示意图;任何有关计算统计和数值线性代数的好书都应该能够为您提供更多相关的详细信息。


3
很好的解释!
Mike Spivey

R^{-1} Q^T y如果A不是平方,您如何计算?您是否在R中删除零行?
2013年

1
@bhan,我假设QR分解是“经济”(或“薄”)变体,其中是正方形,具有与设计矩阵相同的尺寸。您需要做的事情:查找“完整QR”和“薄QR”之间的区别。QRQ
JM不是统计学家

@JM对“关于计算统计和数值线性代数的好书”有什么建议吗?真的想了解更多。
Haitao Du

1
@hxd,让我烦恼不已:Monahan用于计算统计,而Golub / van Loan用于数字线性代数。
JM不是统计学家


4

在定义和术语之间容易混淆。这两个术语都可以使用,有时可以互换使用。快速浏览Wikipedia应该会有所帮助:

普通最小二乘(OLS)是用于拟合线性回归模型的方法。由于OLS方法具有明显的一致性和效率(在补充假设下),因此它是主要方法。请参阅文章以获取更多线索。


是的,这就是为什么我认为OLS是线性回归中使用的“算法” ...
Belmont,2010年

3
普通最小二乘法是一个估计量。有多种算法可用于计算估算值:通常使用某种正交矩阵分解,例如QR。参见en.wikipedia.org/wiki/…–
西蒙·伯恩

4

我倾向于将“最小二乘法”作为定义最佳拟合回归线(即使“平方”残差之和为“最小”之和)和“算法”作为定义步骤的标准。确定满足该标准的回归系数。这种区别表明,可能有满足相同标准的不同算法。

我很想知道其他人是否做出了这种区分,以及他们使用了什么术语。


通过算法,我大致是指用于拟合直线以模拟分布均值的软件实现。
Belmont 2010年

3

一本旧书是我反复发现的一本书,

Lawson,CL和Hanson,RJ 解决最小二乘问题,Prentice-Hall,1974年。

它包含先前答案已提及的某些算法的详细且易读的讨论。您可能要看看它。


1
如果您读过这本旧书,您还应该研究ÅkeBjörck的《最小二乘问题数值方法》,其中的内容在Lawson / Hanson中没有讨论。可以从Netlib获得 Lawson / Hanson书中包含的例程。
JM不是统计学家
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.