机器学习:软件工程方法与实现

张春强 张和平 唐振
前言 为什么要写这本书 近几年,机器学习爆发,犹如前些年大数据技术爆发一样,一家企业如果没有相关的应用都不敢说自己是科技公司,业界普遍朝着这个方向前进或转型。 互联网企业是机器学习应用的传统阵营,在推荐算法以及图像、视频和自然语言处理等方面都有成熟的应用,而近几年快速发展的互联网金融行业可谓是异军突起,推动了很多机器学习应用的落地,比如风控模型、反欺诈模型、全生命周期的信贷模型等。由于技术、行业、政策的综合因素,大量毕业生及相关行业工作者涌入或转入机器学习领域。大家的背景不一:有的人有计算机专业、统计专业、金融或经济相关专业背景;有的是由数据分析或软件开发转入;有的则是由传统银行转入。我们发现,大多数从业者并不清楚机器学习如何与系统应用相结合,不了解模型如何上线,不能编写良好的机器学习代码,不善于模块化复用,缺少软件开发常识和软件质量意识,忽视了机器学习实践中的软件工程属性。 机器学习从业者有时会自嘲为“调包侠”(只会调用现成的算法包),缺少更深入的智力参与。这就像“码农”和“软件工程师”的区别:前者是编写代码的“机器”(程序员自嘲式说法),拿到需求和功能就开始写代码,可将其定义为初级程序员;后者则会进行一定的工程设计和通用性考虑,包括模块设计、接口设计,以及开发和测试、升级和可维护性等方面的考量等。在机器学习领域,软件工程师即机器学习工程师或模型工程师,机器学习算法工程师需要软件工程素养,需将算法有效应用于实践。 一名优秀的机器学习工程师一定是一名合格的程序员,需要具备相应的软件工程素养。 在常规的软件开发过程中,程序员有属于自己的开发环境——挑选自己喜欢的编辑器,配置专属的开发环境。在机器学习建模中,Jupyter Notebook几乎已成为这个领域的标准编辑器,而在更为工程化或标准化的环境中,Docker可用于构建数据科学项目的工程环境。当我们将这些工程化的软件应用…