线性模型这一章,我在西瓜书上画的重点比哪一章都多。不是因为它难,恰恰是因为它“简单”——简单到几乎所有后续模型的推导都能在这里找到影子。很多人刷《机器学习》(西瓜书)第三章时容易犯一个毛病:觉得线性回归嘛,不就是拟合一条直线,公式一看就懂,于是匆匆翻过去。等看到神经网络、支持向量机的时候才发现,梯度下降、正则化、损失函数这些概念的直觉,其实在第三章就已经埋下了。这篇文章就当是我自己重刷第三章的一份深度笔记,把线性模型的来龙去脉、推导细节和实操中容易踩的坑一次说清楚。
1. 从“线性组合”说起:线性模型到底在学什么
1.1 西瓜书里那个最朴素的公式,后面藏了多少信息
如果用一句话概括线性模型,那就是:用属性的线性组合来做预测。形式就是那个最早出场的公式:
text复制f(x) = w1*x1 + w2*x2 + ... + wd*xd + b
写成向量形式就是 f(x) = w^T x + b。
第一次看这个公式,很多人会觉得,这有什么好学的?不就是多元一次方程嘛。但真正往里想一层,你会发现事情没那么简单。这里面的 w 是有物理意义的——它表示的是“每个属性对最终结果的贡献权重”。w 是正的,说明这个属性和结果正相关;w 是负的,说明负相关;w 的绝对值越大,说明这个属性的影响越大。
这个特性直接决定了线性模型最大的优势:可解释性。在实际业务里,尤其是风控、医疗、司法这类场景,你不能扔给决策者一个黑盒模型说“这是深度神经网络算出来的概率,你信我就行”。你得能说清楚“这个用户为什么被拒贷”——因为他的负债率这个特征的权重是 0.35,已经超出了阈值。这就是线性模型在工业界至今仍有一席之地的根本原因。
同时,线性模型也是理解“模型”这个概念最好的起点。搞明白“训练”到底在干什么——其实就是找到一组参数 w 和 b,让预测值 f(x) 和真实值 y 之间的误差最小——后面看任何复杂模型,你都能往这个框架里套。
1.2 线性不是“简单”的代名词:可解释性才是它的底牌
很多人误以为线性模型只能处理线性可分的数据,这其实是个大误解。线性模型的“线性”是指:在参数 w 上是线性的。也就是说,模型输出是参数的线性函数。至于输入特征 x 怎么变换,完全可以非线性。
西瓜书后面讲支持向量机的时候会提到“核技巧”,本质就是把数据映射到高维空间再线性分割。但在线性模型这里,你不需要那么高级的工具,直接对特征做变换就行。比如你想让模型能拟合一个抛物线趋势,不一定非要上多项式回归,你完全可以在特征里人为加一个 x2 = x^2 的字段,然后模型还是用线性回归去拟合。这个时候预测函数 w1*x + w2*x^2 + b 在 x 上不是线性的,但你在代码里其实依然是在解一个线性回归问题。
这一点在面试里经常被拿出来问,也是一个常见误区。理解了这个,你就明白了为什么经典的机器学习流程里,特征工程这么重要——因为在模型能力有限的情况下,你的输入特征决定了模型效果的上限。线性模型就是那个最典型的例子:它处理不了复杂的非线性关系,但你可以通过特征工程帮它把非线性关系“翻译”成线性关系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 对数几率回归:披着回归外衣的分类器
2.1 为什么非得用对数几率函数,不能直接用阶跃函数
第三章第一个真正烧脑的地方,就是对数几率回归(Logistic Regression)。名字里带“回归”,干的却是分类的事。
它的引入逻辑非常自然:当你想要用线性模型做二分类时,最直接的思路是找一个“阈值函数”——输出大于某个值判为正类,小于某个值判为负类。最理想的是单位阶跃函数,也就是常说的符号函数 sign:
text复制y = 0, 若 z < 0; y = 0.5, 若 z = 0; y = 1, 若 z > 0
但问题来了:这个函数不可导。不可导意味着你没法用梯度下降这类基于导数的优化方法去求解参数 w 和 b。你可以说“那我不需要导数啊,我直接暴力枚举不就行了”——但高维参数空间里暴力枚举是不现实的。
于是需要找一个既能近似阶跃函数、又处处可导的替代品。这就是对数几率函数(logistic function)登场的原因:
text复制y = 1 / (1 + e^(-z))
它的图像是一
