validation accuracy(train loss不断下降 valid loss不断上升accuracy上升怎么解决)

本文目录
train loss不断下降 valid loss不断上升accuracy上升怎么解决
这种情况通常表明您的模型出现了过拟合(overfitting),即在训练数据上表现很好,但在未见过的验证数据上表现不佳。以下是一些可能有助于解决这种情况的方法:
收集更多数据:收集更多的数据可能有助于提高模型的泛化能力,并减少过拟合的风险。
使用正则化技术:正则化技术可以帮助控制模型的复杂度,例如L1、L2正则化或dropout等。
调整模型的超参数:例如,减少模型的层数或减少每层中的神经元数可以减少模型的复杂性,并减少过拟合的风险。
提前停止训练:使用提前停止策略可以避免过拟合,并在验证集上的性能开始下降时停止训练。
使用集成学习:使用集成学习可以通过组合多个模型来提高泛化性能,并减少过拟合的风险。
数据增强:增加训练数据的数量和多样性可以帮助模型更好地泛化到新的数据,可以尝试通过数据增强技术来增加数据的数量和多样性。
需要根据具体情况选择最适合的方法,可能需要反复尝试和调整。
第二章 模型评估与选择
错误率 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)
训练不足时,学习器拟合能力较弱,泛化误差较大
训练充足后,继续训练会使学习器过拟合,泛化误差增高
Validation rate指标越大越好还是
是的,越大越好。
可以看到有两个评价方法,accracy和validationrate。我对accracy和valrate的计算方式是明白的,但中间的逻辑(为什么要这样算)有疑问,很长时间都没弄明白。大绝
首先计算枯侍方式如下:accuracy=(判断正确的同一个人+判断正确的不同的人)/所有数据validationrate=判断正确的同一个人的没仿吵数量/所有的同一个人的数量(这时有个数字代码写死为0.001,后面细说)但为什么要有两个指标评价?accuracy不就够了么?而且貌似valrate比accuracy更重要,更能反映训练结果的好坏。

更多文章:
零基础学php培训(昌平IT培训分享学PHP想快点学会要怎么办)
2025年12月27日 23:30
维吉尼亚密码怎么用(令n=26,s=4,密钥k=QEGD,明文串M=computer,用维吉尼亚密码体制对M加密)
2026年4月2日 23:45
下载php的软件(php开发软件有哪些(php用什么软件))
2025年9月22日 21:15
isnull()方法的作用(sqlserver中isnull(@RecIndex,’’) <> ’’是什么意思)
2026年7月2日 14:45
constructed environment翻译(翻译下面这段文字)
2025年9月26日 03:00
spite词组(in spite of中spite是恶意,为什么变成短语是尽管的意思)
2025年9月18日 03:45
datagridview动态添加列(在DataGridView中动态添加combox列)
2026年7月18日 09:00
web服务器控件不包括(web用户控件 的优点和缺点在哪里)
2026年4月12日 16:45
字符串strtok(c语言:如何把字符串分解为一个个的字符)
2025年8月24日 22:45
echo和printf的区别(bash下echo和print的区别在哪里)
2026年9月22日 22:45














