第一个要问你老板的问题是商业目标到底是什么;建立一个模型可能并不是最终的目标。公司期望如何使用这个模型,并从这个模型中获益?这很重要,因为它将决定你如何构建问题,你将选择什么样的算法,你将用什么性能度量来评估你的模型,以及你应该花多少精力来调整它。
你的老板回答说你的模型的输出(预测一个地区的房价的中值),将联同其他的信号一起(向机器学习系统输入的信息通常被称为“信号”,这是Shannon的信息理论:你需要高比例的信号/噪声),将被输入到另一个机器学习系统中(见图2-2)。这个下游系统将决定是否值得投资于某个特定区域。这是至关重要的,因为它直接影响收入。
图2 - 2 一个用于房地产投资的机器学习管道。
Pipelines(管道)
一系列的数据处理组件被称为数据管道(data pipeline)。管道在机器学习系统中非常常见,因为需要处理很多的数据以及应用很多的数据转换。
通常异步的运行组件。每个组件获取大量数据,处理它,并在另一个数据存储中输出结果,然后在某个时间之后,管道中的下一个组件会提取这些数据并输出它自己的输出,等等。每个组件都是相互独立的:组件之间的接口就是数据存储。这使得系统非常容易理解(在数据流图的帮助下),不同的团队可以只关注不同的组件。此外,如果一个组件被分解,下游组件通常可以继续正常运行(至少在一段时间内是可以的),只需要使用损坏组件的最后一个输出。这使得体系结构非常健壮。
另一方面,如果不执行适当的监视,一个损坏的组件可能会被忽略一段时间。数据变得陈旧,整个系统的性能下降。
下一个要问的问题是当前的解决方案是什么样子的(如果有的话)。它通常会给你一个实现的参考,以及如何解决这个问题的见解。你的老板回答说,目前地区房价是由专家手工估算的:一个团队收集一个地区的最新信息(不包括房价中位数),他们使用复杂的规则来估算。这既费钱又费时,而且他们的估计也不太好;他们标准的错误率约为15%。
好的,有了这些信息,你就可以开始设计你的系统了。首先,你需要构建问题:它是监督的、非监督的还是强化学习?它是一个分类任务,一个回归任务,还是别的什么?您是否应该使用批量学习或在线学习技术?在你阅读之前,停下来,试着自己回答这些问题。
你找到答案了吗?让我们来看看:这显然是一个典型的监督学习任务,因为给与您的训练实例都是带有标记的(每个样本都带有其标签,在该场景下即该地区的房价)。此外,它也是一个典型的回归任务,因为您被要求预测一个值。更具体地说,这是一个多变量回归(multivariate regression )问题,因为系统将使用多个特征(features)来进行预测(它将使用该地区的人口、收入等)。在第一章中,你预测生活满意度仅基于一个特征,即人均国内生产总值,所以那是一个一元回归(univariate regression)问题。最后,在系统中没有连续的数据流,没有特别需要对数据快速变化进行调整,数据量小到可以在内存中运行,所以普通的批量学习应该做的很好。
如果数据是巨大的,你可以把你的批处理学习工作分到多个服务器上(使用MapReduce技术,稍后我们将会看到),或者你可以使用在线学习技术