一份机器学习模型离线评估方法的详细手册

简介:
首先需要知道的是,机器学习想要能够解决业务中的问题,简单可以分为两个阶段:离线和线上(离线指的是模型未部署到生产环境之前,线上是指模型部署到生产环境之后)。在离线阶段,首先需要先训练一个模型,然后对训练好的模型进行离线评估来了解下模型的性能情况。

我们知道,模型训练的时候使用的数据集是训练集,模型在测试集上的误差近似为泛化误差,而我们更关注的就是泛化误差,所以在离线阶段我们需要解决一个问题,那就是如何将一个数据集 D 划分成训练集 S 和测试集 T ?实际上,离线评估的时候有多种方法可以实现上面的要求,这里介绍一些常用的方法。

留出法

留出法(hold-out)是指将数据集 D 划分成两份互斥的数据集,一份作为训练集 S,一份作为测试集 T,在 S 上训练模型,在 T 上评估模型效果。

留出法的优点是简单好实现,但是也会有一些明显的缺点。比如说划分后的训练集和测试集的大小会严重影响模型最终的评估结果。如果说训练集 S 比较大,测试集 T 比较小,那么评估结果的不够稳定准确,可信度较低;如果说训练集 S 比较小,测试集 T 比较大,那么得到的模型很可能与全量数据集 D 得到的模型有很大的差别,这就降低了评估结果的真实性。通常的做法是,将全量数据集的 2/3~4/5的样本作为训练集,剩余样本作为测试集。

除了划分得到的训练集 S 和测试集 T 的数据量会影响评估结果外,它们的数据分布也会影响评估结果,尽量保证训练集 S 和测试集 T 的数据分布一致,避免由于数据划分引入额外的偏差而对最终结果产生影响。举个具体的例子来说明,有一个包含了 1500 条正样本和 1500 条负样本的数据集,现在使用二分类模型来进行自动分类,假设将 1/3 的数据作为测试集,应该使得测试集正负样本均在 500 条左右;如果测试集由 50 条正样本和 950 条负样本组成,那么评估结果将会因为样本分布差异而导致很大的偏差。

因此,考虑到单次留出法的结果往往不够稳定可靠,我们一般会进行多次留出法实验,每次随机划分,最终将多次得到的实验结论进行平均。

但是在实际工作中,如果不分场景,任何时候都是用随机划分数据集可能会导致一些其他的问题,比如说数据泄露(穿越问题)等。

交叉验证法

交叉验证法(cross validation)先将数据集 D 划分成 k 分互斥的数据子集,即

7162733d960367fa78cd30f6ac809bf6f3cc6c25
,一般每个数据子集的个数基本相近、数据分布基本一致。然后每次用一份数据子集作为测试集,其余的 k-1 份数据子集作为训练集,迭代 k 轮得到 k 个模型,最后将将 k 次的评估结果汇总求平均值得到最终的评估结果。上面说的有点抽象,来看一个 k 为 10 的时候的交叉验证示意图。

5674bfc3d37673ca1dfd2ad5e783e64af2ecb163

很明显,交叉验证评估结果的稳定性和保真性在很大程度上取决于 k 值的大小,所以交叉验证也叫做k 折交叉验证(k-fold cross validation)。k 常用的取值有 5、10 和 20。

假定数据集 D 中包含了 m 个样本,若令 k=m,则得到了交叉验证法中的一个特例:留一法(leave-one-out,简称 LOO)。留一法的优缺点都很明显。训练 m 个模型,每个模型基本上用到了全部的数据,得到的模型与全部数据集 D 得到的模型更接近,并且不再受随机样本划分方式的影响。但是当样本太多时,即 m 很大时,计算成本非常高。

知道了留一法之后,我们再来看下一个新的评估方法:留P法(leave-p-out,简称LPO)。留P法是每次留下 p 个样本作为测试集,而从 m 个元素中选择 p 个元素有中可能,因此它的计算开销远远高于留一法。

由于存在不平衡分类问题(分类问题中样本里包含的标签的数量失衡,比如二分类中样本量包含的正负样本比例为10:1),基于此,存在一种叫做分层 k 折交叉验证法(stratified-k-fold)。这种方法对每个类别进行 k 折划分,使得每份数据子集中各类别的数据分布与完整数据集分布相一致。比如二分类中进行分层5折交叉验证,正样本有 300 条,负样本有 30 条,将数据划分成 5 分,并且每份数据中有 60 条正样本,6 条负样本。

自助法

自助法(bootstrapping)以自主采样(bootstrap sampling)为基础,使用有放回的重复采样的方式进行训练集、测试集的构建。比如为了构建 m 条样本的训练集,每次从数据集 D 中采样放入训练集,然后有放回重新采样,重复 m 次得到 m 条样本的训练集,然后将将没有出现过的样本作为测试集。

很明显,有一些样本在会被重复采样,多次出现在训练集中,而另外一些样本在训练集从未出现。我们可以计算样本从未在训练集中出现的概率。在每次采样

时,每条样本经过 m 次始终没有被采到的概率是


dcafa5df2cf9ec347a1c093b6a5c9e6447f18652

,当 m 无穷大时,取极限可得到。

051145d12f4c7beac18f129187770d693c052125

这也就意味着,当数据量很大时,大约有 36.8% 的样本不会出现在训练集中,也就是这些样本都会作为测试集。

留出法和交叉验证法在训练模型时用的数据都只是整个数据集 D 的一个自己,得到的模型会因为训练集大小不一致导致一定的偏差。而自助法能够更好地解决这个问题。但自助法改变了初始数据集的分布,会引入估计偏差,所以在数据量足够时,一般采用留出法和交叉验证法。

练习题

看完这篇文章,我们来做几道练习题来检验下学习成果:

  1. 试证明自助法中对 m 个样本进行 m 次自助采样,当 m 趋于无穷大时,为什么有 36.8% 的样本从未被选择过?


原文发布时间为:2018-10-31
本文作者: AI派
本文来自云栖社区合作伙伴“ AI派”,了解相关信息可以关注“ AI派”。
相关文章
|
5月前
|
机器学习/深度学习 数据采集 算法
量子机器学习入门:三种数据编码方法对比与应用
在量子机器学习中,数据编码方式决定了量子模型如何理解和处理信息。本文详解角度编码、振幅编码与基础编码三种方法,分析其原理、实现及适用场景,帮助读者选择最适合的编码策略,提升量子模型性能。
422 8
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
456 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1396 6
|
机器学习/深度学习 数据采集 算法
Java 大视界 -- Java 大数据机器学习模型在金融衍生品定价中的创新方法与实践(166)
本文围绕 Java 大数据机器学习模型在金融衍生品定价中的应用展开,分析定价现状与挑战,阐述技术原理与应用,结合真实案例与代码给出实操方案,助力提升金融衍生品定价的准确性与效率。
Java 大视界 -- Java 大数据机器学习模型在金融衍生品定价中的创新方法与实践(166)
|
11月前
|
人工智能 JSON 自然语言处理
如何用大模型评估大模型——PAI-Judge裁判员大语言模型的实现简介
阿里云人工智能平台 PAI 推出 PAI-Judge 裁判员大模型,为用户构建符合应用场景的多维度、细粒度的评测体系,支持单模型评测和双模型竞技两种模式,允许用户自定义参数,实现准确、灵活、高效的模型自动化评测,为模型迭代优化提供数据支撑。 相比通用大模型尤其在回答确定性/数学类问题、角色扮演、创意文体写作、翻译等场景下,PAI-Judge 系列模型表现优异,可以直接用于大模型的评估与质检。
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
2277 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
784 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
704 8
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
505 6
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
343 1

热门文章

最新文章