线性代数学习笔记-利用最小二乘法做线性回归

背景知识

在学习线性代数的时候,我们都会先从线性方程组入手。求解一个线性方程组是否存在解,如果存在解,那么有多少解,比方说求解下面这个方程组

x_1 - 2x_2 = -1
-x1 - 2x_2 = 3

先别急着掏出纸和笔进行运算。在线性代数中, 这类线性方程组更常见的表述方式为
Ax = b
其中,A是系数矩阵,x和b都是向量。在R语言中,这个方程组可以通过solve函数求解

A <- matrix(c(1,-1,-2,-2), ncol = 2)
b <- c(-1,3)
solve(A,b) 
# -2.0 -0.5

如果方程组有解或者无数解,那么我们称方程组是相容的,反之则是不相容

对于不相容的方程,我们无法求解出一个x使得等式成立,也就是下图的Ax和b不在一个平面上。因此只能找到一个x,让Ax尽可能b和接近,即求解一个x使得||Ax-b||最小。也就是||Ax-b||^2最小, 也就是(Ax-b)\cdot(Ax-b)最小, 这也就是术语最小二乘法( least squares method, 也称之为最小平方法 )的来源。

几何意义

那么如何求解出x呢?跳过教科书的证明部分,这里直接提供定理,用于判定在什么条件下,方程Ax=b的最小二乘解是唯一的。

定理

如果已知A的列是线性无关,那么对于方程Ax=b,取A=QR, 那么唯一的最小二乘解为\hat x = R^{-1}Q^Tb,

A=QR称之为QR分解,也就是将 m \times n 矩阵A分解为两个矩阵相乘的形式。其中Q是 m \times n 矩阵,其列形成Col\ A的一个标准正交基,R是一个 n \times n 上三角可逆矩阵且在对角线元素为正数。

最小二乘直线

那么最小二乘有什么用呢?为了方便讨论实际的应用问题,我们用科学和工程数据中更常见的统计分析记号X\beta=y 来替代Ax=b. 其中X设计矩阵\beta参数向量y观测向量

我们都知道身高和体重存在一定关系,但不是完美对应(数据集来自于R语言的women)

身高-体重关系

我们可以找到一条曲线去完美拟合已有的数据,但通常而言越复杂的模型就越容易出现过拟合的情况,不具有普适性,最好是找到一个简单模型,能对当前的数据做一个拟合,并且能预测未来。

两个变量最简单的关系就是线性方程y=\beta_0 +\beta_1 x。我们希望能够确定 \beta_0\beta_1使得预测值和观测值尽可能的接近,也就是让直线和数据尽可能的接近,最常用的度量方法就是余差平方之和最小。

直线拟合

最小二乘直线y=\beta_0 +\beta_1 x是余差平方之和最小的,这条直线也被称之为y对x的回归直线。直线的系数 \beta_0\beta_1称为线性回归系数。

如果数据点都落在直线上,那么参数 \beta_0\beta_1满足如下方程,那么

线性方程组

但是当数据点不在直线上时,这就意味着 X\beta=y 没有解,那么问题其实是Ax=b的最小二乘问题,这两者仅仅记法不同。并且由于X的列线性无关,那么唯一的最小二乘解为\hat \beta = R^{-1}Q^Ty, 取X=QR

接下来,我们就可以通过R语言的矩阵函数计算\beta

# 加载数据
data("women")

# 设置X和Y
X <- cbind(rep(1,length(women$height)), women$height)
y <- women$weight

# QR分解
qr <- qr(X)
Q <- qr.Q(qr)
R <- qr.R(qr) 
R.inv <- solve(R) # 求逆矩阵

# 计算
beta <- R.inv %*% t(Q) %*% y

根据求解结果,系数分别是-87.52和3.45, 我们来绘图展示下

plot(women$height, women$weight,
     xlab = "height", ylab="weigth")
x <- 58:72
y <- 3.45 * x - 87.52
lines(x=x,y=y)
weight-vs-height

关于线性回归,R语言提供了lm函数,之前只是无脑调用,现在我把它的黑匣子打开了,它和我们之前做的事情类似,都有一步QR分解,只不过调用了不同的底层函数

# lm
z <- .Call(C_Cdqrls, ...
# qr
if(LAPACK)
     return(structure(.Internal(La_qr(x)), useLAPACK = TRUE, class = "qr"))
...           
res <- .Fortran(.F_dqrdc2,...

lm的输出信息有很多,比如说残差,系数的显著性水平,这些可以用summary.lm查看。

之前看「R语言实战」的回归章节时,总是不理解,看完就记住了几个函数而已。现在在线性代数理论基础上对这个部分有所理解了。

参考资料

如果对线性代数的最小二乘理论感兴趣,推荐阅读「线性代数及其应用」,戴维,原书第五版,第六章。

关于线性回归的R语言实现,推荐阅读「R语言实战」,第二版,第8章。

此外,维基百科的 最小二乘法页面也提供了比较好的解释。


版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

扫码即刻交流
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容