发布网友 发布时间:2022-11-26 03:43
共1个回答
热心网友 时间:2023-11-01 12:52
错误率 E(error rate)
E = a / m = 样本分类错误 / 样本总数
精度(accuracy)
精度 = 1 - E
误差(error)
拟合
用s实验测试来对学习器的泛化误差进行评估
需要一个训练集训练学习器,一个测试集测试学习器
已知一个包含m个样例的数据集:
既要训练又要测试
测试集尽可能与训练集互斥
以下为几种从数据集 D 产生训练集和测试集的方法
直接把数据集D划分为两个互斥的集合,
其中一个作为训练集S,另一个作为测试集T
训练集和测试集的划分要尽可能保持数据分布的一致性,
采用分层采样(stratified sampling)
缺点:
常见做法:2 / 3 ~ 4 / 5样本用于训练,剩余用来测试。
将数据集D划分为k个大小相似的互斥子集:
每个子集 都从D中通过分层采样获取,尽可能保持数据分布的一致性。
用 k-1个子集的并集作为训练集,剩下的子集作为测试集;
可获得 k 组训练/测试集,进行 k 次训练和测试,最终返回 k 次测试结果的均值。
结果的稳定性和保真性取决于k的取值,故又称 "k折交叉验证"(k-fold cross validation)
留一法(Leave-One-Out,LOO): 假定数据集D包含m个样本,令k=m
给定包含m个样本的数据集D,采样产生D'
自助采样(bootstrap sampling):
每次随机从D中挑选一个样本,拷贝放入D',然后再将该样本放回D中
重复上述过程m次,得到包含m个样本的D'。
样本在m次采样中始终不被采到的概率是 ,取极限得:
即通过自助采样,初试数据集D中约有36.8%的样本未出现在D'中,
用D'作训练集,D\D'作测试集。
验证集(validation set):
研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型的泛化能力,
把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。
什么样的模型是好的,不仅取决于算法和数据,还取决于任务需求
在预测任务中,给定样例集
其中 是示例 的真实标记
要评估学习器 f的性能,看要把学习器预测结果f(x)和y进行比较
均方误差(mean squared error):
错误率: 分类错误的样本数占样本总数的比例
精度: 分类正确的样本数占样本总数的比例
对于二分类问题,可以根据真实类别与学习器预测类别的组合分为:
真正例(True Positive)、假正例(False Positive)、
真反例(True Negative)、假反例(False Negative)
可得TP+FP+TN+FN=样例总数
<table align=center>
<caption>分类结果混淆矩阵(cofusion matrix)</caption>
<tr align=center>
<th rowspan="2">真实情况</th>
<th colspan="2">预测结果</th>
</tr>
<tr align=center>
<td>正例</td>
<td>反例</td>
</tr>
<tr align=center>
<td>正例</td>
<td>TP(真正例)</td>
<td>FN(假反例)</td>
</tr>
<tr align=center>
<td >反例</td>
<td>FP(假正例)</td>
<td>TN(真反例)</td>
</tr>
</table>
查准率P(预测正例中真实正例的比率):
查全率R(真实正例中预测正例的比率):
查全率与查准率是一对矛盾的度量,
以查全率为横轴,查准率为纵轴可得P-R曲线
P-R曲线与平衡点示意图:
P-R图能直观的显示学习器在样本总体上的查全率、查准率,
进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全包住,
则后者的性能优于前者。
很多时候无法完全包住,会产生交叉
此时需要综合考虑查准率和查全率的性能度量:
平衡点(Break-Even Point,BEP):
查准率=查全率的取值
F1度量:调和平均
度量:加权调和平均
多数时候会有多个二分类混淆矩阵
一种做法:
另一种做法:
先对混淆矩阵的对应元素求平均,得到TP、FP、TN、FN的平均值:
记为:
再计算:
学习器为测试样本产生一个实值或概率预测,然后将预测值与分类阈值(threshold)比较,
大于阈值则为正类,小于阈值则为反类
根据实值或概率预测可以将测试样本进行排序,
"最可能"是正例的排在最前面,"最不可能"是正例的排在最后面,
分类过程即相当于在排序中以某个截断点(cut point)将样本分为两部分,
前一部分为正例,后一部分为反例
可根据不同任务需求选择截断点:
ROC:受试者工作特征(Receiver Operating Characteristic)
对角线对应于随机猜测模型;
(0,1)点对应于所有正例都在反例之前的理想模型
现实任务为有限样例,只能绘制图(b)所示的近似ROC曲线。
绘制方法:
与P-R图类似,若一个学习器的ROC曲线被另一个学习器的曲线完全包住,
则后者的性能优于前者。
若曲线产生交叉,可以用AUC(Area Under ROC Curve,ROC曲线下的面积)进行比较。
AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系
给定 个正例和 个反例,令 和 分别表示正、反例集合
则有
排序损失(loss):
真正例率的分母是 ,假正例率的分母是
ROC曲线图可看成矩形分割成 个小矩形,则:
为ROC曲线上部分的面积
AUC为ROC曲线下部分的面积
为权衡不同类型错误所造成的不同损失,可为错误赋予"非均等代价"(unequal cost)
<table align=center>
<caption>二分类代价矩阵(cost matrix)</caption>
<tr align=center>
<th rowspan="2">真实类别</th>
<th colspan="2">预测类别</th>
</tr>
<tr align=center>
<td>第0类</td>
<td>第1类</td>
</tr>
<tr align=center>
<td>第0类</td>
<td>0</td>
<td>cost_01</td>
</tr>
<tr align=center>
<td >第1类</td>
<td>cost_10</td>
<td>0</td>
</tr>
</table>
:表示将第i类样本预测为第j类样本的代价
一般来说,
令第0类作为正类,第1类作为反类,
作为正例子集, 作为反例子集。
代价敏感(cost-sensitive)错误率:
非均等条件下,ROC曲线不能直接反映学习器的期望总体代价,
而代价曲线(cost curve)可以。
其中,p为样例为正例的概率
其中FPR是假正例率,FNR=1-TPR是假反例率。
代价曲线的绘制:
对学习器性能进行评估
故通过统计假设检验(hypothesis test)来进行学习器性能比较
先介绍两种最基本的假设检验,默认以错误率为性能度量,用 表示。
现实中我们只能获取测试错误率,
而不知道其泛化错误率
二者未必相同,但接近的可能性比较大,因此可通过测试错误率估推出泛化错误率。
泛化错误率为 的学习器在一个样本上犯错的概率是 ;
测试错误率 意味着在m个测试样本中有 个被误分类。
假设测试样本是从样本总体分布中独立采样而得,
那么泛化错误率为 的学习器将其中m'个样本误分类
其余样本全部分类正确的概率为
其中,
由此可估算出学习器刚好将 个样本误分类的概率为:
这也表示了在m个样本的测试集上,泛化错误率为 的学习器被测得测试错误率为 的概率。
对于给定的(做实验得到的)测试错误率,由 可得, 在 时取最大值,符合二项分布(binomial)
如下图所示,取 ,则10个样本中测得3个被误分类的概率最大。
使用二项检验(binomial test)对 (泛化错误率是否不大于3)的假设进行检验
考虑假设 ,
在 的概率内所能观测到的最大错误率如下式( 为置信度(confidence),对应上图非阴影部分):
(s.t.是“subject to”的简写,表示在右式条件满足的时候左式才成立)
这里公式还有疑问
若测试错误率 小于临界值 ,
则根据二项检验可得:
大多数时候我们并非只做一次留出法估计,而是通过多次重复留出法或交叉验证法等进行多次训练/测试,会得到多个测试错误率,此时可用"t检验"。
假定我们得到k个测试错误率, ,则此时有:
考虑到k个测试错误率可看作泛化错误率 的独立采样,则有变量:
服从自由度为 k-1 的t分布
如下图:
对于假设 和显著度 ,
可以计算当测试错误率为 时,在 概率内能观测到的最大错误率,即临界值。
如上图所示,两边阴影部分各有 的面积
阴影部分范围分别为
若 位于临界值范围内 内,则不能拒绝假设
下表给出一些常用临界值:
<table align=center>
<caption>双边 t 检验常用临界值</caption>
<tr align=center>
<th rowspan="2">a</th>
<th colspan="5">k</th>
</tr>
<tr align=center>
<td>2</td>
<td>5</td>
<td>10</td>
<td>20</td>
<td>30</td>
</tr>
<tr align=center>
<td>0.05</td>
<td>12.706</td>
<td>2.776</td>
<td>2.262</td>
<td>2.093</td>
<td>2.045</td>
</tr>
<tr align=center>
<td>0.10</td>
<td>6.314</td>
<td>2.132</td>
<td>1.833</td>
<td>1.729</td>
<td>1.699</td>
</tr>
</table>
上面是对于单个学习器泛化性能的假设进行检验,
而在现实中我们需要对不同学习器的性能进行比较,
下面介绍此类情况的假设检验方法。
对两个学习器A和B,记使用k折交叉验证法得到的测试错误率分别为 和 ,
其中, 表示在相同的第i折训练/测试集上得到的结果。
可用k折交叉验证"比较t检验"(paired t-tests)进行比较检验。
基本思想:若两个学习器性能相同,则使用相同的训练/测试集得到的测试错误率应相同,即
具体做法:
对于一个有效的假设检验,应保证测试错误率都是泛化错误率的独立采样,
但在上述过程中,所采用的训练集在不同轮次会有一定程度的重叠,故测试错误率并不独立,
为缓解这一问题,故采用" 交叉验证"法
具体做法:
对于二分类问题,留出法不仅可以估计学习器A和B的测试错误率,还能获得两学习器分类结果的差别,如列联表(contingency table):
<table align=center>
<caption>两学习器分类差别列联表</caption>
<tr align=center>
<th rowspan="2">算法B</th>
<th colspan="2">算法A</th>
</tr>
<tr align=center>
<td>正确</td>
<td>错误</td>
</tr>
<tr align=center>
<td>正确</td>
<td>e_00</td>
<td>e_01</td>
</tr>
<tr align=center>
<td >错误</td>
<td>e_10</td>
<td>e_11</td>
</tr>
</table>
做假设两学习器性能相同,则有
那么变量 应符合正态分布
McNemar检验考虑变量:
服从自由度为 1 的 分布
自由度为 1 的 检验的临界值:
交叉验证t检验和McNemar检验都是在一个数据集上比较两个算法的性能,
而很多时候需要在一组数据集上对多个算法进行比较。
两种办法:
假设用4个数据集: 对算法A、B、C进行比较
使用留出法或交叉验证法得到每个算法在每个数据集上的测试结果,
然后再每个数据集上根据测试性能由好到坏排序,赋予序值1,2,3,...
若性能相同则平分序值,如下图:
然后使用Frideman检验判断算法的性能是否相同
若相同,则平均序值应相同
假定在N个数据集上比较k个算法,令 表示第i个算法的平均序值(暂不考虑平分序值)
的均值为(k+1)/2,方差为
变量:
当k和N较大时,服从自由度为k-1的 分布
上述原始Frideman检验过于保守,现常使用:
变量:
服从自由度为k-1和(k-1)(N-1)的 F 分布
下表为一些常用临界值
若"所有算法性能相同"这个假设被拒绝,则说明算法的性能显著不同,
这时需要进行后续检验(post-hoc test)来进一步区分算法
常用Nemenyi后续检验
计算出平均序值差别的临界值域:
下表给出常用的 值
若两个算法的平均序值之差超过了临界值域CD,则拒绝假设"所有算法性能相同"
通过"偏差-方差分解"来解释学习算法的泛化性能
泛化误差=偏差+方差+噪声
偏差:度量学习算法的期望预测与真实结果的偏离程度,刻画学习算法本身的拟合能力
方差:度量同样大学的训练集的变动导致的学习性能的变化,刻画数据扰动产生的影响
噪声:表达当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画学习问题本身的难度
一般来说,偏差与方差是有冲突的,称为偏差-方差窘境(bias-variance dilemma)
训练不足时,学习器拟合能力较弱,泛化误差较大
训练充足后,继续训练会使学习器过拟合,泛化误差增高