【自学笔记】神经网络(2) -- 模型评估和优化

文章目录

划分数据集

我们当然希望把所有数据都用来优化模型,然而数据是有限的,我们要追求最大化数据的效用,用最少的数据训练出最好的效果。

训练集和测试集

通常,我们会将数据集划分一部分出来,用来测试模型在未出现过的数据中的能力(泛化能力)。

训练误差

训练误差(Training Error)指模型在训练数据集上的预测误差。它衡量的是模型对已知数据的拟合程度。可以用来判断是否欠拟合

测试误差

测试误差(Test Error)是指模型在未见过的测试数据集上的预测误差。它衡量的是模型的泛化能力,即模型在新数据上的表现。可以用来判断是否过拟合

交叉验证测试集

交叉验证(Cross-Validation)是一种评估机器学习模型性能和选择模型参数的方法,通过将数据集分为多个子集来进行。交叉验证的主要目标是减少过拟合的风险,并提供模型在未知数据上的性能评估。其中常用的是一种称为K折交叉验证 (K-fold Cross-Validation)的方法。

在K折交叉验证中,数据集被随机划分为K个子集(或称为"折")。然后,模型被训练K次,每次使用K-1个子集作为训练数据,剩下的一个子集作为验证数据(或测试集)。这样,每个子集都会在验证过程中被用作一次测试集,而其余部分的子集会被用作训练集。模型的性能通常通过这K次训练和验证过程中的平均表现来评估。

优点 :数据资源有效利用

缺点 :算力资源要求较高

此外,对于某些数据(如时间序列数据),标准的K折交叉验证可能并不适用,因为它假设数据是独立同分布 的,而时间序列数据通常具有顺序依赖性

偏差与方差

偏差

偏差(Bias)是指模型预测值的期望与真实值之间的差异,高偏差模型在拟合训练数据时存在"欠拟合"

方差

方差(Variance)是模型预测值的差异程度,即预测值在不同数据集上的变动性。它可以用预测值的方差来表示。方差过大表示模型存在"过拟合"

表现基准

注意,模型具有较高的偏差或方差不一定意味着模型不好,通常会将人类做相同任务所产生的偏差与方差作为表现基准。此外,也可以在其他竞争算法的基础上作优化。

学习曲线

error - train set size

这里是选定模型后,增加数据集大小的情况。随着数据集大小增大,交叉验证误差减小,泛化能力增强;同时训练误差增大,这是因为固定的模型(如 f w , b ( x ) = w 1 x + w 2 x 2 + b f_{w,b}(x)=w_{1}x + w_{2}x^{2}+b fw,b(x)=w1x+w2x2+b)会越来越难以完美拟合所有样本点。

数据集足够大时,曲线会趋于平坦。这可能是由于当前的模型过于简单,无法继续拟合出更好的效果了,这时候就可以考虑更换或优化模型,而不仅仅是向它输入更多的数据。

而如果出现交叉验证误差远高于训练误差的情况,可能就是数据量不足或模型设计过于复杂。有时,正则化可以很好解决问题。

error - degree of polynomial

这是误差与模型复杂度的图线,这里采用多项式函数,所以复杂度就是多项式的维度。

数据增强

在数据不足或数据特征过于单一时,可以用一些手段从已有的数据中生成额外的数据,从而实现数据增强。比如,现在你有一张写有字母A的图片,你可以对它进行旋转、模糊、放缩等一系列操作,并保持标签 A A A不变,那么,你就成功将数据集扩充了若干倍,模型的泛化能力也能得到提升。类似的,我们还可以在音频中混入不相干的噪音,或在文本中加入少量不相干的字符,来人为地为数据集添加噪声

迁移学习

迁移学习是指在机器学习领域中,利用一个神经网络在源任务上学习到的知识,帮助解决另一个相关但不同的目标任务。这一过程可以显著减少目标任务所需的训练时间、数据量和计算资源。

(1)微调 (Fine-tuning):将预训练的神经网络模型应用到新的任务上,并对模型的部分或全部参数进行微调。通常,预训练模型是在大规模数据集(如ImageNet)上训练的,这些模型已经学习到了丰富的特征表示。在新的任务上,通过微调模型的最后几层或所有层,可以快速适应新的数据集。

比如,如果你想实现一个0~9数字识别的模型,而已经有了识别小猫小狗等各种类别的模型,可以只修改这个模型的输出层,来快速实现任务。

(2)特征提取 :预训练模型的前几层通常学习到的是低级特征(如边缘、纹理等),这些特征在许多任务中都是通用的。因此,可以将这些层作为特征提取器,直接用于新的任务。

(3)冻结层 :在新的任务中,可以冻结预训练模型的前几层,只训练新的分类层或其他特定任务的层,这样可以减少计算资源的消耗,同时利用预训练模型的泛化能力。

(4)...

项目的完整周期


样本不平衡问题

当样本中某一标签数量远大于其余种类时,模型会表现出倾向该标签的特征,从而达到虚假的高准确率。

预测正确标记为 T r u e True True,预测错误标记为 F a l s e False False,标签为1标记为 p o s i t i v e positive positive,标签为0标记为 n e g a t i v e negative negative。

精确率和召回率

则引入两个比值来评估这个模型:

(1)精确率 : P o c i s i o n = T r u e p o s i t i v e s P r e d i c t e d p o s i t i v e s Pocision = \frac{True \ positives} {Predicted \ positives} Pocision=Predicted positivesTrue positives

(2)召回率 : R e c a l l = T r u e p o s i t i v e s A c t r u a l p o s i t i v e s Recall = \frac{True \ positives} {Actrual \ positives} Recall=Actrual positivesTrue positives

高的精确率意味着模型误判率低,高的召回率意味着模型漏判率低

精确率与召回率的平衡

精确率和召回率之间通常存在权衡关系。提高精确率往往会降低召回率,反之亦然。

我们引入 F1 Score = 2 × Precision × Recall Precision + Recall \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1 Score=2×Precision+RecallPrecision×Recall在精确率和召回率之间寻求平衡,特别是在两者都重要的情况下。

更一般的则有 Fβ Score = ( 1 + β 2 ) × Precision × Recall ( β 2 × Precision ) + Recall \text{Fβ Score} = (1 + \beta^2) \times \frac{\text{Precision} \times \text{Recall}}{(\beta^2 \times \text{Precision}) + \text{Recall}} Fβ Score=(1+β2)×(β2×Precision)+RecallPrecision×Recall

(1)当 β = 1 β=1 β=1 时, Fβ Score \text{Fβ Score} Fβ Score等同于 F1 Score \text{F1 Score} F1 Score,可以根据需求灵活调整参数 β β β。

(2)当 β < 1 β<1 β<1 时,精确率的权重更高。

(3)当 β > 1 β>1 β>1 时,召回率的权重更高。

相关推荐
我叫czc2 小时前
【python笔记03】《类》
开发语言·笔记·python
墨绿色的摆渡人2 小时前
用 Python 从零开始创建神经网络(五):损失函数(Loss Functions)计算网络误差
人工智能·python·深度学习·神经网络
【上下求索】3 小时前
学习笔记026——Redis基本操作命令
redis·笔记·学习
宋一诺333 小时前
机器学习—诊断偏差和方差
人工智能·机器学习
IT古董3 小时前
【机器学习】机器学习中用到的高等数学知识-5. 函数空间和泛函分析 (Functional Analysis)
人工智能·算法·机器学习
垂杨有暮鸦⊙_⊙4 小时前
阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_作战无人机和察打无人机图鉴
笔记·学习·无人机
sp_fyf_20244 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04
人工智能·神经网络·算法·机器学习·语言模型·数据挖掘
行码棋5 小时前
【机器学习】SVM原理详解
人工智能·机器学习·支持向量机
莫叫石榴姐5 小时前
数据科学与SQL:如何计算排列熵?| 基于SQL实现
大数据·人工智能·sql·深度学习·算法·机器学习