《机器学习》(周志华)第二章 模型评估与选择
2.1 误差与过拟合
我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义:
- 在训练集上的误差称为训练误差(training error) 或经验误差(empirical error)。
- 在测试集上的误差称为测试误差(test error)。
- 学习器在所有新样本上的误差称为泛化误差(generalization error)。
显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的 “一般特征” ,这样在遇到新样本时才能做出正确的判别。
然而,当学习器把训练集学得“太好”的时候,即把一些训练样本的自身特点当做了普遍特征;同时也有学习能力不足的情况,即训练集的基本特征都没有学习出来。我们定义:
- 学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟合(overfitting)。
- 学习能太差,训练样本的一般性质尚未学好,称为:欠拟合(underfitting)。
可以得知:
在过拟合问题中,训练误差十分小,但测试误差教大;
在欠拟合问题中,训练误差和测试误差都比较大。
目前,欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。
2.2 调参与验证集
- 算法的参数:一般由人工设定,亦称 “超参数”
- 模型的参数:一般由学习确定
调参过程相似:先产生若干模型,然后基于某种评估方法进行选择。
参数调得好不好对性能往往对最终性能有关键影响。
区别:训练集vs.测试集 vs.验证集(validation set) 算法参数选定后,要用 “训练集+验证集” 重新训练最终模型
2.3 三大问题
2.3.1 评估方法(如何获得测试结果)
- 关键: 怎么获得 “测试集”?
- 测试集应该与训练集 “互斥”
- 常见方法
- 留出法(hold-out):
- 将数据集 D 划分为两个互斥的集合,一个作为训练集 S,一个作为测试集 T。
- 注意:
- 保持数据分布一致性(例如:分层采样)
- 多次重复划分(例如:100次随机划分)
- 测试集不能太大、不能太小(例如:1/5~1/3)
- 将数据集 D 划分为两个互斥的集合,一个作为训练集 S,一个作为测试集 T。
- 交叉验证法(cross validation):
- 数据集 D 划分为 k 个大小相同的互斥子集,满足 D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j)。
- 同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。交叉验证法的思想是:每次用 k-1 个子集的并集作为训练集,余下的那个子集作为测试集,这样就有 K 种训练集/测试集划分的情况,从而可进行 k 次训练和测试,最终返回 k 次测试结果的均值。交叉验证法也称 “k 折交叉验证”,k 最常用的取值是 10,下图给出了 10 折交叉验证的示意图。
- 与留出法类似,将数据集 D 划分为 K 个子集的过程具有随机性,因此 K 折交叉验证通常也要重复 p 次,称为 p 次 k 折交叉验证,常见的是 10 次 10 折交叉验证,即进行了 100 次训练/测试。特殊地当划分的 k 个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果通常比较准确,但是面对一个班有50男50女的问题时,准确率只能为0。
- 自助法(bootstrap):
-
前景:我们希望评估的是用整个 D 训练出的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D 小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。 “自助法” 正是解决了这样的问题。
-
基于 “自助采样”(bootstrap sampling)
-
亦称 “有放回采样”、“可重复采样”
-
训练集与原样本集同规模
-
m 次采样中,样本始终不被采到的概率取极限为:0.368
-
缺点: 数据分布有所改变
-
- 留出法(hold-out):
2.3.2 性能度量(如何评估性能优劣)
性能度量(performance measure) 是衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。
2.3.2.1 最常见的性能度量
- 回归任务:
即预测连续值的问题,最常用的性能度量是 “均方误差”(mean squared error) , 很多的经典算法都是采用了 MSE 作为评价函数。
- 分类任务:
即预测离散值的问题,最常用的是错误率和精度。-
错误率是分类错误的样本数占样本总数的比例。
-
精度则是分类正确的样本数占样本总数的比例。
-
所以:错误率+精度=1。
-
2.3.2.2 查准率(P)/ 查全率(R) / F1
- 引入原因:
错误率和精度虽然常用,但不能满足所有的需求,例如:在推荐系统中,我们只关心推送给用户的内容,用户是否感兴趣(即查准率: precision),或者说所有用户感兴趣的内容我们推送出来了多少(即查全率:recall)。
因此,使用查准/查全率更适合描述这类问题。
对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:
- 查准率:
举例:100个瓜,预测十个瓜,真正的好瓜有多少。
- 查全率:
举例:100个瓜,20个好瓜,但是只预测了10个好瓜,那么查全率就是50%。
- F1:
F1 度量,是 P 和 R 的调和平均,当 F1 较高时,模型的性
能越好。
若对查准率和查全率有不同偏好:
β > 1 时,查全率有更大的影响,β < 1 时,查准率有更大的影响。
2.3.2.3 ROC 与 AUC
学习器对测试样本的评估结果一般为一个实值或概率,设定一个阈值,大于阈值为正例,小于阈值为负例,因此这个实值的好坏直接决定了学习器的泛化性能,若将这些实值排序,则排序的好坏决定了学习器的性能高低。
ROC 曲线正是从这个角度出发来研究学习器的泛化性能,ROC(Receiver Operating Characteristic)
ROC 曲线以“真正例率”(True Positive Rate,简称 TPR)为竖轴,横轴为“假正例率”(False Positive Rate,简称 FPR),ROC 偏重研究基于测试样本评估值的排序好坏。
ROC 曲线下的面积定义为 AUC(Area Under ROC Curve),
AUC 越大,证明排序的质量越好,AUC 为 1 时,证明所有正例排在了负例的前面,AUC 为 0 时,所有的负例排在了正例的前面。
最终目的是:使AUC尽可能大。
2.3.2.4 非均等代价
上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的
例如:将无疾病–>有疾病只是增多了检查,但有疾病–>无疾
病却是增加了生命危险。
以二分类为例,由此引入了“代价矩阵”(cost matrix)。
在非均等错误代价下,我们希望的是最小化“总体代价”,这样 “代价敏感”(敏不敏感就是考没考虑) 的错误率为:
2.3.3 比较检验(如何判别实质差别)(不太明白在讲什么)
统计假设检验(hypothesistest) 为学习器性能比较提供了重要依据
- 两学习器比较
- 交叉验证t检验(基于成对t检验)
- k折交叉验证;5x2交叉验证
- McNemar 检验(基于列联表,卡方检验)
- 交叉验证t检验(基于成对t检验)
2.4 偏差-方差
下图形象的表示bias、var、ε。