Scikit-learn机器学习详解(上)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 机器学习开发步骤

前面讲过,机器学习和数据挖掘是一个问题的两个方面,它们的目标是一致的。数据挖掘是面向业务的,机器学习是面向技术的。所以,机器学习的开发步骤与数据挖掘的方法论是密不可分的。在数据挖掘的发展历程中,出现过多种实施方法论。在本节中首先概要介绍几种主流的数据挖掘方法论,然后引出比较可行的机器学习步骤。

1.5.1 数据挖掘标准流程

数据挖掘的流程是一个复杂的过程,不可能通过简单几步就能够完成。一方面,这个过程涉及数据清洗、数据集成、变量选择、数据转换、模型构建和验证,以及最终结果的知识表达和应用等;另一方面,建立挖掘模型所需的数据往往是跨数据源的,需要建立一个统一的数据标准进行数据整理,以及可能循环多次的模型优化。所以非常需要一个明确的策略来控制数据挖掘流程中的各个环节,保证数据挖掘的效果。

从工程技术角度,数据挖掘流程分为两大步骤:数据准备(预处理)和数据挖掘(建模),如图1-11所示。

图1-11 数据挖掘通用流程图

图1-11是一个粗略的数据挖掘流程图。一般来说,数据挖掘项目要经历的过程包括问题的理解、数据的准备、模型建立和应用等一系列复杂的任务。所以,数据挖掘过程的系统化、工程化对解决业务问题起着至关重要的作用。

纵观数据挖掘的发展历史,为了使数据挖掘过程规范化,以便能够创建统一的数据挖掘平台(软件),各个系统厂商先后提出了很多数据挖掘过程的方法论,阐明实施数据挖掘项目的流程和步骤,为数据挖掘系统的迅速发展提供了保障。其中最流行的方法论有SEMMA、KDD、5A以及CRISP-DM四种。

(1)SEMMA

SEMMA是由SAS Institute(全球知名的统计软件及数据挖掘系统开发商)开发的指导数据挖掘流程的标准。SEMMA是Sample、Explore、Modify、Model和Assess五个英语单词的首字母组合,代表抽样、探索、修改、模型和评估。这也正是SAS提出的在数据挖掘平台中要遵循的5个步骤,如图1-12所示。

图1-12 SEMMA五步骤挖掘流程

这5个步骤的具体任务是:

① Sample:即数据采样,这是数据挖掘工作的第一步,其目标是根据需要解决的问题选择用于构建模型的样本数据集(不是全部数据),同时检验和保证数据的质量。原则上样本数据集应该足够大,包含足够的信息,以便能够有效地使用;

② Explore:即数据探察,其目标是进行数据特征的探索、分析和预处理。数据采样是以对业务问题的先验认识为基础进行的,样本数据集是否能够达到目标要求、是否有明显的规律和趋势、变量之间是否有相关性等等,这些都是需要探索的内容。通常,我们通过图形等可视化手段来发现特征(变量)的统计属性、异常情况,以及变量之间的相关性等;

③ Modify:即数据调整,其目标是问题进一步明确化,并进行数据调整。本阶段明确和量化要解决的问题,并根据对问题新的认识对样本数据进行增删、调整、修改、转换和派生,并确定技术方向;

④ Model:即模型构建,这是数据挖掘工作的核心环节,其目标是基于前面准备好的变量,应用各种建模技术(可能使用多种模型算法),创建所需的模型;

⑤ Assess:即模型评估,这是最后一个步骤,其目标是对构建的模型进行综合解释和评价。本阶段主要是对建模结果进行可靠性和有效性综合评估,找出最优模型。

SEMMA与CRISP-DM(在本节后面讲述)标准相比,主要关注数据挖掘项目的建模任务本身,将业务方面排除在外;而CRISP-DM则把业务理解作为一个重要的前期阶段。此外,SEMMA的重点在于帮助SAS Enterprise Miner软件的用户,所以在Enterprise Miner之外应用时,用户可能感觉不方便。

(2)KDD

KDD方法论是Brachman & Anand于1996年提出的,它覆盖了从数据中发现有用知识的整个过程,涉及了发现模式的评估以及最有可能的解释,以识别和决定数据中的知识。

如图1-13所示,KDD方法在发现和解释潜在模式和知识的过程中,涉及以下步骤的重复应用:

图1-13 KDD挖掘流程

① 数据抽取(Data Extraction):从数据库中检索与任务分析相关的数据,创建目标数据集。

② 数据预处理(Processing):对选择的数据集进行预处理,保持数据的一致性,以保证质量。

③ 数据转换(Transformation):这个步骤通过使用降维、转换等方法进行数据的转换、派生等。

④ 数据挖掘(Data Mining):根据挖掘目标(如预测或者分类等),搜索和发掘特定表现形式的模型和知识。

⑤ 模型解释/评估(Interpretation/Evaluation):对发现的模型进行解释和评估,以便推广使用。

在上述所有5个阶段完成之后,我们将获得对发现模型的评估是否满足业务需求的结论。如果不满足目标要求,则可以从任何一个阶段开始进行重复,直到达到业务要求。

(3)5A

5A流程标准由原来的SPSS(Statistical Product and Service Solutions)公司发起。5A是Assess、Access、Analyze、Act和Automate五个单词的首字母组合。其中:

① Assess:即需求评估。对业务问题进行客观评价,明确需求,并确定实现需求所需要的数据;

② Access:即数据获取。实现对所需数据的获取,检查数据质量,并能够灵活处理数据;

③ Analyze:即数据分析。基于获取的数据进行分析,使用各种统计分析技术,运用预测或描述模型,创建能够解决问题的挖掘模型;

④ Act:即模型评估。对创建的模型进行展示和评估,确定最优模型;

⑤ Automate:即部署应用。通过系统提供的工具,快速显示结果,便于用户更好地决策。

IBM在2009年收购了SPSS。由于IBM也是CRISP-DM流程的主要发起人之一,并且IBM目前也在主推CRISP-DM,所以5A流程的市场在逐步缩减。

(4)CRISP-DM

CRISP-DM是CRoss Industry Standard Process for Data Mining的缩写,意为“跨行业数据挖掘标准流程”。该标准由SPSS、IBM、Teradata、Daimler AG、NCR Corporation和OHRA等5家公司领导开发,第1个版本于1999年3月在布鲁塞尔举行的第四届CRISPDM SIG(Special Interest Group)研讨会上发布。

与前面讲述的SEMMA相比,CRISP-DM认为数据挖掘是由业务目标驱动的,同时重视数据的获取、清洗和管理。

图1-14是CRISP-DM针对具体业务问题进行数据挖掘或机器学习的标准流程图。

CRISP-DM标准流程包括业务问题理解、数据探索评估、业务数据准备、模型建立、模型验证评估以及模型部署应用6个环节。根据挖掘过程中每个环节的准备情况,环节之间有可能需要反复交互。

图1-14 CRISP-DM标准数据挖掘流程

① 业务问题理解。CRISP-DM的第一步是要明确业务目标,专注于从商业的角度理解项目目标和需求,将这种理解转换成一种数据挖掘的问题定义,并制订出达到该目标的数据挖掘计划。

② 数据探索评估。在数据探索评估阶段,首先根据前一阶段的结果,找出影响挖掘目标的各种因素(特征),确定这些影响因素的数据来源、表现形式以及存储位置;其次探测数据,理解和描述数据,并分析数据质量状况。

③ 业务数据准备。在本阶段,根据挖掘目标和对数据的探测情况,制订数据质量标准和各种派生规则,对原始数据进行清洗处理,使用各种ETL工具,按照数据挖掘模型所需的数据格式准备样本数据(包括训练数据和测试数据),为模型的创建准备好高质量数据,所谓“Garbage in,Garbage out”,所以一定要保证样本数据的质量。

④ 模型建立。建立挖掘模型的目的是发现数据中隐藏的模式和规律。此阶段的工作是选择合适的模型,针对不同模型进行参数的训练和优化。本阶段可能要对多种模型进行训练,并根据各种指标(如R2、AUC、F1等)寻找最优的模型。

在建模过程中,可能会发现一些潜在的数据问题,此时就需要返回到数据准备阶段,完善和更新入模数据。

⑤ 模型验证评估。对创建的模型,从业务目标、预测或分类结果角度进行评估,验证模型的有效性和可靠性,以确保模型应用到生产环境中不会出现不可容忍的错误。

在验证业务目标时,如果发现模型的预期不能满足业务需求,则有可能返回到业务问题理解阶段,重新审视对业务的理解,并根据实际情况确定是否重复后续的数据探索、数据准备等环节。

⑥ 模型部署应用。模型部署应用既可以是把新数据应用到训练后的模型,对新数据进行预测,根据预测结果进行决策,也可以是把模型集成到企业生产环境中。无论哪种方式,都是为了充分发挥模型价值,实现数据挖掘的最终目标。

目前CRISP-DM已经成为事实上的标准,得到众多商用和开源挖掘系统开发商的支持,在市场中占据着领先位置。

1.5.2 机器学习开发步骤

机器学习的任务是“使用数据回答问题(Using data to answer questions)”。图1-15展示了一个机器学习的流程示意图。

图1-15 机器学习流程示意图

在实际应用中,基于CRISP-DM方法论,充分考虑机器学习的核心任务和特点,实现一个完整的机器学习任务流程需要数据收集、数据预处理、模型选择、模型训练、模型验证、模型优化和部署应用(预测应用)7个步骤。如图1-16所示。

图1-16 机器学习流程

1.5.2.1 数据收集

机器学习的第一步是为后面的模型训练收集足够多的数据,数据的数量和质量是决定模型有效性的关键因素。当然数据的收集是以明确要解决的问题需求为前提的,只有充分理解问题的要求,数据收集才能有的放矢,提高收集的效率和效果。

如果需要解决的问题是分类或预测问题(有监督学习问题),则需要收集带有标签的数据;如果是聚类或寻找关联规则等问题(无监督学习问题),则需要收集无标签数据。

在这一步,需要收集影响问题目标的各种潜在的特征变量,确定这些影响变量的数据来源、表现形式以及存储位置;其次探测数据,理解和描述数据,并分析数据质量状况。

例如,有些数据可能存储在关系型数据库中,有些可能存储在Hadoop大数据平台上,还有可能存在Excel文件或文本文件中等,除此之外,还有可能需要收集非结构化数据或半结构化数据等等。在本步骤中,需要对这些散落在不同平台或系统的数据,根据机器学习要解决的问题的要求,聚合在一起,形成一个解决实际问题的单一的、原始的数据源。

1.5.2.2 数据预处理

原始的数据源虽然进行了汇聚,但是没有进行有效规范的整合,难以发挥应有的功能。数据预处理就是对收集的原始数据进行清洗、转换或派生,保证训练数据的质量,以便能够训练出有效、可靠的模型。在机器学习领域中,有时也称这些工作为特征工程。

原始数据往往携带一些“脏数据”,例如可能存在以下问题:

① 数据不完整,某些特征变量存在缺失值。

② 数据存在噪声、异常值或错误。如一个人的薪水Salary=-1000(元),一个人的年龄Age=220(岁)等。

③ 数据存在重复(冗余)记录。

④ 数据存在不一致。如年龄Age=40,生日BirthdayDate="2003.04.05"等;重复的数据记录之间也存在不一致的情况等等。

所以,必须对原始收集的数据进行数据清洗。一些简单的统计和可视化方法可以探查出大部分问题。常用的方法包括:

◇百分位数的计算可以确定大多数数据的范围;

◇平均值和中位数可以描述集中趋势;

◇相关系数可以表明特征变量之间的关系程度;

◇箱形图可以识别异常值;

◇密度图和直方图显示数据的分布;

◇散点图可以描述双变量关系。

综合考虑以上存在的问题和机器学习的特点,数据预处理的内容至少包括以下内容:

① 清洗可能存在的问题:包括处理缺失值、删除重复项、更正错误和异常值、消除不一致等等。

② 数据规范化:对数据进行标准化、格式化处理。

③ 随机化数据:这消除了原始数据中特定顺序的影响。

④ 解决数据不平衡问题:采用SMOTE、数据合成等方式保障训练数据的平衡。

⑤ 数据综合或派生:根据问题要求,有可能按照特定规则重新派生新的特征。

⑥ 数据类型转换:不同的模型对数据的类型也有不同的要求。有些模型需要数值型数据,有些模型则可以处理分类型数据等等。数据类型的转换,也是数据预处理步骤的工作。类型转换包括连续变量的离散化和分类变量的连续化。其中常用的离散化方法包括等宽(等距)区间法(也称等距分箱法)、等频区间法(也称等频分箱法),以及考虑到目标类别的信息的ChiMerge方法(卡方分箱法);连续化方法包括独热编码等。

关于ChiMerge离散化方法的知识,请读者自行查阅相关知识,或者参阅笔者的另一本书《数据挖掘和机器学习:PMML建模(下)》的第二章“决策树模型TreeModel”中内容,这里不再赘述。

关于独热编码连续化的方法的知识,在本书第4章有简要的描述,或者参阅笔者的另一本书《PMML建模标准语言基础》的第三章“PMML基础知识”中内容,这里不再赘述。

1.5.2.3 模型选择

不同的算法(模型)能够实现不同的任务,模型选择的目的是选择合适的一个或多个模型。

① 模型应满足解决问题的要求;

② 掌握各种模型的特点:一个模型需要如何准备数据,训练时长,精度如何,模型的可解释性以及模型的伸缩性。注意:对于具体问题,一个参数复杂众多的模型不一定总是一个好的模型。常用的模型有线性回归、逻辑回归、决策数据、K-Means、支持向量机SVM、贝叶斯分类、随机森林树和神经网络等等。

在解决实际问题时,需要基于特定问题的具体要求,综合考虑,选择一个或多个待训练模型(在集成建模中需要多个模型一起训练)。

1.5.2.4 模型训练

模型训练的目的是对选择的算法进行训练,构建初步的应用模型。

在进行模型训练前,一般会把预处理后的数据分类成训练数据和测试数据,其中训练数据作为模型训练过程的输入,测试数据用作模型验证评估(下一步骤)。在模型正式训练之前,一般都会对模型进行初始化工作,例如设置模型参数初始值、超参数的设置等等。

在模型训练过程中,以最小化损失函数为目标,循环迭代使用训练数据,逐步获得模型的各个参数,构建完整的训练模型,用于验证评估。

1.5.2.5 模型验证

模型验证主要是利用新的数据(非训练数据,一般是测试数据集),对上一步骤训练后的模型进行验证,以便评估模型是否足够好。衡量一个模型好坏的指标很多,不同类型的机器学习模型有不同的衡量指标。最常见的有:

◇对于回归预测问题,可以使用均方误差MSE(Mean Squared Error)或者平均绝对误差MAE(Mean Absolute Error),其值越小越好;

◇对于分类预测问题,可以使用ROC(Receiver Operating Characteristic)和AUC(Area Under Curve),其值越大越好。

模型验证的方法有多种,例如Holdout验证法、交叉验证法CV(Cross-Validation)等。这些方法的具体介绍我们将在本书的后面详细讲述。

把每一个训练后的模型应用于测试数据,根据预测结果计算相应指标,进而验证一个模型是否足够好。如果一个模型在训练数据中表现很好,但是在测试数据中表现比较糟糕,则说明这个模型是“过拟合(overfitting)”;如果一个模型在训练数据中表现很差,在测试数据中同样表现也很差,则说明这个模型是“欠拟合(underfitting)”。

最后,如果一个模型满足以下几个条件,则这个模型可以进入下一个步骤。

① 这个模型在测试数据集上具有最好的性能吗?(性能)

② 这个模型在其他指标上表现良好吗?(健壮性)

③ 这个模型在训练数据集上能够很好地通过交叉验证吗?(一致性)

④ 这个模型是否解决了业务问题?(模型选择的必要条件)

现代管理学之父彼得·德鲁克(Peter F. Drucker)曾经说过:“如果你不能衡量它,你就不能改善它”。这样,在一个模型通过验证之后,还可以进一步进行超参数的优化。

1.5.2.6 模型优化

模型优化是一个对模型超参数调整优化的过程。

在机器学习的算法中有两种类型的参数:模型参数(model parameters)和超参数(hyper parameter)。其中模型参数是定义模型属性的参数,是可以直接从训练数据集中训练获得的,例如回归系数、决策树的分割点等等;超参数是开始学习过程之前设置的参数,是不能通过训练得到的参数数据,例如SVM模型(支持向量机)中的内核函数、惩罚系数,神经网络模型中的隐藏层的层数、学习效率,决策树中的深度等等。通常情况下,需要对超参数进行优化,给学习过程选择一组最优超参数,以提高学习的性能和效果。

超参数优化常用的方法有网格搜索、随机搜索、贝叶斯优化算法等。

顺便提一下,TensorFlow是谷歌开源的人工智能软件工具包,具有Python、C++等多种语言接口,在网站http://playground.tensorflow.org/上有可视化的模型参数和超参数调优示例,感兴趣的读者可登陆试用。

1.5.2.7 部署应用

在模型优化并验证之后,就可以部署应用了。模型应用的过程就是“使用数据回答问题”的过程,也是机器学习发挥作用、创造价值的地方。

通过把模型存储为PMML格式的文档,一个良好的模型不仅可以在创建模型的环境中使用,也可以在任何支持PMML规范的环境中使用,实现模型的共享与交换,最大程度地发挥机器学习的价值。

PMML,即Predictive Model Markup Language,预测模型标记语言,是一种基于XML规范的开放式模型表达语言,为不同的系统提供了定义模型的方法,可在兼容PMML语言的应用程序中共享模型,目前已成为被W3C所接受的标准。关于PMML的知识,读者可参考笔者的另一本书《PMML建模标准语言基础》。