机器学习:笔记 - Machine Learning Note
2. 模型评估与选择
2.1 经验误差与过拟合
在m个样本中有a个样本分类错误
错误率(Error rate):
在训练集上的误差称
训练误差(training error)或经验误差(empirical error)
在新样本上的误差称泛化误差(generalization error)精度(Accuracy):
过拟合(Overfitting): 模型在训练数据上表现很好,但在测试数据上表现糟糕,这通常是因为模型过于复杂,以至于“记住”了训练数据的噪声.
过拟合(Overfitting): 模型在训练数据上表现很好,但在测试数据上表现糟糕,这通常是因为模型过于复杂,以至于“记住”了训练数据的噪声.
与NP的关系:
若可以彻底避免过拟合,则通过经验误差最小化就可以获最优解,这就意味着我们构造性的证明了P = NP
2.2 评估方法
2.2.1 留出法
留出法(Hold-out Method) 留出法通常将数据集分为训练集(S)和测试集(T),有时还可以进一步将训练集分为训练集和验证集。在使用留出法时, 一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果
注意:
- 训练/测试集的划分要尽可能
保持数据分布的一致性, 避免因数据划分过程引入额外的偏差而对最终结果产生影响, 例如在分类任务中至少要保持样本的类别比例相似- 若令训练集S包含绝大多数样本, 则训练出的模型可能更接近于用D训练出的模型, 但由于T比较小,评估结果可能不够稳定准确; 若令测试集T多包含一些样本, 则训练集S与D差别更大了, 被评估的模型与用D训练出的模型相比可较大差别, 从而降低了评估结果的保真(fidelity)
2.2.2 交叉验证法
交叉验证法(cross validation/k-fold cross validation)先将数据集D划分为k个大小相似的互斥自己.
- 每个子集 都尽可能保持数据分布的一致性, 即从D中通过分层采样得到.
- 每次用k-1个子集的并集作为训练集, 余下的那个子集作为测试集
- 这样就可获得k组训练/测试集, 从而可进行k次训练和测试, 最终返回的是这k个测试结果的均值.

缺点: 测试样本数量大时计算开销极大
k最常用取值是10, 此时成为"10折交叉验证"
数据集D划分为k个子集同样存在多种划分方式, 为减小因样本划分不同而引入的差别, k折交叉验证通常要随机使用不同的划分重复p次, 最终的评估结果是这p次k折交叉验证结果的均值, 例如常见的有"10次10折交叉验证"
2.2.3 自助法
自助法(bootstrapping)在给定包含m个样本的数据集, 对其采样产生数据集D':
- 每次随即从D中挑选一个样本, 将其拷贝放入D
- 再将该样本放回初始数据集D中,使其仍有机会被再次采样
- 重复m次后,会获得包含m个样本的数据集D' > 样本适中不被采到的概率为 , 取极限为 0.368
- 约有36.8%样本未出现在采样数据集D'中, 这时用D'作为训练集, D\D'用作测试集 > 这样的测试结果成为"包外估计"(out-of-bag estimate)
优点: 在数据集较小时, 难以有效的划分训练/测试集时很有用; 能从初始数据集中产生多个不同的训练集, 对集成学习有好处
缺点: 改变了初始数据集的分布, 可能引入估计偏差
2.2.4 调参和最终模型
在进行模型估计和选择时, 除了要对使用学习算法进行选择, 还需对算法参数进行设定, 这就是通常所说的"参数调节"/"调参"(parameter tuning)
2.3 性能度量
对学习器的泛化性能进行评估, 不仅需要有效可行的实验估计方法, 还需要有衡量模型泛化能力的评价标准,即性能度量(performance measure)
在预测任务中, 给定样例集 , 其中 是实例 的真实标记. 要估计学习器 的性能, 就要把学习器预测结果 与真实标记 进行比较
均方误差(mean squared error):
对于数据分布$D$和概率密度函数$p(·)$,均方误差可描述为:
2.3.1 错误率与精度
错误率定义为:
精度定义为:
更一般的,对于数据分布$D$和概率密度函数$p(·)$, 错误率和精度可分别表示为:
2.3.2 查准率、查全率与F1
| 真实情况 | 预测结果: 正例 | 预测结果: 反例 |
|---|---|---|
| 正例 | TP | FN |
| 反例 | FP | TN |
查准率(precision):
查全率(recall):

平衡点(Break-Even Point)是"查准率=查全率"时的取值。更常用的是F1度量:
能够表达对查准率/查全率的不同的偏好, 定义为:
时查全率有更大影响, 时查准率有更大影响
多次训练:
现在个混淆矩阵上分别计算出查准率和查全率, 记为 , 再计算平均值, 这样就得到"宏查准率"(macro-P)、"宏查全率"(macro-R), 以及相应的"宏F1"(macro-F1):
也可先将各混淆矩阵的对应元素进行平均, 得到 的平均值,分别记得 , 再基于这些平均值算出"微查准率"(micro-P)、"微查全率"(micro-R)和"微F1"(micro-F1):
2.3.3 ROC与AUC
ROC全称"受试者工作特征"(Receiver Operating Characteristic)曲线。ROC曲线的纵轴时"真正例率"(True Positive Rate, 简称TPR), 横轴是"假正例率"(Flase Positive Rate, 简称FPR), 定义为:

与P-R图类似,若一个学习器的ROC曲线被另一个学习器的曲线完全包裹, 则可以断言后者的性能优于前者.若两个学习器的ROC曲线发生交叉, 则难以一般性地断言两者孰优孰劣. 此时应比较ROC曲线下的面积, 即AUC(Area Under ROC Curve), 可估算为
AUC考虑的时样本预测的排序质量, 因此它与排序误差有紧密联系. 给定 个正例和 个反例, 令 和 分别表示正反例集合, 则排序损失(loss)定义为:

2.3.4 代价敏感错误率与代价曲线
为权衡不同类型错误所造成的不同损失, 可谓错误赋予"非均等代价"(unequal cost)
| 真实类别 | 预测类别: 第0类 | 预测类别: 第1类 |
|---|---|---|
| 第0类 | 0 | |
| 第1类 | 0 |
在非均等代价下,我们所希望的不再是简单的最小化错误次数, 而是希望最小化"总体代价"(total cost). "代价敏感"(cost-sensitive)错误率为:
在非均等代价下, ROC曲线不能直接反映出学习器的期望总体代价, 而"代价曲线"(cost curve)则可达到该目的. 代价曲线图的横轴时取值为[0,1]的正例概率代价:
其中 是样例为正例的的概率, 纵轴是取值为[0,1]的归一化代价

2.4 比较检验
2.4.1 假设验证(hypothesis test)
在包含m个样本的测试集上, 泛化错误率为 的学习器被测得测试错误率为 的概率:

的常用取值有0.05, 0.1
这里 反映了结论的"置信度"(confidence),直观来看, 即非阴影部分的面积
通过多次重复留出法或是交叉验证法等进行多次训练/测试, 这样会得到多个测试错误率, 此时可使用"t检验"(t-test). 假定我们得到了一个k个测试错误率, , 则平均测试错误率 和方差 为
考虑到这k个测试错误率可看作泛化错误率$$\epsilon_0$$的独立采样, 则变量

| k = 2 | k = 5 | k = 10 | k = 20 | k = 30 | |
|---|---|---|---|---|---|
| 0.05 | 12.706 | 2.776 | 2.262 | 2.093 | 2.045 |
| 0.10 | 6.314 | 2.132 | 1.833 | 1.729 | 1.699 |
2.4.2 交叉验证t检验
对两个学习器A和B, 若我们使用k折交叉验证法得到的测试错误率分别为 和 , 其中 和 是在相同的第i折训练/测试集上得到的结果, 则可用k折交叉验证"成对t检验"(paired t-tests)来进行比较检验
这里的基本思想是若两个学习器的性能相同, 则它们使用相同的训练/测试集得到的测试错误率应相同, 即
具体来说, 对k折交叉验证产生的k对测试错误率:
- 先对每对结果球差,
- 若两个学习器性能相同, 则差值均值应为0.
因此, 可根据差值, 来对学习器A与B性能相同这个假设做t检验, 计算出差值的均值 和方差 , 在显著度 下,若变量
小于临界值 , 则假设不能被拒绝, 即认为两个学习器的性能没有显著差别
否则可认为两个学习器的性能有显著差别, 且平均错误率较小的那个学习器性能较优
因为样本有限, 在使用交叉验证等实验估计法时, 不同轮次的训练集会有一定的重叠, 为缓解这个问题可以使用"5x2交叉验证"
2.4.3 McNemar检验
对于二分问题, 使用留出法不仅可估计出学习器A和B的测试错误率, 还可获得两学习器分类结果的差别, 即两者都正确、都错误、一个正确一个错误的样本数:
| 算法B | 算法A: 正确 | 算法A: 错误 |
|---|---|---|
| 正确 | ||
| 错误 |
若我们做的假设是两学习器性能相同, 则应有 , 那么变量 应当服从正态分布. McNemar检验考虑变量
服从自由度为1的 分布, 即标准正态分布变量的平方.
- 当以上变量值小于临界值 时, 不能拒绝假设, 即认为两学习器的性能没有显著差别
- 否则拒绝假设, 即认为两学习器性能有显著差别, 且平均错误率较小的那个学习器性能较优
2.4.4 Friedman检验与Nemenyi后续检验
| 数据集 | 算法A | 算法B | 算法C |
|---|---|---|---|
| 1 | 2 | 3 | |
| 1 | 2.5 | 2.5 | |
| 1 | 2 | 3 | |
| 1 | 2 | 3 | |
| 平均序值 | 1 | 2.125 | 2.875 |
使用Friedman检验来判断这些算法是否性能相同.若相同, 则他们的平均序列应当相同.假定我们在N个数据集上比较k个算法, 令 表示第i个算法的平均序值, (不考虑平分序值)则 的均值和方差分别为 和 . 变量
在k和N都较大时, 服从自由度为k-1的 分布
然而上述的圆石Friedman检验过于保守, 现在通常使用变量

若"所有算法的性能相同"这个假设被拒绝, 则说明算法的性能显著不同.这时需进行"后续检验"(post-hoc test)来进一步区分个算法. 常用的有Nemenyi后续检验.
Nemenyi检验计算出平均序值差别的临界值域

2.5 偏方与方差
在回归任务中
学习算法的期望预测:
使用样本数相同的不同训练集产生的方差为:
噪声为:
期望输出与真是标记的差别成为偏差(bias), 即:
泛化误差可分解为偏差、方差、与噪声之和

3. 线性模型
3.1 基本形式
给定有d个属性描述的实例 , 其中 是x在第i个属性上的取值, 线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数, 即
一般用向量形式写成
3.2 线性回归
给定数据集 , 其中
线性回归试图学得
均方误差最小化:
表示 和 的解
均方误差有非常好的几何意义, 它对应了常用的欧几里得距离或简称"欧式距离"(Euclidean distance). 基于均方误差最小化来进行模型求解的方法成为"最小二乘法"(least square method).
求解 和 使 最小化的过程, 称为线性回归模型的最小二乘"参数估计"(parameter estimation). 我们可将 分别对 和 求导, 得到
然后令上两式为0, 可得到$w$和$b$最优解的闭式(closed-form)解
其中 为 的均值
更一般的形式为:
这称为"多元线性回归"(multivariate linear regression)
可利用最小二乘法来对 和 进行估计. 为便于讨论, 我们把 和 吸收入向量形式 , 相应的, 把数据集D表示为一个 大小的矩阵 ,其中每行对应于一个示例, 该行前 个元素及对应于实例的 个属性值, 最后一个元素恒置为1, 即
再把标记也写成向量形式 , 有
令 , 对 求导得到
当 为满秩矩阵(full-rank matrix)或正定矩阵(positive definite matrix)时, 上式为零可得
其中 是矩阵 的逆矩阵. 令 ,则最终学得的多元线性回归模型为
假设我们认为示例所对应的输出标记是在指数尺度上变化, 那就可将输出标记的对数作为线性模型逼近的目标, 即
这就是"对数线性回归"(log-linear regression), 它实际上是在试图让 逼近 .
其作用是把一个非线性关系通过对数形式转换成线性关系
更一般的,考虑单调可微函数 , 令
这样得到的模型成为"
广义线性模型"(generalized linear model),其中函数 称为"联系函数"(link function).通过联系函数把非线性关系转换成线性关系, 就是其中一种
3.3 对数几率回归(逻辑回归)
线性回归产生的预测值:
对数几率函数(logistic function):
对数几率函数(逻辑回归函数)通过函数把需要分类的值(这里指二元分类)压缩成一个连续的阶跃函数
几率(odds):
对数几率(logit):
通过以上式子可得:
可通过"极大似然法"(maximum likelihood method)来估计 和 . 给定数据集 , 对率回归模型最大化"对数似然"(log-likelihood)
即令每个样本属于其真实标记的概率越大越好.
为便于讨论
令 ,
即
结合上式,并最大化可获得:
根据凸优化理论,利用优化算法可得:
以牛顿法为例:
3.4 线性判别分析

欲使同样样例的投影点尽可能接近,可以让同类样例投影点的协方差尽可能小,即 尽可能小
欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即 尽可能小
定义“类内散度矩阵”(within-class scatter matrix)
参考书籍: 《机器学习》- 周志华著