前言
大学毕业后,我先后在加利福尼亚和中国大陆的Intel公司工作。最初,我打算工作两年之后回学校读研究生,但是幸福时光飞逝而过,转眼就过去了六年。那时,我意识到我必须回到校园。我不想上夜校或进行在线学习,我就想坐在大学校园里吸纳学校传授的所有知识。在大学里,最好的方面不是你研修的课程或从事的研究,而是一些外围活动:与人会面、参加研讨会、加入组织、旁听课程,以及学习未知的知识。
在2008年,我帮助筹备一个招聘会。我同一个大型金融机构的人交谈,他们希望我去应聘他们机构的一个对信用建模(判断某人是否会偿还贷款)的岗位。他们问我对随机分析了解多少,那时,我并不能确定“随机”一词的意思。他们提出的工作地点令我无法接受,所以我决定不再考虑了。但是,他们说的“随机”让我很感兴趣,于是我拿来课程目录,寻找含有“随机”字样的课程,我看到了“离散随机系统”。我没有注册就直接旁听了这门课,完成课后作业,参加考试,最终被授课教授发现。但是她很仁慈,让我继续学习,这让我非常感激。上这门课,是我第一次看到将概率应用到算法中。在这之前,我见过一些算法将平均值作为外部输入,但这次不同,方差和均值都是这些算法中的内部值。这门课主要讨论时间序列数据,其中每一段数据都是一个均匀间隔样本。我还找到了名称中包含“机器学习”的另一门课程。该课程中的数据并不假设满足时间的均匀间隔分布,它包含更多的算法,但严谨性有所降低。再后来我意识到,在经济系、电子工程系和计算机科学系的课程中都会讲授类似的算法。
2009年初,我顺利毕业,并在硅谷谋得了一份软件咨询的工作。接下来的两年,我先后在涉及不同技术的八家公司工作,发现了最终构成这本书主题的两种趋势:第一,为了开发出竞争力强的应用,不能仅仅连接数据源,而需要做更多事情;第二,用人单位希望员工既懂理论也能编程。
程序员的大部分工作可以类比于连接管道,所不同的是,程序员连接的是数据流,这也为人们带了巨大的财富。举一个例子,我们要开发一个在线出售商品的应用,其中主要部分是允许用户来发布商品并浏览其他人发布的商品。为此,我们需要建立一个Web表单,允许用户输入所售商品的信息,然后将该信息传到一个数据存储区。要让用户看到其他用户所售商品的信息,就要从数据存储区获取这些数据并适当地显示出来。我可以确信,人们会通过这种方式挣钱,但是如果让要应用更好,需要加入一些智能因素。这些智能因素包括自动删除不适当的发布信息、检测不正当交易、给出用户可能喜欢的商品以及预测网站的流量等。为了实现这些目标,我们需要应用机器学习方法。对于最终用户而言,他们并不了解幕后的“魔法”,他们关心的是应用能有效运行,这也是好产品的标志。
一个机构会雇用一些理论家(思考者)以及一些做实际工作的人(执行者)。前者可能会将大部分时间花在学术工作上,他们的日常工作就是基于论文产生思路,然后通过高级工具或数学进行建模。后者则通过编写代码与真实世界交互,处理非理想世界中的瑕疵,比如崩溃的机器或者带噪声的数据。完全区分这两类人并不是个好想法,很多成功的机构都认识到这一点。(精益生产的一个原则就是,思考者应该自己动手去做实际工作。)当招聘经费有限时,谁更能得到工作,思考者还是执行者?很可能是执行者,但是现实中用人单位希望两种人都要。很多事情都需要做,但当应用需要更高要求的算法时,那么需要的人员就必须能够阅读论文,领会论文思路并通过代码实现,如此反复下去。
在这之前,我没有看到在机器学习算法方面缩小思考者和执行者之间差距的书籍。本书的目的就是填补这个空白,同时介绍机器学习算法的使用,使得读者能够构建更成功的应用。