《机器学习》摘抄兼笔记

死去的数理统计、排列组合知识正在攻击我.

绪论

“奥卡姆剃刀” (Occam’s razor) 是一种常用的、自然科学研究中最基本的原则,即“若有多个假设与观察一致,则选最简单的那个”.……然而,奥卡姆剃刀并非唯一可行的原则.

对于一个学习算法 La\mathfrak{L}_a,若它在某些问题上比学习算法 Lb\mathfrak{L}_b 好,则必然存在另一些问题,在那里 Lb\mathfrak{L}_bLa\mathfrak{L}_a 好.

“没有免费的午餐”定理,简称 NFL 定理。
如果不假设训练数据和测试数据之间有某种共同规律,那么学习是不可能的。
机器学习的关键不是找到“万能模型”,而是找到适合当前问题结构的模型、假设和归纳偏置。

模型评估与选择

我们希望得到泛化误差小的学习器.然而,我们……实际能做的是努力使经验误差 训练误差 最小化.

然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降.这种现象在机器学习中称为“过拟合” (overfitting).

……必须认识到,过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险.

评估方法

为此,需使用一个“测试集” 验证集 来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似.

测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过.

  • 留出法 (hold-out):

    D=ST,ST=.D = S \cup T, \quad S \cap T = \varnothing.

    常见做法是将大约 2/3 ~ 4/5 的样本用于训练,剩余样本用于测试.

  • 交叉验证法 (cross validation):

    D=D1Dk,DiDj=  (ij).D = D_1 \cup \dots \cup D_k, \quad D_i \cap D_j = \varnothing \; (i \neq j).

    每次用 k1k-1 个子集的并集作为训练集,余下的子集作为测试集.
    kk 最常用的取值是 1010,此时称为 10 折交叉验证.

    • 若令 k=Nk=N,则得到了一个特例:留一法 (Leave-One-Out, LOO).
      留一法不受随机样本划分方式的影响,结果往往比较准确,然而计算开销可能是难以忍受的.
  • 自助法 (bootstrapping):独立(有放回地)随机选择 NN 个样本作为训练集 DD',则有约 1/e 的样本 $D \setminus D’ $ 作为测试集.

    k 折交叉验证更适合评估模型、选择超参数;
    自助法更适合估计不确定性、训练集成模型.

性能度量

给定样例集 D={(x1,yi),,(xN,yN)}D = \{ (\bm{x}_1, y_i), \dots, (\bm{x}_N, y_N) \},其中 yiy_i 是示例 xi\bm{x}_i 的真实标记.

回归任务最常用的性能度量是“均方误差” (mean squared error)

E(f;D)=1Ni=1N(f(xi)yi)2,E(f; D) = \frac{1}{N} \sum_{i=1} ^ N \big(f(\bm{x}_i) - y_i\big) ^ 2,

更一般的,对于数据分布 D\mathcal{D} 和概率密度函数 p()p(\cdot),均方误差可描述为:

E(f;D)=xD(f(x)y)2p(x)dx.E(f; \mathcal{D}) = \int_{\bm{x} \sim \mathcal{D}} \big(f(\bm{x}) - y\big) ^ 2 \, p(\bm{x}) \, \mathrm{d}\bm{x}.

查准率和查全率

查准率 PP 与查全率 RR 分别定义为

P=TPTP+FP,R=TPTP+FN,\begin{aligned} P &= \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}}, \\ R &= \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}}, \end{aligned}

查准率和查全率是一对矛盾的度量.一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低.……通常只有在一些简单任务中,才可能使查全率和查准率都很高.

P-R 曲线反映的是,当你愿意找出更多正例样本时,查准率会怎样变化.

我认为书中给出的图 2.3 有科学性错误,主要问题出现在曲线两端。当 R=0R = 0 时,尚可以定义 P=1.0P = 1.0,即 (0,1.0)(0, 1.0);但当 R=1.0R = 1.0 时,PP 是无论如何不应等于 00 的(除非数据集中没有正例,但那样的话 PPRR 永远都是 00).

若一个学习器的 P-R 曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,例如图 2.3 中学习器 A 的性能优于学习器 C……

……BEP 平衡点 还是过于简化了些,更常用的是 F1F_1 度量:

F1=2PRP+R=2TP2TP+FP+FNF_1 = \frac{2 P R}{P + R} = \frac{2 \mathrm{TP}}{2\mathrm{TP} + \mathrm{FP} + \mathrm{FN}}

F1F_1PPRR 的调和平均数,因为调和平均数会“惩罚短板”.
FβF_\betaPPRR 的加权调和平均数,P:R=1:β2P : R = 1 : \beta ^ 2

ROC

ROC 曲线的纵轴是“真正例率”,横轴是“假正例率”,……两者分别定义为

TPR=TPTP+FN,FPR=FPTN+FP,\begin{aligned} \mathrm{TPR} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}},\\ \mathrm{FPR} = \frac{\mathrm{FP}}{\mathrm{TN} + \mathrm{FP}}, \end{aligned}

换句话说,真正例率是实际正例被猜对了多少,而假正例率是实际反例被猜错了多少.
对比来看,ROC 更关心模型整体的区分能力,用于正例反例同等重要的时候;而 P-R 适合主要关注正例,或者正反例样本不平衡的时候.

代价

为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价” (unequal cost).

在非均等代价下,ROC 曲线不能直接反映出学习器的期望总体代价,而“代价曲线” (cost curve) 则可达到该目的.

比较检验

假设检验

我们可使用“二项检验” (binomial test) 来对“ϵ0.3\epsilon \leq 0.3”(即“泛化错误率是否不大于 0.3”)这样的假设进行检验.

在很多时候……通过多次重复留出法或是交叉验证法等进行多次训练/测试,这样会得到多个测试错误率,此时可使用“t 检验”.

为什么这里的方差 σ2\sigma ^ 2 不是除以样本数 kk 而是 k1k-1?查找资料后发现,是因为用一组样本去估计总体方差时,要做无偏修正.用样本均值 xˉ\bar{x} 得到的离差平方和,通常小于用总体均值 μ\mu 得到的离差平方和,因此方差总是略小.至于为什么是减去 1,是因为 xˉ\bar{x}(书上写 μ\mu 但其实应该是 xˉ\bar{x})是由 kk 个样本得出的,所以只要前 k1k-1 个偏差确定了,那么最后一个就被迫确定,也就是说自由度是 k1k-1