大数据算法_Python、大数据、算法……不做开发的AI程序员该学些什么?

dc0235e790de96ffee141fcd9de06f9f.gif 关注我们丨文末赠书

机器学习,作为一种被认为可以让系统具有学习能力的新技术,正被越来越多地应用于各大互联网企业的研发场景中。从本质上来说,它是一套被编写出的算法系统,当机器学习的解决方案在业务问题的建模和优化中发挥的作用越来越大时,机器学习算法和模型的错误就很可能会给项目带来巨大的损失。

这迫切需要系统化测试来保障项目质量,对机器学习系统的测试技术成为从业者必须关注的重点。但在当前,机器学习测试仍然是一个新兴的技术方向,市面上的课程和资料都很匮乏,从业者该如何更好快速入门?

入门AI测试的学习路线

要学习一门技术,首先需要对这个领域有充分的了解,培养学习的兴趣,然后结合一些实践项目选择一门由浅入深的课程来不断地学习和实践。 

1)学习 AI 相关的基础知识

首先学习数学方面的知识。 

数学基础知识蕴含着处理人工智能问题的基本思想与方法,也是理解复杂算法的基础。建议所学的内容为:

△ 线性代数;

△ 概率论与数理统计;

△ 最优化理论; 

△ 信息论; 

△ 形式逻辑; 

△ 离散数学。 

其次掌握一门编程语言。 

掌握编程语言并熟练应用是非常重要的。Python 在人工智能领域应用非常广,Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言,也是很多程序员的入门编程语言。建议学习 Python 的内容为:

△ Python 基础及相关开发包;

△ 数据质量分析; 

△ 数据清理和准备; 

△ 数据处理,例如排序、过滤、汇总和其他功能; 

△ 数据可视化。 

在学习完相关的编程基础知识后,就可以进一步学习与 AI 相关的知识点了(例如大数据相关的技术、机器学习相关的算法),并在学习后通过项目实践进一步加深理解。

2)AI 学习 + 开源项目练习;

必须掌握大数据技术。每个机器学习工程师都必须知道如何处理大数据系统,且能够有效地存储、访问和处理大数据。掌握大数据技术应该学习内容如下: 

△ 大数据概述和生态系统; 

△ 大数据预处理,包括数据清理、数据集成、数据转换、数据规约;

△ 大数据技术组件,包括 HDFS、MapReduce、Pig 和 Hive 等;

△ 大数据分析,包括可视化分析、数据挖掘、预测性分析等。机器学习算法中包含以下几个方面。 

△ 特征工程相关内容:数据预处理、特征分析。

△ 监督学习:支持向量机、决策树、朴素贝叶斯分类、K 近邻算法等。

△ 非监督学习:主成分分析、奇异值分析、K 均值聚类(K-Means)等。

△ 强化学习:Q-learning 等。 

初级项目练习中包含的内容有以下几个方面。选择一些开源项目进行实践,用机器学习解决具体问题(如图片识别等);把机器学习当作一个黑盒子来处理,选择一个应用方向,可以是图像(计算机视觉)、音频(语音识别)或者文本(自然语言处理),推荐读者选择图像领域,Github上相关的开源项目较多。 

3)项目实践 + 深入学习 

我们对机器学习算法及应用领域有了基础的认识后,接下来可以深入学习并研究机器学习算法。参考机器学习项目的流程,不断地尝试各种算法进行模型训练。

参与 AI 相关项目工作,解决实际业务问题,在项目实战中深入理解机器学习原理。

与传统软件测试的区别

其实,机器学习的模型服务测试与传统软件的测试有很多相似之处,二者的方法大体相同,但在一些细微之处会有差别。

我们从两个常见的模型测试方法中看看相同点和差异吧!

1)单元测试

单元测试(即对程序的基本组成单元进行测试)主要采用白盒测试等方法。白盒测试也叫结构测试或逻辑驱动测试,通过审核代码逻辑设计,按照代码流程测试内部结构,确保代码中 的每个分支都能按照预期正确工作,并返回相应结果。之所以称作白盒测试,就是因为测试人员需要了解代码内部的逻辑,并根据内部逻辑对每一个分支进行覆盖测试。除了保障程序中基本单元的功能逻辑无误,白盒测试还要确保程序设计健壮及易扩展、流程及配置正确规范、注释清晰明了、算法高效等,即执行静态代码检查。 

在单元测试阶段,模型服务测试与传统软件测试基本相同,没有特殊差异,主要包含以下测试点。 

项目规范检查。启动一个项目,必然要事先设定代码开发的技术规范。大到项目的架构设计,小到代码缩进或者变量命名等,都有一定的规范约束,否则不便于后续维护和开发。开发要按照技术规范来执行,测试同样要参照技术规范,从而验证项目的代码是否符合规定,这也是进行代码检查的一部分。

静态代码检查。根据业务需求以及框架设计等对代码进行检查,这样能够发现一些隐藏的 Bug,如配置错误、无用代码分支(永远不会触发)、类设计缺陷等。

代码逻辑覆盖。进行代码检查的时候要覆盖每一个分支点,确保代码分支没有风险问题,且要注意编程语言的特性(例如 Python 属于动态语言,可以直接使用变量,无须声明变量类型)。在下面这段代码中,我们没有定义变量status,在没有触发 到else分支时,程序不会报错,当触发该分支时才会报该变量未定义异常。

算法高效性分析。传统软件对性能一般都有很高的要求,而模型服务涉及大量的数学计算,对性能方面有更高的要求。因此在进行单元测试时,需要关注每一个算法的高 效性,例如多层循环的优化、使用缓存等。

服务异常处理。服务需要具备高稳定性,因此应该对可能出现的各种异常进行相应的 处理(如返回错误信息、抛出异常等),确保程序能够长期稳定运行。一般编程语言都带有单元测试框架,如Python中的单元测试框架unittest使用也很 简单。首先导入unittest包,创建一个继承于unittest.TestCase的测试类,并在该类 中定义以test_开头的测试方法,在该方法中调用需要测试的方法即可。 

2)集成测试

集成测试(即对执行过单元测试的各模块进行联调),确保模块间调用的正确性。该阶段使用灰盒测试方法。灰盒测试介于白盒测试与黑盒测试之间,与白盒测试一样需要关注模块内部的逻辑,但是关注度比白盒测试要少一些,一般不会具体到模块内部的实现,而只关注运行状态。 

在集成测试阶段,模型服务测试与传统软件测试基本相同,但是也有一些差异。接口测试是集成测试阶段非常关键的一步,在集成到接口层面时,需要在接口功能、接口 diff、数据校验等方面进行测试。

接口功能测试。借用各种工具(如Postman、JMeter等)或者编写代码模拟HTTP请求的发送与接收功能,通过请求结果与预期结果进行对比来验证该接口功能正确与否。而当我们能够抽象出接口的共同点之后,接口自动化测试就是一个很不错的选择。 

接口diff测试。接口diff测试是接口功能测试的补充,是指在不同的版本或者环境下,对比相同接口的返回结果。例如,当模型进行版本迭代或者进行接口改造时,可以在测试环境和准线上环境中分别部署服务接口,进行接口diff测试,这有助于对结果进行分析验证。 

数据校验。模型服务测试与传统软件测试也有一些不同之处。以模型服务框架为例,数据解析、特征库,以及模型库等都是子模块,集成测试就是确保它们之间的调用的正确性和稳定性。传统软件程序中接口模块返回的数据一般较小(例如返回一个变量值、一个字符串或者一个类对象等),很容易就能确认子模块接口是否返回正确。而模型服务接口在很多的情况下会返回成千上万个字段信息,如从数据解析模块到特征库模块的调用会传输一个人的所有信息(包括基本信息、教育信息、工作履历、往来业务信息等各种信息块),而每一个信息块又包含众多数据(如身高、体重等)。在获取到这些接口返回结果后,我们要验证返回数据的质(返回数据格式正确、易解析)与量(返回数据要全)。数据解析模块对返回的数据进行解析之后再去调用特征库,诚然,特征库接口返回的格式与数据解析模块返回的数据格式一般是不一样的,因此还需要进行特征解析,最后再调用模型库进行决策。

上面只简单介绍了两种测试方法在传统软件领域和在机器学习测试领域的区别,如果想系统深入的学习机器学习测试,这些内容还远远不够。

《机器学习测试入门与实践》———作为业界第一本AI测试著作,精选15个AI测试要点,从零开始,帮助想要做测试的同学全面了解机器学习测试,涵盖5个技术主题,大数据、模型算法、模型评测、工程架构、智能化测试,学习路线清晰,帮助读者了解机器学习是如何工作的,了解机器学习的质量保障是如何进行的,是入门机器学习测试的必读书目。

  77faab58fc813ed6d8d69a63067ef1b0.png《机器学习测试入门与实践》

参考文献:《机器学习测试入门与实践》第8章和第15章

-END-

644e25bee7e99fae5e7a25a63b53b648.png e88e9dcd0d3aaaf639c9a1c8ee9332f9.png

Epubit   Welfare

异步福利

邀请好友关注“异步图书”领取纸书1本,立刻填表抢座。

【点击此处填写表单】

Today's Interaction

今日互动

你对AI测试感兴趣吗?

在留言区参与互动,并点击在看和转发活动到朋友圈,我们将选1名读者获得赠书1本,截止时间11月15日。

e88e9dcd0d3aaaf639c9a1c8ee9332f9.png d75e5b2310e2a20cea03d9f81903d3f3.png 扫码关注「异步图书」 聊聊图书背后的故事 回复“进群”入群领新手福利 异步VIP会员、技术分享、学习交流、赠书活动 98b7d7b01eede362c95a92f5a1d9466d.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值