第 3 章 · 第 3 讲 / 共 7 讲
多元线性回归与广义线性模型
把 b 藏进 w,用一次矩阵乘法算完所有预测;然后给线性模型装一个「输出翻译器」。
能看懂设计矩阵 X 的形状是 m×(d+1)、能写出 ŵ*=(XTX)−1XTy;能说出「不满秩」为什么在现实里经常发生、正则化怎么救;能解释联系函数 g 的作用,并知道它是下一讲的接口。
第 2 讲只处理了一个属性。现实里样本有 d 个属性,但好消息是:推导几乎不用重写,只要把记号换成矩阵。这一讲还顺手解决一个麻烦——那个到处多出来的 b。
更一般的情况:有 d 个属性多元线性回归与矩阵形式
现在样本是一个向量了,模型变成:
这叫多元线性回归(multivariate linear regression)。思路和一元完全一样,只是记号要升一级。
关键技巧:把 b 藏进 w 里
每处理一次 b 都很啰嗦。有个惯用招式:给每个样本人为补一个恒等于 1 的属性,同时给 w 补上 b 这一项。于是:
验证一下:把最后那个乘 1 的项展开,就是 … + b·1,正好是 b。所以b 就这样被"吸收"进去了,之后不用单独管它。代价是参数从 d 个变成 d+1 个。
把整个数据集写成矩阵 X,大小是 m × (d+1)——每一行是一个样本,前 d 列是 d 个属性,最后一列全是 1:
| 属性 1 | 属性 2 | … | 属性 d | 补的 1 | |
|---|---|---|---|---|---|
| 样本 1 | x11 | x12 | … | x1d | 1 |
| 样本 2 | x21 | x22 | … | x2d | 1 |
| ⋮ | ⋮ | ⋮ | ⋱ | ⋮ | ⋮ |
| 样本 m | xm1 | xm2 | … | xmd | 1 |
再把所有答案摞成一个列向量 y = (y1; y2; …; ym)。于是目标变成:
人话:Xŵ 是所有样本的预测值(一列),y 是真实值(一列),两者相减就是每个样本的误差(一列)。(…)T(…) 就是把这一列误差各自平方再求和——和式 (3.4) 的平方和是一回事,只是写成矩阵形式。
对 ŵ 求导(这一步书里也是直接给结果):
令它为零:XTXŵ = XTy。两边同时左乘 (XTX)-1,得到那个必须记住的公式:
最后把 ŵ* 拆回 w 和 b,模型就学完了:
别把它当咒语背。它的形状很好认:这就是"一元线性回归求斜率"的矩阵版。
回看一元的结论 w = 协方差 ÷ 方差。写成矩阵语言,"方差"对应 XTX(特征之间的散开程度),"协方差"对应 XTy(特征和答案之间的关系)。所以 (XTX)-1 就是在"除掉尺度",XTy 就是在"量关系"。除一下,就是系数。
但是:那个逆矩阵不一定存在
式 (3.12) 里有一步"求逆"。求逆的前提是 XTX 满秩(full-rank)或正定(positive definite)。书上接着就说了:现实任务中它往往不满秩。
什么时候不满秩?两种典型情况:
- 属性比样本多(d+1 > m)。书里的例子很生动:生物信息学的基因芯片数据,动辄上万个属性(基因),但样本只有几十上百个。
- 属性之间有线性关系。比如你同时把"身高(厘米)"和"身高(米)"放进模型——信息完全重复,矩阵必然不满秩。
后果是什么?会解出无穷多组 ŵ,它们让均方误差同样小(都等于最小值)。就像方程 x + y = 1 有无数个解一样,条件不够,定不下来唯一解。
这时候要选哪一个?原书说:"将由学习算法的归纳偏好决定,常见的做法是引入正则化项"。
"归纳偏好"是第 1.4 节的概念,在这里的意思是:面对多个同样好的答案,算法得有自己的偏好才能挑出一个。比如"偏好系数尽量小"或者"偏好稀疏(大部分系数是 0)"。
"正则化"就是把这个偏好写进目标函数里。最常用的一招叫岭回归(第 6、11 章会正式讲),做法是给 XTX 的对角线加一个小正数 λ:
加了这个 λ 之后,矩阵一定可逆了(所以叫"岭")。而且 λ 会让解整体变小、更稳。你不需要现在推它,只要知道"不满秩 → 加个小尾巴让它可逆"这个套路。
最后一步:从"线性回归"到"广义线性模型"
到这里 y = wTx + b 已经能拟合了。但书在这里拐了个弯,问了一个很好的问题:
"可否令模型预测值逼近 y 的衍生物呢?"
举个场景:某个量是指数增长的(人口、复利、细菌繁殖)。它长得像 ex 那种曲线,用一条直线去拟合,怎么都不像。但如果把它取对数,指数就变成了直线。
于是不拟合 y,改拟合 ln y:
这叫对数线性回归(log-linear regression)。它想让 ewTx+b 去逼近 y——注意,是对 e(…) 逼近 y,而不是直线逼近 y。
形式上,式 (3.14) 还是个线性回归(左边是 ln y,右边是 w 的线性组合,参数仍然只以一次方出现)。但实质上,它已经在做"输入空间到输出空间的非线性映射"了:x 变一点,y 的变化量不是常数,而是跟着 y 本身在放大。
书里那个词用得很准:这里的对数函数起到了"将线性回归模型的预测值与真实标记联系起来"的作用。记住这句话,下一句就顺理成章了。
把这个"联系"抽象出来:取一个单调可微的函数 g(·),令
这就叫广义线性模型(generalized linear model),g(·) 叫联系函数(link function)。
- 为什么 g 要单调?因为要能反解回去(单调才有一一对应,才有反函数 g-1),而且要保持"顺序不乱"。
- 为什么要可微?因为要能求导、能用优化算法(下一节全靠这个)。
- 对照一下:对数线性回归就是 g(·) = ln(·) 的特例。因为 ln y = wTx+b 两边取 exp 就是 y = ewTx+b,即 y = g-1(wTx+b)。
式 (3.15) 是整章的枢纽。下一节 3.3 的全部内容,就是"给分类任务挑一个合适的 g"。所以如果只记一句话:3.3 是 3.2 的特例,只不过 g 换成了 sigmoid。
另外书里提了一句"广义线性模型的参数估计常通过加权最小二乘法或极大似然法进行"——这句是伏笔,3.3 用的正是极大似然法。
随堂自测 · 3.2
多元线性回归的闭式解 ŵ* = (XTX)−1XTy,在什么情况下会失效?
求逆要求 XTX 满秩。属性数大于样本数(列多于行)、或属性之间存在线性关系时,它就不满秩,于是有无穷多组解都能让误差同样小。y 有负值完全没问题(回归本来就预测实数);d>1 是常态;而均方误差始终是凸的——这正是它能用求导置零求解的原因。
本讲小结
- 给每个样本补一个恒为 1 的属性,b 就被吸收进 ŵ 里,之后不用单独管它。
- 闭式解 ŵ*=(XTX)−1XTy,本质还是「协方差 ÷ 方差」,只是变成了矩阵版。
- 属性数 > 样本数或属性间线性相关都会让 XTX 不满秩 → 无穷多解 → 用正则化挑一个。
- 广义线性模型 y=g−1(wTx+b):3.3 节就是给它挑一个 g。
下一讲:对数几率回归。我们会用这一讲最后那个「联系函数」接口,把回归模型硬生生改造成一个分类器。
卡住了就直接问我 —— 把没看懂的那一句原样抄给我,我单独展开讲,不用客气。