| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 谈谈机器学习AI模型测试与评估方法分析 -> 正文阅读 |
|
[人工智能]谈谈机器学习AI模型测试与评估方法分析 |
随着数字化转型与人工智能发展,AI应用软件层出不穷,人们虽然理解人工智能趋势,但是,企业往往很难接受这样AI应用软件,其中质疑点主要有:
接下来,本文将从机器学习模型开发过程、AI应用软件开发过程,结合测试过程,谈谈如何进行机器学习AI模型测试与模型评估方法。
1. 机器学习AI应用软件开发过程与测试过程AI应用软件开发过程(不含直接调用算法API接口软件)与传统信息化应用软件、专业软件对比,有个显著的差别,就是算法模型学习过程,通过大数据训练算法模型,算法模型通经过测试评估后,才能与应用软件有机集成上线应用。 另外,AI应用软件所使用的数据,一般需要经过数据预处理,方为算法模型所使用。 对于开发过程中的算法模型学习和数据预处理环节,测试过程则在传统的功能、系统测试基础上,额外增加“测试评估算法模型“”。 随着人工智能的发展与应用,传统的功能测试策略对于算法测试而言,心有余而力不足,难以满足对人工智能 (AI) 的质量保障。 2. AI应用软件测试过程2.1. 传统应用软件测试以传统应用软件为例,测试过程包括测试计划、编写测试用例、搭建测试环境、执行测试、编写测试报告、召开里程碑会议等主要节点。
从测试数据创建的时机来看,主要分为On-the-fly(实时创建)和Out-of-box(事先创建测试数据)两类方法。这两类方法都有各自的优缺点,以及适用的最佳场景。 2.2. AI应用测试过程以测试人员视角,AI应用测试过程与传统软件测试过程对比,增加了算法模型测试任务内容,如何进行算法模型测试,AI应用软件测试。
3. 算法模型测试关键点3.1. 算法测试集数据准备3.1.1. 测试集准备方法3.1.1.1. 留出法划分数据集(hold-out)留出法是比较常用的方法,是指直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另外一个作为测试集T,即D=S∪T,S∩T=空集。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。 另外,对于留出法,除了划分为测试集,验证集还有两种划分方式。
3.1.1.2. 交叉验证法k 折交叉验证通过对 k 个不同分组训练的结果进行平均来减少方差,因此模型的性能对数据的划分就不那么敏感。
3.1.1.3. 自助法在统计学中,自助法(Bootstrap Method,Bootstrapping或自助抽样法)是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。 数据集D中存在m个样本,运用自助抽样法,对数据集进行有放回的抽样m次后,其中始终不被采到的概率为 ( 1 ? 1 m ) m (1- \frac{1}{m})^m (1?m1?)m,取极限得到: lim ? ( 1 ? 1 m ) m = 1 e ≈ 0.368 \lim(1-\frac{1}{m})^m=\frac{1}{e}\approx0.368 lim(1?m1?)m=e1?≈0.368 即通过自主采样,初始训练集D中约有36.8%的样本未出现在采样数据集D’中。于是可将D’用作训练集,D/D’用作测试集。 自助法在数据集小,难以划分训练/测试集时有用。 3.1.2. 测试集规范要求测试集的准备对于整体算法测试而言非常重要,一般测试集准备过程中需考虑以下几点:
3.1.2.1. 测试集的覆盖度如果,测试集准备只是随机的选取测试数据,很容易造成测试结果的失真,降低算法模型评估结果的可靠性。 好比传统软件功能测试,根据功能测试设计,构造对应的数据进行测试覆盖。算法模型测试亦然,以人脸检测算法而言,除了考虑选取正样本、负样本外,还需要考虑正样本中人脸特征的覆盖,如人脸占比、模糊度、光照、姿态(角度)、完整性(遮挡)等特征。 以此类比,构建客户发展预测的测试集(包括训练集),最后按客群分布,再随机抽取训练集,比如按客户会员时长、消费能力、交易间隔、油品偏好、价格敏感、储值习惯等特征。 另外,除了数据特征的覆盖,也需要考虑数据来源的覆盖,结合实际应用环境、场景的数据进行数据模拟、准备。 此外,关于测试数据的数量,一般来讲测试数据量越多越能客观的反映算法的真实效果,但出于测试成本的考虑,不能穷其尽,例如选取了2万左右的图片进行测试、选取10万会员客户测试。 3.1.2.2. 测试集的独立性测试集的独立性主要考虑测试数据集相互干扰导致测试结果的失真风险。 3.1.2.3. 测试集的准确性数据集的准确性一般指的是数据标注的准确性,比如Jack的照片不应标注为Tom,照片模糊的特征不应标注为清晰。如果数据标注错误,那么直接影响了算法模型指标计算的结果。 3.2. 算法模型组件测试构建机器学习模型的基本过程以及过程中涉及的主要组件如下图所示。 3.2.1. 数据机器学习系统的行为在很大程度上取决于数据。数据中的错误会影响生成的模型的质量,并且可能会被放大,在一段时间内产生更严重的问题。数据中的错误检测检查诸如数据是否足够用于训练或测试模型(也称为数据的完整性)、数据是否代表未来数据、数据是否包含大量噪声(例如有偏见的标签)、训练数据和测试数据之间是否存在偏差、以及是否存在可能影响模型性能的数据中毒或敌意信息等问题。 3.2.1. 框架框架测试检查机器学习的框架是否有可能导致最终系统出现问题的错误。 3.2.3. 学习程序学习程序可以分为两个部分:由开发人员设计或从框架中选择的算法,以及开发人员为实现、部署或配置算法而编写的实际代码。学习程序中可能会出现错误,这可能是因为算法设计、选择或配置不正确,或者是因为开发人员在实现所设计的算法时犯了 错误。 3.3. 算法效果测试(模型评估指标)在机器学习、深度学习、数据挖掘领域,工业界往往会根据实际的业务场景拟定相应的业务指标。对于算法模型一般分为分类问题、回归问题、优化目标等评估指标。 3.3.1. 评估指标分类3.3.1.1. 分类问题评估指标其实,分类问题评估指标是适合多分类情况的,只是举例往往是二分类的,本文虽然介绍指标时是以二分类开始,但是公式可以拓展到多分类。
3.3.1.2. 回归问题评估指标:
3.3.1.3. 优化目标指标:
3.3.2. 评估指标详解3.3.2.1. 混淆矩阵混淆矩阵(confusion matrix)也称误差矩阵,是表示精度评价的一种标准格式,用 n n n行 n n n列的矩阵形式来表示。在人工智能中,特别用于监督学习衡量的是一个分类器分类的准确程度,比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。 混淆矩阵适用于多分类器的问题,本文为了让读者理解更加容易,以手写数字“5”分类识别二元分类的混淆矩阵为例说明。
3.3.2.2. 准确率P、召回率R、F1 值如果我们想知道类别之间相互误分的情况,查看是否有特定的类别相互混淆,就可以用混淆矩阵画出分类的详细预测结果。对于包含多个类别的任务,可以很清晰的反映各类别之间的错分概率。
3.3.2.3. ROC与AUC曲线ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为“受试者工作特征曲线”。 ROC曲线的横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR)。FPR和TPR的计算方法分别为:
ROC是由点(TPR,FPR)组成的曲线,AUC就是ROC的面积。 一般来说,AUC越大越好;如果TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好;ROC是光滑的,那么基本可以判断没有太大的overfitting?。
3.4. 单元测试机器学习模型不好做单元测试,核心问题就是因为机器学习缺乏稳定性,导致其中间过程和最终结果不平稳。原因如下:
什么情况下可以做单元测试? 机器学习框架最好要有单元测试的,如Tensorflow、Theano之类的深度学习框架。不过从这一类框架的单元测试也可以看到其测试逻辑:模块最小化。 例如使用TensorFlowTestCase进行单元测试。 3.5. 其他测试指标解释
4. 总结4.1. 传统软件测试与AI应用软件测试对比分析
4.2. 测试数据与模型评估方法是AI应用软件测试核心机器学习AI应用软件系统作为软件系统,其测试大多方面与软件工程中已经广泛研究的众所周知的解决方案是相同的,但机器学习系统的统计性质及其自主决策的能力为软件测试提出了额外的、具有挑战性的研究问题:
由于编者水平有限,欢迎讨论研究。 参考: [1]. 软件测试开发技术栈. 从人工智能 (AI)发展应用看算法测试的测试策略. 今日头条. 2019.07 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:55:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |