2.3 回归与分类建模
机器学习最基本的两类题目:预测一个数,或者判断一个类别。

想一想
预测明天的气温,和预测明天会不会下雨,你觉得是同一类问题吗?
机器学习最基本的两类题目:预测一个数,或者判断一个类别。

预测明天的气温,和预测明天会不会下雨,你觉得是同一类问题吗?
两类问题,各自的定义与求解办法。

你能各举一个身边的回归问题和分类问题吗?
从输入特征学到连续型输出,预测的结果是一个数。

y = f(x; θ) + ε 的最后一项是噪声。它承认一件事:即使模型完全正确,预测也不可能和真实值分毫不差。房子除了面积和卧室数,还受装修、朝向、当天心情影响,这些都被打包进了 ε。
建模的目标不是让 ε 消失,而是把 f 学好,让剩下的 ε 尽量小且没有规律。
图上左边那张表就是最典型的回归数据:面积、卧室数是输入,价格是输出。你要学的是“面积每多一平米,价格大概涨多少”。
线性回归假设输出是输入特征的线性组合,也就是各项乘个系数再加起来。图上那条直线就是线性模型能画出的全部样子。当真实关系明显弯曲时,一条直线怎么摆都会系统性地偏,这叫系统性偏差。
用一条直线去拟合图上那些波浪形的点,你觉得误差会出现在哪些位置?
让预测值和真实值的总差距最小,这就是最小二乘。

①X 是特征矩阵,一行一个样本,一列一个特征。②θ 是待求的参数向量。③ŷ = Xθ 是模型输出,就是把每个特征乘上对应系数再加起来。
④L(θ) = (1/N)‖y − Xθ‖² 是关键。中间 y − Xθ 是“真实值减预测值”,也就是每个样本差了多少。加上平方是为了让正负误差都算作误差且不互相抵消。除以 N 是求平均。整句话就是平均每个样本差多少的平方,称为均方误差。
把它想成打靶。每一枪偏离靶心的距离取平方,再对所有枪求平均,就是这个 L。找最优参数,就是调整瞄准方式让这个平均值最小。
为什么取平方而不取绝对值:平方对大偏差惩罚更重,脱靶一米的代价远大于偏一厘米四次,这符合我们的直觉。
拟合出的直线是 ŷ = 2.00 + 1.33x,均方误差 1.46。2.00 是截距,x 为零时的基准值。1.33 是斜率,x 每增加 1,预测值增加 1.33。这两个数就是这个模型全部的参数。
如果有一个样本偏得特别离谱,它对均方误差的影响是大还是小?
从输入特征学到离散类别,预测的结果是一个标签。

pθ(yi | xi) 读作:在给定输入 x 的条件下,它属于类别 y 的概率是多少。竖线读作“在什么条件下”。
注意分类模型的输出不是一个类别,而是一组概率。是猫的概率 0.7,是狗的概率 0.2,是鹿的概率 0.1。最后报哪一个,是拿到概率之后再做的选择。
图上给了两个例子。左边手写数字识别,K 等于 10,因为有 0 到 9 十个类别。右边垃圾邮件分类,K 等于 2,只有正常和垃圾两类。
K 是几,取决于你想让机器分出多少类,这是做题之前人定的。
模型说“是猫的概率 0.51,是狗的概率 0.49”,你会怎么报答案?
两类任务的区别,集中在把分数变成概率的那一步。

模型先算出一个原始分数 g,这个数可正可负、可大可小,不能直接当概率用。
二分类用 Sigmoid:σ(g) = 1 / (1 + e−g)。g 很大时结果接近 1,很小时接近 0,g 为零时正好 0.5。多分类用 Softmax:先把每个分数取指数变成正数,再除以所有指数之和。除法保证了这一组数加起来正好是 1。
Sigmoid 像一个把任意长度压进 0 到 1 这把尺子的装置,长的压到接近 1,短的压到接近 0。
Softmax 像分蛋糕。三个类别各拿到一个分数,先都变成正数,再按比例分配同一个蛋糕。谁的分数高谁分得多,但总量恒定为一整个。
画的是决策边界,也就是模型把特征空间切开的那条线。二分类切成两块,多分类切成多块。模型学到的东西,从几何上看就是这些边界的位置和形状。
Softmax 出来的三个概率必然加起来等于 1,这是好事还是限制?
让模型给正确答案的概率尽量大,这就是极大似然估计。

似然函数是一长串连乘:把每个样本的正确类别概率乘在一起。问题在于概率都小于 1,几万个小于 1 的数相乘,结果会小到计算机存不下,这叫数值下溢。
取对数之后,连乘变成连加,数值就稳住了。而且对数是单调递增的,最大化原式和最大化对数式的答案完全一样。这就是页面上红字那句话的意思。
把最大化对数似然写成最小化它的负数,得到的式子在数学形式上完全等价于交叉熵。也就是说,“让正确答案的概率最大”和“让交叉熵损失最小”是同一件事的两种说法。
取对数这个技巧和算复利一样。要算连续三十年每年增长百分之几的总结果,直接连乘容易算错也难比较。取对数之后变成加法,一眼就能看出哪个方案更好。
对数把“乘”变成“加”,这是它在数学里最常被用到的一个本事。
估一下,再想想为什么连乘需要取对数。
回归用均方误差,分类用交叉熵,这是两条最常走的路。

回归任务预测连续数值,核心目标函数是均方误差,线性回归可以通过正规方程获得解析解。分类任务预测离散类别,本质是对条件概率分布的建模,目标函数用极大似然估计来求解。
均方误差衡量的是“差了多少”,适合数值。交叉熵衡量的是“概率给得对不对”,适合类别。用均方误差去做分类不是不能跑,而是它对“把猫判成狗”和“把猫判成鹿”给出同样的惩罚,这显然不合理。
预测一个学生的分数,和预测他能不能及格,你会分别用哪个损失函数?