一、模型评估
1、误差
1、对于给定的输入x,某个模型的输出 ŷ = f(x)偏离真实目标值y,那么就说明模型存在误差;
ŷ偏离y的程度可以用关于ŷ和y某个函数L(y,ŷ)来表示;
作为误差的度量标准:这样的函数L(y,ŷ)称为损失函数。
(损失函数的值越小,预测结果越接近真实值)
【误差:预测输出y ̂与真实输出y之间的差异;
经验误差、训练误差:在训练集上的误差;
泛化误差:在新样本上的误差。
泛化误差越小越好,经验误差不一定越小越好,可能导致过拟合。】
2、泛化误差:
在某种损失函数度量下,训练集上的平均误差被称为训练误差,测试集上的误差称为泛化误差。
泛化误差是衡量一个模型泛化能力的主要标准。
3、数据集:
1、训练集
1、训练模型的参数
2、作用
(1)模型学习:模型通过学习训练集中的数据来调整其内部参数,以便能够捕捉到数据中的规律和特征。
(2)性能评估:虽然训练集主要用于模型的训练,但在一些情况下,也可以使用它来初步评估模型的性能。
2、验证集
1、当我们的模型训练好之后,我们并不知道他的表现如何。这个时候就可以使用验证集(Validation Dataset)来看看模型在新数据(验证集和测试集是不同的数据)上的表现如何。同时通过调整超参数,让模型处于最好的状态。
2、作用:
(1)评估模型效果,为了调整超参数而服务
(2)调整超参数,使得模型在验证集上的效果最好
3、验证集不像训练集和测试集,它是非必需的。
如果不需要调整超参数,就可以不使用验证集,直接用测试集来评估效果。
验证集评估出来的效果并非模型的最终效果,主要是用来调整超参数的,模型最终效果以测试集的评估结果为准。
3、测试集
1、测试集主要用于评估模型的泛化能力。
当我们调好超参数后,就要开始「最终考试」了。我们通过测试集(Test Dataset)来做最终的评估,来看学习效果(模型效果)好不好。
通过测试集的评估,我们会得到一些最终的评估指标,例如:准确率、精确率、召回率、F1等。
2、作用
(1)性能评估:测试集提供了一个平台,可以模拟模型在实际应用中的表现。通过测试集的结果,我们可以了解模型是否能够有效地处理新的、未知的数据。
(2)泛化能力检验:测试集帮助验证模型是否过度拟合了训练数据。如果一个模型在训练集和验证集上表现良好,但在测试集上表现不佳,这可能意味着模型没有很好地泛化到新数据上。
(3)最终决策依据:在模型选择和超参数调优过程中,测试集的结果往往被视为最终的评判标准。一旦确定了最终模型,测试集的性能就成为模型是否准备好部署到生产环境中的关键指标。
(4)防止过拟合:通过监控模型在测试集上的表现,可以检测到过拟合的迹象。如果发现模型在训练过程中对训练数据过度拟合,可能需要调整模型复杂度或使用正则化技术。
(5)交叉验证:虽然测试集是评估模型的直接方式,但在实践中,为了更可靠地估计模型的性能,常常会采用交叉验证的方法。这种方法通过将数据分成多个小组,并在不同组合的训练集和验证集上重复训练和测试模型,来减少因数据划分而带来的偏差。
4、划分数据集
1、小规模常用的划分比例:
训练集:验证集:测试集=6:2:2
训练集:测试集==8:2、7:3
2、大规模样本集(百万级以上),只要验证集和测试集的数量足够即可。
例如有 100w 条数据,那么留 1w 验证集,1w 测试集即可。
1000w 的数据,同样留 1w 验证集和 1w 测试集。
3、超参数越少,或者超参数很容易调整,那么可以减少验证集的比例,更多的分配给训练集。
5、数据集划分代码示例
3、过拟合
1、将训练样本自身的一些特点当作所有样本潜在的泛化特点。
2、过拟合原因
不能把训练误差作为模型参考选择的标准,因为训练集可能存在以下问题:
①:训练集样本太少,缺乏代表性;
②:训练集中本身存在错误的样本,即噪声。
③:模型复杂度过高。
④:数据不纯。
3、如果片面的追求训练误差的最小化,就会导致模型参数复杂度增加,使得模型过拟合(Overfitting)。
4、表现:在训练集上表现很好,在测试集上表现不好。
4、防止过拟合问题
通常可以采取:
①使用验证集调参。
②数据集扩增。通过增加训练数据的数量来提高模型的泛化能力。
③使用正则化技术。正则化通过在损失函数中添加一个惩罚项来限制模型参数的大小,从而防止模型过度拟合训练数据。
④改进模型结构。选择合适复杂度的模型,避免模型过于复杂而难以学习数据的真实分布。
⑤降维。通过减少特征的数量来降低模型的复杂度,这有助于减少过拟合的风险。
⑥集成学习。通过结合多个不同的模型来做出预测,可以减少过拟合,因为不同的模型可能在不同的方面出现过拟合,它们的结合可以互相抵消这些错误。
⑦交叉验证。使用交叉验证来评估模型的性能,可以更准确地了解模型在未知数据上的表现,从而避免过拟合。
⑧重新清洗数据。
⑨:早停。在训练过程中监控验证集的性能,一旦发现验证误差开始增大,即停止训练。这可以防止模型在训练数据上过度拟合。
5、欠拟合
欠拟合:还没有训练好
1、原因:
(1)数据没有做归一化处理
(2)神经网络拟合能力不足
(3)数据的特征不够
2、解决方法:
(1)寻找最优的权重初始化方案
(2)增加网络层数、epoch
(3)使用适当的激活函数、优化器和学习率
(4)减少正则化参数
(5)增加特征
二、验证
1、模型不能过拟合于训练集,否则将不能在测试集上得到最优结果;
2、不能直接以测试集上的表现来选择模型参数,因为这样的模型参数将会是针对某个特定测试集的,得出来的评价标准将会失去其公平性,失去了与其他同类或不同类模型相比较意义。
【就比如要证明一个学生学习某门课程能力比别人强,(模型算法的有效性),那么就要让他和别人听一样的课,做一样的练习(相同点训练集),然后用他们都没做过的题目来测试他们(测试集与训练集不能交叉)。如果直接在测试集上调参,那就相当于让这个学生针对考题复习,这样是不公平的。】
3、参数的选择(调参)必须在一个独立于训练集和测试集的数据集上进行,这样用于模型调参的数据集被称为开发集或验证集。
1、交叉验证:
重复使用训练集和测试集
1、留出法(Holdout cross validation)
按照固定比例将数据集静态的划分为:训练集、验证集、测试集
2、自组法(bootstrapping)
适合于样本数目较少,有放回的取法。
3、
(1)简单交叉验证。
在训练集上使用不同的超参数训练,使用测试集选出最佳的一组超参数设置。
(2)K重交叉验证(K-fold cross validation)。K一般取10
将数据集分为训练集和测试集,将测试集放在一边。
将训练集分为 k 份 每次使用 k 份中的 1 份作为验证集,其他全部作为训练集。
通过 k 次训练后,我们得到了 k 个不同的模型。
评估 k 个模型的效果,从中挑选效果最好的超参数
使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终模型
三、正则化
1、为了避免过拟合,需要选择参数复杂度较小的模型。
2、如果有两个效果相同的模型,而它们的参数复杂度不相同,那么冗余的复杂度一定是过拟合导致的。
1、正则化项
1、、选择复杂度较小的模型,一种策略是在优化目标中加入正则化项,以惩罚冗余的复杂度:
①其中θ为模型参数
②L(y,ŷ;θ)为原来的损失函数
③λ用于调整正则化项的权重
④J(θ)为正则化项
⑤正则化项通常为θ的某阶向量范数
2、通过限制参数值域空间,显式地控制了模型复杂度,从而避免了过拟合。
2、L1正则化:
使权重的绝对值最小化,且对于异常值是鲁棒的。
3、L2正则化:
使得权重的平方最小化,该模型能够学习复杂的数据模式,但对于异常值不具备鲁棒性。
(鲁棒性指的是一个系统、设备或者程序在面对各种外界干扰或内部参数变化时,仍能保持其功能或性能不受影响的能力。)
4、Dropout
是一种正则化方法,用于随机禁用神经网络单元。