模型评估与选择
本部分解决的是机器学习模型的选择问题:
1.用什么方法来评价模型?
构建验证集,考察验证集的结果。
2.用什么来度量模型的性能?
多种性能度量,来衡量验证集的结果。
3.怎么来比较模型而做出现则?
采用统计中的比较检验来进行性能度量比较。
基本概念
错误率(error rate):分类错误的样本占样本总数的比例。或者说是预测错误(包括将正例预测为反例和将反例预测为正例)的比例。
精度(accuracy):分类正确的样本占样本的总数。
误差(error):学习器实际预测输出与样本的真实输出之间的差异。
训练误差(training error):学习器在训练集上的误差。
泛化误差(generalization error):学习器在新样本上的误差。
过拟合(over fitting):学习器在训练集上表现很好却泛化能力表现差。一般是学习器把训练样本的一些特殊性质当作了总体样本的一般性质进行了学习。
欠拟合(under fitting): 学习器未能学的训练集样本的一般性质,对训练集的表现不好。
查准率(precision):预测结果中预测为正例的结果中真正为正例的比例。
查全率(recall):预测结果中预测为正例中真正正例占全部正例的比例。
评估方法
学习器的学习能力和泛化能力是有学习器的算法和数据的内在结构共同决定的。对于学习器的算法,不同的参数设置能导致算法生成不同的模型,如何评估一个模型的好坏,我们通常从其泛化误差来进行评估。
泛化误差的定义是学习器在新样本上的误差,而新样本我们通常是不知道其真实输出的,那么如何评估呢?为此,通常在训练集中分出一部分数据,这些并不参与学习器的学习,而是使用其他的剩余样本来训练样本,用这些选出来的样本进行泛化误差的计算。这些被选出来的样本我们称之为验证集(testing set)因为我们假设验证样本的是从真实样本中独立同分布的采样而来,从而可以将测试误差当作泛化误差的近似。
给定一个数据集
D={(x1,y1),(x2,y2),⋅⋅⋅,(xm,ym)}
,如何从中选出我们所需的训练集
S
和验证集
留出法
留出法是直接将数据集 D 划分为两个互斥的集合。其中一个作为验证集,一个作为训练集。
<1>注意,两个样本子集的划分尽量保证数据分布的一致性,即子集中正反样本的数目尽量平衡。通常用分层采样来保留类别比例。
<2>另外,一次划分往往容易导致结果不稳定,通常采用多次划分重复评估取平均值的方法来提高可靠性。
<3>通常使用数据的2/3∼4/5 作为训练,剩余的用作验证。交叉验证法
将数据集划为 k 个大小近似的互斥子集,每个子集都是通过分层采样得到。每次都将k−1 个子集作为训练集,剩余的一个子集作为验证集。这样就能有 k 次试验。因此,此种方法也称为“k 折交叉验证”( k -fold cross validation)。自助法
使用自助采样法:每次有放回的从数据集中采样一个数据,重复m 次获得一个子样本集。这样的子样本集中可能含有同样的样本。用没有出现在该子样本集中的样本数据作为验证样本集。一个样本不被采样到的概率为:
limm→∞(1−1m)m→1e≈0.368自助法适用于数据集小、难以有效划分训练集/验证集的场合。
性能度量
用实验的方法可以评估模型的性能,但还是需要一个直接的评价标准,这就是性能度量。性能度量往往多方面有关:算法、数据、任务。回归任务中常用的是均方误差;分类任务中常用的是错误率和精度。
1、均方误差
2、错误率
3、 精度
4、查准率
5、查全率
6、F1
7、ROC
根据学习器的预测结果对样例进行排序,然后按照此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分为以其为横纵坐标作图得到ROC曲线。其横轴表示“假正例率”即反例被预测错误的比例;纵轴表示“真正例”即正例被预测正确的比例(相当于召回率recall)。换个说法:关注预测为正确的部分,其中预测为真且实际为真占所有正例的比例;其中预测为真但实际为假占所有反例的比例。
8、AUC
ROC曲线下方所占的面积。
9、代价敏感错误率
10、代价曲线
比较检验
假设检验
交叉验证
t
<script type="math/tex" id="MathJax-Element-23">t</script>检验
McNemar检验
Friedman检验
Nemenyi检验