机器学习(第2版)
上QQ阅读APP看书,第一时间看更新

1.4 机器学习算法

机器学习算法是一类通过自动分析从数据中获得规律,并利用规律对未知数据进行预测的算法,可以分成有监督学习、无监督学习、强化学习等类别。

(1)有监督学习是从有标记(注)的训练数据中学习一个模型,然后根据这个模型对未知样本进行预测。其中,模型的输入是某一样本的特征,函数的输出是这一样本对应的标签。常见的有监督学习算法包括回归分析和统计分类。有监督学习包括分类和数字预测两大类别,前者包括逻辑回归、决策树、KNN、随机森林、支持向量机、朴素贝叶斯等,后者包括线性回归、KNN、梯度提升(Gradient Boosting)和自适应提升(Adaptive Boosting AdaBoost)等。

(2)无监督学习又称为非监督学习,它的输入样本并不需要标记,而是自动从样本中学习特征实现预测。常见的无监督学习算法有聚类和关联分析等,在人工神经网络中,自组织映像(Self-Organization Mapping,SOM)和适应谐振理论(Adaptive Resonance Theory,ART)是最常用的无监督学习。

(3)强化学习是通过观察来学习做什么样的动作。每个动作都会对环境有所影响,智能体根据观察到的周围环境的反馈来做出判断。强化学习强调与环境交互学习合适的行动策略,以取得最大化的预期利益。其灵感源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。

根据机器学习的任务分类,常见机器学习任务可以分为分类、聚类、回归等类型。某些机器学习算法可能同时属于不同的分类,如深度学习算法可能存在于有监督学习,也可能用于强化学习,在实践过程中可依据实际需要进行选择。

熟悉各类分析方法的特性是分析方法选择的基础,不仅需要了解如何使用各类分析算法,还要了解其实现的原理,这样在参数优化和模型改进时可减少无效的调整。在选择模型之前要对数据进行探索性分析,了解数据类型和数据特点,发现各自变量之间的关系以及自变量与因变量的关系。特别注意,在维度较多时容易出现变量的多重共线性问题,可应用箱图、直方图、散点图查找其中的规律性信息。

模型选择过程中先选出多个可能的模型,然后对其进行详细分析,并选择其中可用于分析的模型,在选择自变量时,大多数情况下需要结合业务来手动选择自变量。在选择模型后,比较不同模型的拟合程度,可统计显著性参数、R2、调整R2、最小信息标准、BIC和误差准则、Mallow's Cp准则等。在单个模型中可将数据分为训练集和测试集,用来做交叉验证并分析结果的稳定性。反复调整参数使模型趋于稳定和高效。

1.分类算法

分类算法是应用分类规则对记录进行目标映射,将其划分到不同的分类中,构建具有泛化能力的算法模型,即构建映射规则来预测未知样本的类别。分类算法包括预测和描述两种,经过训练集学习的预测模型在遇到未知记录时,应用规则对其进行类别划分,而描述型的分类主要对现有数据集中特征进行解释并进行区分,例如对动植物的各项特征进行描述,并进行标记分类,由这些特征来决定其属于哪一类目。

主要的分类算法包括决策树、支持向量机(Support Vector Machine,SVM)、KNN、贝叶斯网络(Bayesian Network)和神经网络等。

(1)决策树

顾名思义,决策树是一棵用于决策的树,目标类别作为叶节点,特征属性的验证作为非叶节点,而每个分支是特征属性的输出结果。决策树擅长对人物、位置、事物的不同特征、品质、特性等进行评估,可应用于基于规则的信用评估、比赛结果预测等。决策过程是从根节点出发,测试不同的特征属性,按照结果的不同选择分支,最终落到某一叶节点,获得分类结果。主要的决策树算法有ID3、C4.5、C5.0、分类回归树(Classification And Regression Tree,CART)、卡方自动交互检测(Chi-squared Automatic Interaction Detectin,CHAID)等,还有以这些算法为基础的集成算法,例如随机森林、梯度提升决策树(Gradient Boosting Decision Tree,GBDT)、AdaBoost、极端梯度提升(eXtreme Gradient Boosting,XGBoost)、轻量梯度提升机(Light Gradient Boosting Machine,LightGBM)等。

决策树的构建过程是按照属性的优先级或重要性来逐渐确定树的层次结构,使其叶节点尽可能属于同一类别,一般采用局部最优的贪心策略来构建决策树。决策树算法将在第3章介绍。

(2)SVM

SVM是由瓦普尼克(Vapnik)等人设计的一种分类器,其主要思想是将低维特征空间中的线性不可分进行非线性映射,转化为高维空间的线性可分。此外,应用结构风险最小理论在特征空间优化分割超平面,可以找到尽可能宽的分类边界,特别适合二分类的问题,例如,在二维平面图中某些点是杂乱排布的,无法用一条直线将其分为两类,但是在三维空间中,可能通过一个平面将其划分。

为了避免在低维空间向高维空间转化的过程中增加计算复杂性和“维度灾难”,SVM应用核函数,不需要关心非线性映射的显式表达式,直接在高维空间建立线性分类器,优化了计算复杂度。SVM常见的核函数有线性核函数、多项式核函数、径向基函数和二层神经网络核函数等。

SVM的目标变量以二分类最佳,虽然可以用于多分类,但效果不好。与其他分类算法相比, SVM对小样本数据集的分类效果更好。

SVM将在第8章中详细介绍。

(3)KNN

对样本应用向量空间模型表示,将相似度高的样本分为一类,对新样本计算与之距离最近(最相似)的样本的类别,那么新样本就属于这些样本中类别最多的那一类。可见,影响分类结果的因素分别为距离计算方法、近邻的样本数量等。

KNN 算法支持多种相似度距离计算方法:欧氏距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)、切比雪夫距离(Chebyshev Distance)、闵可夫斯基距离(Minkowski Distance)、标准化欧氏距离(Standardized Euclidean Distance)、马氏距离(Mahalanobis Distance)、巴氏距离(Bhattacharyya Distance)、汉明距离(Hamming Distance)、夹角余弦(Included Angle Cosine)、杰卡德相似系数(Jaccard Similarity Coefficient)、皮尔逊相关系数(Pearson Correlation Coefficient)。

KNN算法的主要缺点有:①在各分类样本数量不平衡时误差较大;②由于每次比较要遍历整个训练样本集来计算相似度,因此分类的效率较低,时间和空间复杂度较高;③近邻的数量选择不合理可能会导致结果的误差较大;④在原始近邻算法中没有权重的概念,所有特征采用相同的权重参数,这样计算出来的相似度易产生误差。

(4)贝叶斯网络

贝叶斯网络又被称为信念网络(Belief Network),是基于贝叶斯定理绘制的具有概率分布的有向弧段图形化网络,其理论基础是贝叶斯公式,网络中的每个点表示变量,有向弧段表示两者间的概率关系。

与神经网络相比,贝叶斯网络中的节点都具有实际的含义,节点之间的关系比较明确,可以从贝叶斯网络中直观看到变量之间的条件独立和依赖关系,可以进行结果和原因的双向推理。在贝叶斯网络中,随着网络中节点数量的增加,概率求解的过程非常复杂并难以计算,因此在节点数较多时,为减少推理过程和降低复杂度,一般选择朴素贝叶斯算法或推理的方式实现以减少模型复杂度。

贝叶斯网络将在本书第7章中详细介绍。

(5)神经网络

神经网络包括输入层、隐层、输出层,每一个节点代表一个神经元,节点之间的连线对应权重,输入变量经过神经元时会运行激活函数,对输入值赋予权重并加上偏置,将输出结果传递到下一层中的神经元,而权重和偏置在神经网络训练过程中不断修正。

神经网络的训练过程主要包括前向传输和逆向反馈,将输入变量逐层向前传递最后得到输出结果,并对比实际结果,逐层逆向反馈误差,同时对神经元中权重和偏置进行修正,然后重新进行前向传输,依此反复迭代直到最终预测结果与实际结果一致或在一定的误差范围内。

与神经网络相关的基础概念有感知机、BP算法、霍普菲尔德神经网络、SOM、学习矢量量化等,这些概念将在本书第6章中详细说明。

BP神经网络结果的准确性与训练集的样本数量和质量有关,如果样本数量过少可能会出现过拟合的问题,无法泛化新样本;而且BP神经网络对训练集中的异常点比较敏感,需要分析人员对数据做好预处理,例如数据标准化、去除重复数据、移除异常数据等,从而提高BP神经网络的性能。

由于神经网络是基于历史数据构建的模型,因此,随着新的数据不断产生,需要进行动态优化,例如随着时间变化,应用新的数据对模型进行重新训练,调整网络的结构和参数值。

神经网络相关内容将在本书第6章中详细介绍。

2.聚类算法

聚类是基于无监督学习的分析模型,不需要对原始数据进行标记,按照数据的内在结构特征进行聚集形成簇群,从而实现数据的分离。聚类与分类的主要区别是其并不关心数据是什么类别,而是把相似的数据聚集起来形成某一类簇。

在聚类的过程中,首先选择有效特征构成向量,然后按照欧氏距离或其他距离函数进行相似度计算,并划分聚类,通过对聚类结果进行评估,逐渐迭代生成新的聚类。

聚类应用领域广泛,可以用于发现不同的企业客户群体特征、消费者行为分析、市场细分、交易数据分析、动植物种群分类、医疗领域的疾病诊断、环境质量检测等,还可用于互联网和电商领域的客户分析、行为特征分类等。在数据分析过程中,可以先用聚类对数据进行探索,发现其中蕴含的类别特点,然后用分类等方法分析每一类的特征。

聚类方法可分为基于层次的聚类、基于划分的聚类、基于密度的聚类、基于约束的聚类、基于网络的聚类等。

基于层次的聚类是将数据集分为不同的层次,并采用分解或合并的操作进行聚类,主要包括BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies,利用层次方法的平衡迭代归约和聚类)、CURE(Clustering Using Representatives,使用代表点聚类)等。

基于划分的聚类是将数据集划分为k个簇,并对其中的样本计算距离以获得假设簇中心点,然后以簇的中心点重新迭代计算新的中心点,直到 k 个簇的中心点收敛为止。基于划分的聚类有k-均值等。

基于密度的聚类根据样本的密度分布不断产生聚类,最终形成一组“密集连接”的点集,其核心思想是只要数据的密度大于阈值就将其合并成一个簇,可以过滤噪声,聚类结果可以是任意形状,不必为凸形。基于密度的聚类方法主要包括DBSCAN(Density-Based Spatial Clustering of Application with Noise,基于密度的有噪声的应用空间聚类)、OPTICS(Ordering Points To Identify the Clustering Structure,识别聚类结构的排序点)等。

(1)BIRCH算法

BIRCH算法是指利用层次方法来平衡迭代归约和聚类,它只需要扫描数据集一次便可实现聚类。它利用了类似B+树的结构对样本集进行划分,叶节点之间用双向链表进行连接,逐渐对树的结构进行优化获得聚类。

BIRCH算法的主要优点是空间复杂度低,内存占用少,效率较高,能够对噪声点进行滤除。缺点是其树中节点的聚类特征树有个数限制,可能会产生与实际类别个数不一致的情况;而且对样本有一定的限制,要求数据集的样本是超球体,否则聚类的效果不佳。

(2)CURE算法

传统的基于划分的聚类方法得到的是凸形的聚类,对异常数据较敏感,而CURE算法是使用多个代表点来替换聚类中的单个点,算法更加稳健。另外,在处理大数据时采用分区和随机取样,使其处理大数据量的样本集时效率更高,且不会降低聚类质量。

(3)k-均值算法

传统的k-均值算法的聚类过程是在样本集中随机选择k个聚类中心点,对每个样本计算候选中心的距离进行分组,在得到分组之后重新计算类簇的中心,循环迭代直到聚类中心不变或收敛。k-均值存在较多改进算法,如初始化优化 k-均值算法、距离优化 Elkan k-Means 算法、k-prototype算法等。

k-均值算法的主要优点是可以简单、快速处理大数据集,具有可伸缩性,当数据集中类之间区分明显(凸形分布)时,聚类效果最好。这种算法的缺点是需要用户给出 k 值,即聚类的数目,而聚类数目事先很难确定一个合理的值。此外,k-均值算法对k值较敏感,如果k值不合理可能会导致结果局部最优。

(4)DBSCAN算法

DBSCAN算法是基于样本之间的密度实现空间聚类,基于核心点、边界点和噪声点等因素对空间中任意形状的样本进行聚类。与传统的k-均值算法相比,DBSCAN通过邻域半径和密度阈值自动生成聚类,不需要指定聚类个数,支持过滤噪声点。但是当数据量增大时,算法的空间复杂度较高。DBSCAN不适用于样本间的密度分布不均匀的情况,否则聚类的质量较差。对于高维的数据,一方面密度定义比较难,另一方面会导致计算量较大,聚类效率较低。

(5)OPTICS算法

在DBSCAN算法中,用户需要指定ε(邻域半径)和minPts(ε邻域最小点数)两个初始参数,用户手动设置这两个参数会对聚类结果产生比较关键的影响。而OPTICS 解决了上述问题,为聚类分析生成一个增广的簇排序,代表了各样本点基于密度的聚类结构。

聚类算法将在本书第4章中详细介绍。

3.关联分析

关联分析(Association Analysis)是通过对数据集中某些项目同时出现的概率进行分析来发现它们之间的关联关系,其典型的应用是购物篮分析,通过分析购物篮中不同商品之间的关联,分析消费者的购买行为习惯,从而制定相应的营销策略,为商品促销、产品定价、位置摆放等提供支持,并且可用于对不同消费者群体的划分。关联分析主要包括Apriori算法、FP-growth算法和Eclat算法。

(1)Apriori算法

Apriori算法主要实现过程是首先生成所有频繁项集,然后由频繁项集构造出满足最小置信度的规则。由于Apriori算法要多次扫描样本集,需要由候选频繁项集生成频繁项集,因此其在处理大数据量数据时效率较低。

(2)FP-growth算法

为了改进Apriori算法的低效问题,韩家炜等人提出基于FP树生成频繁项集的FP-growth算法。该算法只进行两次数据集扫描且不使用候选项集,直接按照支持度来构造一个频繁模式树,用这棵树生成关联规则,在处理比较大的数据集时效率比Apriori算法大约快一个数量级,对于海量数据,可以通过数据划分、样本采样等方法进行再次改进和优化。

Apriori算法和FP-growth算法将在本书第12章中详细介绍。

(3)Eclat算法

Eclat算法是一种深度优先算法,采用垂直数据表示形式,基于前缀的等价关系将搜索空间划分为较小的子空间,可以快速挖掘频繁项集。与FP-growth算法和Apriori算法不同,Eclat算法的核心思想是倒排,将事务数据中的事务主键与项目(Item)进行转换,用项目作为主键,这样就可以直观看到每个项目对应的事务ID有哪些,方便计算项目的频次,从而快速获得频繁项集。

在Eclat算法中,通过计算项集的交集,并对结果进行裁剪,可快速得到候选项集的支持度。但是,因为求交集的操作耗时较长,所以这一过程的时间复杂度较高,效率较低。此外,这一算法的空间复杂度也比较高,会消耗大量的内存空间。

4.回归分析

回归分析是一种研究自变量和因变量之间关系的预测模型,用于分析当自变量发生变化时因变量的变化值,要求自变量相互独立。回归分析的分类如下。

(1)线性回归

应用线性回归进行分析时要求自变量是连续型的,线性回归用直线(回归线)建立因变量和一个或多个自变量之间的关系。

线性回归主要的特点如下。

① 自变量与因变量之间呈线性关系。

② 多重共线性、自相关和异方差对多元线性回归的影响很大。

③ 线性回归对异常值非常敏感,其能影响预测值。

④ 在处理多个自变量时,需要用逐步回归的方法来自动选择显著性变量,不需要人工干预,其思想是将自变量逐个引入模型中,并进行F检验、t检验等来筛选变量,当新引入的变量对模型结果没有改进时,将其剔除,直到模型结果稳定。

逐步回归的目的是选择重要的自变量,用最少的变量去最大化模型的预测能力,它也是一种降维技术,主要的方法有前进法和后退法。前者是以最显著的变量开始,逐渐增加次显著变量;后者是逐渐剔除不显著的变量。

(2)逻辑回归

逻辑(Logistic)回归是数据分析中的常用算法,其输出的是概率估算值,将此值用Sigmoid函数映射到[0,1]区间,即可用来实现样本分类。逻辑回归对样本量有一定要求,在样本量较少时,概率估计的误差较大。

线性回归和逻辑回归将在本书第2章中详细介绍。

(3)多项式回归

在回归分析中有时会遇到线性回归的直线拟合效果不佳,当发现散点图中数据点呈多项式曲线时,可以考虑使用多项式回归来分析。使用多项式回归可以降低模型的误差,但是如果处理不当易造成模型过拟合,在回归分析完成之后需要对结果进行分析,并将结果可视化以查看其拟合程度。

(4)岭回归

岭回归在共线性数据分析中应用较多,也称为脊回归,它是一种有偏估计的回归方法,在最小二乘法的基础上做了改进,通过舍弃最小二乘法的无偏性,使回归系数更加稳定和稳健。其中R2值会稍低于普通回归分析方法,但回归系数更加显著,主要用于变量间存在共线性和数据点较少时。

(5)LASSO回归

LASSO(Least Absolate Shrinkge and Selection Operator,最小绝对收缩和选择算子)回归的特点与岭回归类似,在拟合模型的同时进行变量筛选和复杂度调整。变量筛选是逐渐把变量放入模型从而得到更好的自变量组合。复杂度调整是通过参数调整来控制模型的复杂度,例如减少自变量的数量等,从而避免过拟合。LASSO回归擅长处理多重共线性或存在一定噪声和冗余的数据,可以支持连续型因变量、二元、多元离散变量的分析。

5.深度学习

深度学习方法通过使用多个隐层和大量数据来学习特征,从而提升分类或预测的准确性,与传统的神经网络相比,不仅在层数上较多,而且采用了逐层训练的机制来训练整个网络,以防出现梯度消失。深度学习包括受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)、深度信念网络(Deep Belief Network,DBN)、堆叠自动编码器(Stacked Auto-Encoder,SAE)、深度神经网络(Deep Neural Network,DNN)、CNN、RNN、GAN以及各种变种网络结构。这些深度神经网络都可以对训练集数据进行特征提取和模式识别,然后应用于样本的分类。

RBM主要解决概率分布问题,是一种玻尔兹曼机的变体,基于物理学中的能量函数实现建模,“受限”是指层间存在连接,但层内的单元间不存在连接。RBM应用随机神经网络来解释概率图模型(Probabilistic Graphical Model),所谓“随机”是指网络中的神经元是随机神经元,输出状态只有未激活和激活两种,处于哪种状态是根据概率统计来决定的。

DBN是杰弗里·辛顿在2006年提出的,作为早期深度生成式模型的代表,其目标是建立一个样本数据和标签之间的联合分布。DBN由多个RBM层组成,RBM的层神经元分为可见神经元和隐神经元,其中,接收输入的是可见神经元,隐神经元用于提取特征。通过训练神经元之间的权重,DBN不仅可以用来识别特征、分类数据,还可以让整个神经网络按照最大概率来生成训练数据。

LSTM神经网络是RNN的一种,尽管这个早期的RNN只允许留存少量的信息,但其形式会存在损耗,而LSTM有长期与短期的记忆,拥有很好的控制记忆的能力,可以避免梯度衰减或逐层传递的值的最终退化。LSTM使用被称为“门”(Gate)的记忆模块或结构来控制记忆,这种门可以在合适的时候传递或重置其值。LSTM不仅具备其他RNN的优点,同时具有更好的记忆能力,因此更常被用于自然语言处理、语言翻译等。

在CNN中,卷积是指将源数据与卷积核进行内积操作,从而实现特征权重的融合,通过设置不同的卷积核提取不同特征。将大量复杂特征进行抽象和提取,并且极大减少模型计算量,目前在图像识别、文本分类等领域应用较广。

目前深度学习的方法在图像和音视频的识别、分类及模式检测等领域已经非常成熟,此外还可以衍生新的训练数据以构建GAN,从而利用两个模型互相对抗以提高模型的性能。

在数据量较多时可考虑采用这一算法。应用深度学习的方法进行分析时,需注意训练集(用于训练模型)、验证集(用于在建模过程中调参和验证)、测试集的样本分配,一般以6∶2∶2的比例进行分配。此外,采用深度学习进行分析时对数据量有一定的要求,如果数据量偏少,极易出现过拟合的情况,其效果不如使用传统的机器学习算法。针对小样本的学习已经成为深度学习的一个研究问题。

深度学习将在本书第10章和第11章中详细介绍。