带你读《增强型分析:AI驱动的数据分析、 业务决策与案例实践》之三:预测模型的新技术
点击查看第一章点击查看第二章第3章 预测模型的新技术 人们对预测未来总是充满热情,预测技术的发展也使得人们不断看到成功的案例。早期的预测技术侧重于算法的精准,比如逻辑回归、决策树、支持向量机等。笔者在十几年前做研究生论文时发现,支持向量机模型的研究和应用是非常火热的,有点类似于如今的深度学习,若对深度学习不了解,都不好意思说自己是做机器学习的。然而在当下,算法的不断精进也伴随着旨在提高算法应用水平的相关技术的发展。这些技术使得模型的训练变得高效和智能,本章主要介绍当下流行的分类型算法,以及已经发展得比较成熟的模型训练方式的改进。 3.1集成学习 集成学习(Ensemble Learning)技术的出现,旨在将多个预测模型结合起来,达到明显改善相对于单独采用一个模型的而得到预测效果。因为结合的技术不同,Ensemble技术可以分为Averaging和Boosting两种不同的方式。 3.1.1Averaging方法 这个方法是分别独立地训练不同的模型,然后采用平均或投票的方式,生成最终的模型结果。典型的有bagging方法和随机森林等。bagging方法很有意思,就是将训练数据分成不同的子数据集,然后在其之上分别训练模型,最后采用如投票的机制来实现最终模型结果的输出。当训练数据集过小时,可使用自举技术(Bootstrapping),从原样本集有放回地抽取子集,分别训练模型,然后集成。当训练集过大,可以采用bagging的方法,将很大的训练集分成不同的子集,这样得到的结果既提高了精准度,也提高了模型的稳定性。图3-1就是一个简单的bagging过程示例图。 图3-1bagging方法的过程 目前人们总是在谈论采用海量的训练集来训练预测模型的效果一定比抽样效果好。在笔者看来,这只是一厢情愿的看法。“采用全集而不是抽样”的大数据思维在训练预测模型时,未见得一定是正确的。精心构建的抽样数据集,在绝大多数情况下,在抽样数据集上进行模型训练,也往往能得到很好的结果。这样做既保证了效果,也保证了工作效率。在一个几十万的数据集上,单机的情况下很快就能得到训练、验证等一系列工作的结果。当然,采用较大的训练集来训练模型,若在数据准备、环境等因素都具备的情况下,也是一个最佳的选择。在scikit-learn中,已经提供了bagging方法的实现,读者可以轻松调用。特别是在训练集特别大的情况下,读者就可以采用这个方法。在上述代码中,BaggingClassifier其实就是一个分类算法的容器,其实现了bagging的整个流程,可以调用任何一个客户指定的分类进行bagging的过程。随机森林实现方式比较简单,基本上是通过构建一系列的树组成森林,然后通过投票来决定最终结果,图3-2所示就是这个过程。随机森林中每棵树的训练时数据的提供方式可以是bagging或Bootstrapping。随机森林中的每棵树的投票,在计算最终方式时有两种方式,即Majority和平均方法。Majority方法是将预测概率排序,取概率值最高的预测结果为最终结果。而平均方法则是将同一类的预测结果的概率加总求平均值,作为最终的预测结果及概率。在scikit-learn中专门提供了两种投票方式的独立工具,笔者曾经改造过其中一个投票器,在3.5节中将重点介绍投票器的内容。 图3-2随机森林的实现方式 3.1.2Boosting方法 顾名思义,Boosting方法是按照序列的方式来训练模型,序列中的每一个模型都在试图减少前面模型的误判。在模型开始训练时,第一个模型将训练集中的每一个观察量的权重看作是相同的,并尝试构建一个分类;而该分类势必会产生部分观察量的误判。从第二个模型开始在训练时将前面模型的误判的观察量的权重做出一个调整,强迫此次学习时尽量分类正确。按照这个过程不断进行迭代直到满足一定的精准度要求。图3-3展示了Boosting的学习过程。 图3-3Boosting方法的过程 Boosting方法出现得其实已经很早了,在经典的商业分析工具软件如IBM SPSS Modeler中,很早就有Boosting的相关设置。近几年人们基于Boosting的思想开发了如AdaBoosting和Gradient Tree Boosting等性能较好的模型,使得Boosting又变得火热起来。AdaBoosting是Adaptive Boosting的缩写,意指在每一次迭代中对前一个弱分类器的失误判断是敏感的,即通过计算弱分类器的失误判断的误差来计算出最终模型中每个弱分分类器的权重。给定xi∈X,yi∈{-1,1},i∈[1,n],其计算过程如下:1)初始化每一个观察量的权重,Dt(i) […]