本节书摘来异步社区《Python机器学习——预测分析核心算法》一书中的第1章,第1.5节,作者:【美】Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 构建预测模型的流程
使用机器学习需要几项不同的技能。一项就是编程技能,本书不会把重点放在这。其他的技能用于获得合适的模型进行训练和部署。这些其他技能将是本书重点关注的。那么这些其他技能包括哪些内容?
最初,问题是用多少有些模糊的日常语言来描述的,如“给网站访问者展示他们很可能点击的链接”。将其转换为一个实用的系统需要用具体的数学语言对问题进行重述,找到预测所需的数据集,然后训练预测模型,预测网站访问者对出现的链接点击的可能性。对问题用数学语言进行重叙,其中就包含了对可获得的数据资源中抽取何种特征以及对这些特征如何构建的假设。
当遇到一个新问题时,应该如何着手?首先,需要浏览可获得的数据,确定哪类数据可能用于预测。“浏览”的意思是对数据进行各种统计意义上的检测分析,以获得直观感受这些数据透露了什么信息,这些信息又与要预测的有怎样的关系。在某种程度上,直觉可以指导你做些工作,也可以量化结果,测试潜在的这些预测特征与结果的相关性。第2章将详细介绍对数据集测试分析的过程,本书余下部分所述的算法及其比较会用到这些数据集。
假设通过某种方法,选择了一组特征,开始训练机器学习算法。这将产生一个训练好的模型,然后是估计它的性能。下一步,可能会考虑对特征集进行调整,包括增加新的特征,删除已证明没什么帮助的特征,或者选择另外一种类型的训练目标(也叫作目标函数),通过上述调整看看能否提高性能。可以反复调整设计决策来提高性能。可能会把导致性能比较差的数据单独提出来,然后尝试是否可以从中发现背后的规律。这可以导致添加新的特征到预测模型中,也可以把数据集分成不同的部分分别考虑,分别建立不同的预测模型。
本书的目的是让你熟悉上述处理过程,以后遇到新问题就可以独立完成上述步骤。当重述问题、提取特征、训练算法、评估算法时,需要熟悉不同算法所要求的输入数据结构。此过程通常包括如下步骤。
(1)提取或组合预测所需的特征。
(2)设定训练目标。
(3)训练模型。
(4)评估模型在测试数据上的性能表现。
注意
在完成第一遍过程后,可以通过选择不同的特征集、不同的目标等手段来提高预测的性能。
机器学习要求不仅仅是熟悉一些工具包。它是开发一个可以实际部署的模型的全部过程,包括对机器学习算法的理解和实际的操作。本书的目标就是在这方面提供帮助。本书假设读者具有大学本科的基础数学知识、理解基本的概率和统计知识,但是本书不预设读者具有机器学习的背景知识。同时本书倾向于给读者直接提供针对广泛问题具有最佳性能的算法,而不需要通览所有机器学习相关的算法或方法。有相当数量的算法很有趣,但是因为各种原因并没有获得广泛使用。例如,这些算法可能扩展性不好,不能对内部的运行机理提供直观的解释,或者很难使用,等等。例如,众所周知随机森林算法(本书将会介绍)在在线机器学习算法竞争中遥遥领先。通常有非常切实的原因导致某些算法被经常使用,本书的目标就是在你通读完本书后对这方面具有充分了解。
1.5.1 构造一个机器学习问题
参加机器学习算法竞赛可以看作是解决真实机器学习问题的一个仿真。首先机器学习算法竞赛会提供一个简短的描述(例如,宣称一个保险公司想基于现有机动车保险政策更好地预测保费损失率)。作为参赛选手,你要做的第一步就是仔细审视数据集中的数据,确定需要做哪种形式的预测。通过对数据的审视,可以获得直观的感受:这些数据代表什么,它们是如何与预测任务关联起来的。数据通常可以揭示可行的方法。图1-5描述了从通用语言对预测目标的描述,到对数据的整理准备,以作为机器学习算法输入的基本步骤。
首先,通俗的说法“获得更好的结果”需要先转换成可测量可优化的具体目标。作为网站的拥有者,更好的结果可以是提高点击率或更高的销售额(或更高的利润)。下一步就是收集数据,只要其有助于预测:特定用户有多大可能性会点击各种不同类型的链接,或购买在线提供的各种商品。将这些数据表示为特征的矩阵,如图1-5所示。以网站为例,这些特征可能包括:网站访问者之前浏览的其他网页、访问者之前购买的商品。除了用于预测的这些特征,针对此类问题的机器学习算法还需要已知正确的答案用于训练。在图1-5中表示为“目标”。本书涵盖的算法通过用户过去的行为来发现用户的购买模式,当然算法不是单纯地记忆用户过去的行为,毕竟一个用户不可能重复购买他昨天刚刚购买的商品。第3章将详细讨论无记忆行为的预测模型的训练过程。
通常构造一个机器学习问题可以采用不同的方法。这就导致了问题的构造、模型的选择、模型的训练、模型性能评估这一过程会发生多次迭代,如图1-6所示。
与问题随之而来的是定量的训练目标,或者部分任务是数据提取(这些数据叫作目标或标签)。例如,考虑建立一个自动化预测证劵交易的系统。为了实现交易的自动化,第一步可能是预测证劵的价格变化。这些价格是很容易获得的,因此利用历史数据构建一个训练模型来预测未来价格的变化应该是容易的。但是即使这一过程包含了多种算法的选择和实验,未来价格的变化仍然可以用多种方法来计算。这种价格的变化可以是当前价格与10分钟之后的价格的差异、当前价格与10天之后的价格差异,也可以是当前价格与接下来的10分钟内价格的最高值、最低值之间的差异。价格的变化可以用一个2值的变量来表示:“高”或“低”,这依赖于10分钟之后价格是升高还是降低。所有这些选择将会导致不同的预测模型,这个预测模型将用于决定是买入还是卖出证劵,需要实验来确定最佳的选择。
1.5.2 特征提取和特征工程
确定哪些特征可用于预测也需要实验尝试。这个过程就是特征提取和特征工程。特征提取就是一个把*形式的各种数据(如一个文档中的字词、一个网页中的字词)转换成行、列形式的数字的过程。例如,垃圾邮件过滤的问题,输入就是邮件的文本,需要提取的东西包括:文本中大写字母的数量、所有大写的词的数量、在文档中出现词“买”的次数,等等,诸如此类的数值型特征。然后基于这些特征把垃圾邮件从非垃圾邮件中区分出来。
特征工程就是对特征进行整理组合,以达到更富有信息量的过程。建立一个证劵交易系统包括特征提取和特征工程。特征提取将决定哪些特征可以用来预测价格。过往的价格、相关证劵的价格、利率、从最近发布的新闻提取的特征都是现有公开讨论的各种交易系统的输入数据。而且证劵的价格还有一系列的工程化特征,包括:指数平滑异同移动平均线(moving average convergence and divergence,MACD)、相对强弱指数(relative strength index,RSI)等。这些特征都是过往价格的函数,它们的发明者都认为这些特征对于证劵交易是非常有用的。
选好一系列合理的特征后,就像本书描述的那样,需要训练一个预测模型,评价它的性能,然后决定是否部署此模型。为了确保模型的性能足够满足要求,通常需要调整采用的特征。一个确定使用哪些特征的方法就是尝试所有的组合,但是这样时间代价太大。不可避免地,你面临着提高性能的压力,但是又需要迅速获得一个训练好的模型投入使用。本书讨论的算法有一个很好的特征,它们提供对每个特征对最终预测结果的贡献的度量。经过一轮训练,将会对特征打分以标识其重要性。这些信息可以帮助加速特征工程的过程。
注意
数据准备和特征工程估计会占开发一个机器学习模型80%~90%的时间。
模型的训练也是一个过程,每次开始都是先选择作为基线的特征集合。作为一个现代机器学习算法(如本书描述的算法),通常训练100~5000个不同的模型,然后从中精选出一个模型进行部署。产生如此之多的模型的原因是提供不同复杂度的模型,这样可以挑选出一个与问题、数据集最匹配的模型。如果不想模型太简单又不想放弃性能,不想模型太复杂又不想出现过拟合问题,那么需要从不同复杂度的模型中选择一个最合适的。
1.5.3 确定训练后模型的性能
一个模型合适与否是由此模型在测试数据集上的表现来决定的。这个虽然概念上很简单,却是非常重要的一步。需要留出一部分数据,不用于训练,用于模型的测试。在训练完成之后,用这部分数据集测试算法的性能。本书讨论了留出这部分测试数据的方法。不同的方法各有其优势,主要依赖于训练数据的规模。就像字面上理解那么简单,人们持续地提出各种复杂的方法让测试数据“渗入”训练过程。在处理过程的最后阶段,你将获得一个算法,此算法读取数据,产生准确的预测。在这个过程中,你可能需要检测环境条件的变化,这种变化往往会导致潜在的一些统计特性的变化。