第 3 章 · 第 3 讲 / 共 7 讲

多元线性回归与广义线性模型

把 b 藏进 w,用一次矩阵乘法算完所有预测;然后给线性模型装一个「输出翻译器」。

约 20 分钟 1 个自测 教材 §3.2 后半

这一讲你会拿到什么

能看懂设计矩阵 X 的形状是 m×(d+1)、能写出 ŵ*=(XTX)−1XTy;能说出「不满秩」为什么在现实里经常发生、正则化怎么救;能解释联系函数 g 的作用,并知道它是下一讲的接口。

第 2 讲只处理了一个属性。现实里样本有 d 个属性,但好消息是:推导几乎不用重写,只要把记号换成矩阵。这一讲还顺手解决一个麻烦——那个到处多出来的 b。

更一般的情况:有 d 个属性多元线性回归与矩阵形式

现在样本是一个向量了,模型变成:

f(xi) = wTxi + b,使得 f(xi) ≃ yi 式 (3.9)

这叫多元线性回归(multivariate linear regression)。思路和一元完全一样,只是记号要升一级。

关键技巧:把 b 藏进 w 里

每处理一次 b 都很啰嗦。有个惯用招式:给每个样本人为补一个恒等于 1 的属性,同时给 w 补上 b 这一项。于是:

ŵ = (w; b),   x̂i = (xi; 1)   ⟹   wTxi + b = ŵTx̂i

验证一下:把最后那个乘 1 的项展开,就是 … + b·1,正好是 b。所以b 就这样被"吸收"进去了,之后不用单独管它。代价是参数从 d 个变成 d+1 个。

把整个数据集写成矩阵 X,大小是 m × (d+1)——每一行是一个样本,前 d 列是 d 个属性,最后一列全是 1:

表 3-B:设计矩阵 X(m 个样本 × (d+1) 列)
属性 1属性 2…属性 d补的 1
样本 1x11x12…x1d1
样本 2x21x22…x2d1
⋮⋮⋮⋱⋮⋮
样本 mxm1xm2…xmd1
X m 行 = m 个样本 最后一列全是 1 d+1 列 × ŵ (w; b) = ŷ m 个预测值 行数必须对上: m 个样本 → m 个预测 列数就是参数的个数 (d 个权重 + 1 个偏置) ŵ 一口气把 b 也包含了, 所以不用单独处理它。
把数据摆成矩阵之后,整个模型的预测就是一次矩阵乘法。注意最右边那列粉色的 1——它就是"把 b 吸收进 w"的具体做法:那一列乘上 b 之后,正好给每个样本都加上一个 b。看懂了这张形状图,式 (3.10) 到 (3.13) 的推导就只是"照抄"了。

再把所有答案摞成一个列向量 y = (y1; y2; …; ym)。于是目标变成:

ŵ* = arg minŵ (y − Xŵ)T(y − Xŵ) 式 (3.10)

人话:Xŵ 是所有样本的预测值(一列),y 是真实值(一列),两者相减就是每个样本的误差(一列)。(…)T(…) 就是把这一列误差各自平方再求和——和式 (3.4) 的平方和是一回事,只是写成矩阵形式。

对 ŵ 求导(这一步书里也是直接给结果):

∂Eŵ / ∂ŵ = 2XT(Xŵ − y) 式 (3.11)

令它为零:XTXŵ = XTy。两边同时左乘 (XTX)-1,得到那个必须记住的公式:

ŵ* = (XTX)-1XTy 式 (3.12)

最后把 ŵ* 拆回 w 和 b,模型就学完了:

f(x̂i) = x̂iT(XTX)-1XTy 式 (3.13)
式 (3.12) 到底在说什么

别把它当咒语背。它的形状很好认:这就是"一元线性回归求斜率"的矩阵版。

回看一元的结论 w = 协方差 ÷ 方差。写成矩阵语言,"方差"对应 XTX(特征之间的散开程度),"协方差"对应 XTy(特征和答案之间的关系)。所以 (XTX)-1 就是在"除掉尺度",XTy 就是在"量关系"。除一下,就是系数。

但是:那个逆矩阵不一定存在

式 (3.12) 里有一步"求逆"。求逆的前提是 XTX 满秩(full-rank)或正定(positive definite)。书上接着就说了:现实任务中它往往不满秩。

什么时候不满秩?两种典型情况:

后果是什么?会解出无穷多组 ŵ,它们让均方误差同样小(都等于最小值)。就像方程 x + y = 1 有无数个解一样,条件不够,定不下来唯一解。

这时候要选哪一个?原书说:"将由学习算法的归纳偏好决定,常见的做法是引入正则化项"。

把这两句话展开

"归纳偏好"是第 1.4 节的概念,在这里的意思是:面对多个同样好的答案,算法得有自己的偏好才能挑出一个。比如"偏好系数尽量小"或者"偏好稀疏(大部分系数是 0)"。

"正则化"就是把这个偏好写进目标函数里。最常用的一招叫岭回归(第 6、11 章会正式讲),做法是给 XTX 的对角线加一个小正数 λ:

ŵ* = (XTX + λI)-1XTy

加了这个 λ 之后,矩阵一定可逆了(所以叫"岭")。而且 λ 会让解整体变小、更稳。你不需要现在推它,只要知道"不满秩 → 加个小尾巴让它可逆"这个套路。

最后一步:从"线性回归"到"广义线性模型"

到这里 y = wTx + b 已经能拟合了。但书在这里拐了个弯,问了一个很好的问题:

"可否令模型预测值逼近 y 的衍生物呢?"

举个场景:某个量是指数增长的(人口、复利、细菌繁殖)。它长得像 ex 那种曲线,用一条直线去拟合,怎么都不像。但如果把它取对数,指数就变成了直线。

于是不拟合 y,改拟合 ln y:

ln y = wTx + b 式 (3.14)
y 与 x:指数增长 x y 真实关系 红虚线:直线怎么都贴不上, 中间会凹下去一块 两边取 ln ln y 与 x:一条直线 x ln y 现在线性模型能干了
左边是指数关系:你用任何直线去拟合,中间都会凹下去一块。右边是同一个数据取了对数之后的模样——它变成了直线。所以"对数线性回归"干的事是:不拟合 y,改拟合 ln y,学完之后再取回指数。形式上仍然是一次线性回归,但输出和输入已经不是直线关系了。

这叫对数线性回归(log-linear regression)。它想让 ewTx+b 去逼近 y——注意,是对 e(…) 逼近 y,而不是直线逼近 y。

这一步的妙处

形式上,式 (3.14) 还是个线性回归(左边是 ln y,右边是 w 的线性组合,参数仍然只以一次方出现)。但实质上,它已经在做"输入空间到输出空间的非线性映射"了:x 变一点,y 的变化量不是常数,而是跟着 y 本身在放大。

书里那个词用得很准:这里的对数函数起到了"将线性回归模型的预测值与真实标记联系起来"的作用。记住这句话,下一句就顺理成章了。

把这个"联系"抽象出来:取一个单调可微的函数 g(·),令

y = g-1(wTx + b) 式 (3.15)

这就叫广义线性模型(generalized linear model),g(·) 叫联系函数(link function)。

考点 / 请记牢

式 (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。

下一讲:对数几率回归。我们会用这一讲最后那个「联系函数」接口,把回归模型硬生生改造成一个分类器。

卡住了就直接问我 —— 把没看懂的那一句原样抄给我,我单独展开讲,不用客气。