机器学习模型测试-入门篇

经常被问,机器学习模型怎么测试呢?和传统软件测试有啥差别?
与传统软件测试的差别

测试是验证被测对象是否符合预期。
不论是传统软件还是机器学习,测试目的都是检验被测对象是否符合预期。不同点在于:
  • 传统测试,检测程序的输出结果是否符合预期的正确值。通过对比实际输出与预期输出,相同则是通过,否则就是缺陷。
  • 模型却不同,模型的结果预先不知且不确定,所以,不同于传统测试。模型测试是通过检验一组带标签的数据的模型结果是否符合预期的准确率或误差,来评估模型的好坏。

    机器学习模型测试-入门篇
    文章图片
    等于确实值 vs 满足概率
传统测试:检测程序的输出结果是否符合预期的正确值。
模型验证:通过检验一组带标签的数据的模型结果是否符合预期的准确率或误差,来评估模型的好坏。
模型测试有套路
数据 + 算法 = > 模型
通俗地讲,所谓模型,就是把大量的数据喂给算法,然后自行修炼成才。
测试模型,就是检验自行修炼成才的她,是否达到预期的标准,达到优秀标准可毕业(发布模型);如修炼不达标,则打回重新修炼。听起来不太好懂,先来看个日常生活中的例子。
套路引子
现有大量的动物图片,一位小朋友妞妞通过看这些动物图片就可以学会认猫咪。
妞妞的大脑结构是个黑盒,怎么运作并不清楚,只知道她读过一定量带标签(是猫为1,不是猫为0)的动物图片就能自学成才,识别出猫咪。
那么,怎么验证妞妞是真得学会了认猫咪?
先选考题:
  • 挑选大量她看过的图片(猫与非猫)
  • 再挑大量她没看过的图片(猫与非猫)
开始测验
  • 把妞妞看过的图拿来测试,并记录结果
  • 把妞妞没看过的图拿来测试,并记录结果
评估结果
  • 统计:测试看过的图的准确率
    • 比如是50%的准确率,说明她啥都没学,乱猜的答案。
    • 比如是95%的准确率。说明她真得学习了,但不确定是不是死记硬背的。
  • 统计:测试没看过的图的准备率
    • 如果测试看过的图,准确率是95%;再测试没见过的图,准确率是50%,那么,表明她是死记硬背,并没学会。
    • 如果测试看过的图,准确率是95%;再测试没见过的题,准确率也是95%以上的正确率。说明她真的学会了。
这里的妞妞就是机器学习模型的化身,检验妞妞是否学会识别猫咪以及识别的准不准的这个套路,就是模型测试的套路,一样一样滴。所以,模型测试就是通过检验一组带标签的数据的模型结果是否符合预期的评估指标(如:准确率)。
【特别注意】
  • 是“一组”带标签的数据、而不是“单一”或“少量”。
    因为一个或几个答对,不能说明真的学会了,也许是瞎蒙对的,有一定数量下的高正确率,才可充分说明是真的学会了。
  • 是“带标签”的数据,而且不是没标签的数据。
    因为不带标签,测试结果对不对无法断定,所以,一定的是用带标签的数据来测试,做模型评估。
专业术语
  • 评价指标
    评价指标也称性能度量。在机器学习领域,评估模型好与不好,用的是就是各种评价指标,通常不同的算法有不同的评价指标。常见的准确率、错误率、召回率等等,比如:准确率越高模型性能越好。
  • 泛化能力
    是指机器学习算法对于没有见过的样本的识别能力。好比让妞妞识别她之前没看过的图片,就是看她的泛化能力。
  • 过拟合
    当模型在训练集上表现很好,但在新样本上误差很大,称之为 “过拟合”。通常是由于模型的复杂度要高于实际的问题,导致模型死记硬背没有理解背后的规律。好比妞妞识别训练时看过的图片表现很好,但没见过的图片识别不准误差很大,就是过拟合。
  • 欠拟合
    和过拟合相对的现象,模型的复杂度较低,没法很好的学习到数据背后的规律。可理解为脑子过于简单、啥也没学到。
通过妞妞的例子,初识了机器学习模型测试套路以及专业术语,接下来细看机器学习模型测试。
机器学习模型测试
构建模型过程
纵观模型的构建过程,有三步:
  • 拆分数据集
    数据集经过特征工程后,需要拆分出训练集与测试集,训练集用来训练模型,测试集是用来验证模型性能表现。好比妞妞学习时看的图片用作训练集;用没学过的图片作为测试集。
  • 训练模型
    把训练集传入,算法进行训练,训练结束生成模型文件。
  • 评估模型
    模型训练完成后,会用测试集验证模型,通过评价指标来评估模型性能的好坏。比如,准确率越高模型性能越好。当然实际项目中,会使用多个指标综合评估。
机器学习模型测试-入门篇
文章图片
构建模型 模型测试三步走
测试施展拳脚的位置也随着构建模型的三个步骤切入。
第一步 拆分数据集
通过妞妞的例子也了解到,模型评估很关键的一点就是测试集,那么,测试集的准备有哪些方法呢?
在机器学习中,测试集是通过对整个数据集的划分选取,一部分用于训练,另一部分用来测试。划分必须满足以下条件:
  • 训练集和测试集的分布要与样本真实分布一致
  • 训练集和测试集要互斥,即两个子集之间没有交集。
划分数据集可以选择采用:留出法,交叉验证法及自助法。
  • 留出法
    直接将数据集划分为两个互斥的集合,其中一个集合作为训练集,另一个作为测试集。通常选择 70% 数据作为训练集,30% 作为测试集。
  • 交叉验证法
    交叉验证法(Cross Validation)的基础思路和留出法大致相同,都是讲数据集划分成训练集和测试集,而在划分细节上差异会比较大,而且交叉验证法还有诸多不同的分类形式。(比如:K-折交叉验证、留P验证等)
  • 自助法
    数据集分类时,如果我们对整体样本n进行n次有放回抽样得到n个样本,然后把抽到的n个样本作为训练集,其中会出现部分样本重复,同时有一部分样本一次也没被抽到,这部分作为测试集。
在测试过程中,根据实际情况,选取适合的拆分数据集方式,这也是测试人员可下功夫的地方,很多时候需要和数据科学家甚至客户一起沟通确定。
第二步 模型训练
读取数据特征、算法参数,开始训练,输出模型文件。
需要说明一下,算法不做测试,假设它是经过测试验证的。因为,大多机器学习领域用到的算法都是现成的,非常成熟了。如决策数、随机森林等。然而,这一环节需要测试的逻辑是:
  • 测试读取特征成功,且经过训练,成功输出模型
  • 测试训练模型的用时,资源占用(即性能测试)。
本次训练出来的模型性能好与不好,还不清楚,等用测试集测试检验后才可知。
第三步 评估结果
训练好的模型,要通过评价指标来验证模型性能的好坏。模型性能好可发布模型,模型性能不好需要重新训练。
在这里,通常需要和数据科学家以及客户一起制定评估指标,比如准确率要达到95%、召回率要达到85%才可通过。测试人员关注点:
  • 模型评估指标(与数据科学家及客户)
  • 如果指标自定义,还需要测试验证自定义的指标正确性
  • 评估时的性能测试
小结
本篇简单介绍了一些入门机器学习测试的相关知识,一句话总结:模型测试就好比学生考试。题库选题、测验、评分,最后决定是否升学。
【机器学习模型测试-入门篇】非常感谢您的阅读,我们下期再见。预告下期分享机器学习项目测试策略篇。

    推荐阅读