AI项目实战-机器学习算法(基础篇)

  说明:本文的侧重点在于快速了解机器学习在项目中涉及到常见算法概念、应用,以及在保持核心原理本质的前提条件下,尽量用简单易懂的方式介绍这些算法原理,抛砖引玉,打破心理障碍,让AI尽快走进项目,服务于社会(后续会逐渐对原理进行展开深入分析,了解了原理,用起来才能得心应手)。

一、分类算法

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

1 、K-近邻算法(KNN)

   (1)K Nearest Neighbor算法⼜叫KNN算法,如果⼀个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的⼤多数属于某⼀个类别,则该样本也属于这个类别。

  (2)来源:KNN算法最早是由Cover和Hart提出的⼀种分类算法

  (3)原理:(高中数学知识,两点之间的距离公式)

  两个样本的距离可以通过如下公式计算,⼜叫欧式距离

   

(4)核心API

  sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

  n_neighbors:int,可选(默认= 5),k_neighbors查询默认使⽤的邻居数

  (4.2)k值选择问题

  KNN中K值⼤⼩选择对模型的影响

   K值过⼩: 容易受到异常点的影响 容易过拟合

  k值过⼤: 受到样本均衡的问题 容易⽋拟合

 (5)优缺点

 (5.1)优点:

   简单有效

   重新训练的代价低

   适合类域交叉样本,KNN⽅法主要靠周围有限的邻近的样本,⽽不是靠判别类域的⽅法来确定所属类别的,因此对于类域的交 叉或重叠较多的待分样本集来说,KNN⽅法较其他⽅法更为适合。

     适合⼤样本⾃动分类,该算法⽐较适⽤于样本容量⽐较⼤的类域的⾃动分类,⽽那些样本容量较⼩的类域采⽤这种算法⽐较容易 产⽣误分。

 (5.2)缺点:

        惰性学习,KNN算法是懒散学习⽅法(lazy learning,基本上不学习),⼀些积极学习的算法要快很多;

       类别评分不是规格化 ,不像⼀些通过概率评分的分类;

       输出可解释性不强,例如决策树的输出可解释性就较强;

       对不均衡的样本不擅⻓ 当样本不平衡时,如⼀个类的样本容量很⼤,⽽其他类样本容量很⼩时,有可能导致当输⼊⼀个新样本时,该样本的K个邻居中⼤容量类的样本占多数。该算法只计算“最近的”邻居样本,某⼀类的样本数量很 ⼤,那么或者这类样本并不接近⽬标样本,或者这类样本很靠近⽬标样本。⽆论怎样,数量并不能影响运⾏结果。可以采⽤权值的⽅法(和该样本距离⼩的邻居权值⼤)来改进;

      计算量较⼤,⽬前常⽤的解决⽅法是事先对已知样本点进⾏剪辑,事先去除对分类作⽤不⼤的样本。

2、决策树算法

(1)决策树: 是⼀种树形结构,本质是⼀颗由多个判断节点组成的树 其中每个内部节点表示⼀个属性上的判断, 每个分⽀代表⼀个判断结果的输出, 最后每个叶节点代表⼀种分类结果。 

(2)特点: 决策树擅长对人物、位置、事物的不同特征、品质、特性进行评估,可应用于基于规则的信用评估、比赛结果预测等。决策过程是从根节点出发,测试不同的特征属性,按照结果的不同选择分支,最终落到某一叶子节点,获得分类结果。主要的决策树算法有ID3(Iterative Dichotomiser (迭代⼆分器))、C4.5、C5.0、CART、CHAID、SLIQ、SPRINT等。

(3)决策时划分依据:

 (3.1)决策树的划分依据⼀----信息增益:以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越⼤,样本的不确定性就越⼤。 因此可以使⽤划分前后集合熵的差值来衡量使⽤当前特征对于样本集合D划分效果的好坏。

  信息增益 = entroy(前) - entroy(后)

  注:信息增益表示得知特征X的信息⽽使得类Y的信息熵减少的程度

      ⼀般⽽⾔,信息增益越⼤,则意味着使⽤属性 a 来进⾏划分所获得的"纯度提升"越⼤。因此,我们可⽤信息增益来进⾏ 决策树的划分属性选择,著名的 ID3 决策树学习算法 [Quinlan, 1986] 就是以信息增益为准则来选择划分属性。

 (3.2)决策树的划分依据⼆----信息增益率

 (3.3)决策树的划分依据三 ----基尼值和基尼指数

  CART 决策树使⽤"基尼指数" (Gini index)来选择划分属性. CART 是Classification and Regression Tree的简称,这是⼀种著名的决策树学习算法,分类和回归任务都可⽤。

  基尼值Gini(D):从数据集D中随机抽取两个样本,其类别标记不⼀致的概率。故,Gini(D)值越⼩,数据集D的纯度越⾼。  

(4)常⻅决策树的启发函数⽐较

  

  

(5)决策树算法介绍

 (5.1)ID3 算法

   存在的缺点:

    (1) ID3算法在选择根节点和各内部节点中的分⽀属性时,采⽤信息增益作为评价标准。信息增益的缺点是倾向于选择 取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息.

    (2) ID3算法只能对描述属性为离散型属性的数据集构造决策树。

   (5.2)C4.5算法

    优点: 决策树分类原理 127 产⽣的分类规则易于理解,准确率较⾼。

    缺点: 在构造树的过程中,需要对数据集进⾏多次的顺序扫描和排序,因⽽导致算法的低效。 此外,C4.5只适合于能够驻留于内存的数据集,当训练集⼤得⽆法在内存容纳时程序⽆法运⾏。

   (5.3)CART算法

    CART算法相⽐C4.5算法的分类⽅法,采⽤了简化的⼆叉树模型,同时特征选择采⽤了近似的基尼系数来简化计算。 C4.5不⼀定是⼆叉树,但CART⼀定是⼆叉树。

    (5.4)多变量决策树

    ⽆论是ID3, C4.5还是CART,在做特征选择的时候都是选择最优的⼀个特征来做分类决策,但是⼤多数,分类决策 不应该是由某⼀个特征决定的,⽽是应该由⼀组特征决定的。这样决策得到的决策树更加准确。这个决策树叫做多变量决策树(multi-variate decision tree)。在选择最优特征的时候,多变量决策树不是选择某⼀个最优特征,⽽是选择最优的 ⼀个特征线性组合来做决策。这个算法的代表是OC1。 如果样本发⽣⼀点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习⾥⾯的随机森林之类的⽅法解决。

3、⽀持向量机(SVM)

  SVM全称是supported vector machine(⽀持向量机),即寻找到⼀个超平⾯使样本分成两类,并且间隔最⼤。 SVM能够执⾏线性或⾮线性分类、回归,甚⾄是异常值检测任务。它是机器学习领域最受欢迎的模型之⼀。SVM特别适⽤于中⼩型复杂数据集的分类。

 (0) 概述:

  支持向量机(Support Vector Machine,SVM)是由瓦普尼克(Vapnik)等人设计的一种分类器,其主要思想是将低维特征空间中的线性不可分进行非线性映射,转化为高维空间的线性可分。此外,应用结构风险最小理论在特征空间优化分割超平面,可以找到尽可能宽的分类边界,特别适合两分类的问题,例如,在二维平面图中某些点是杂乱排布的,无法用一条直线分为两类,但是在三维空间中,可能通过一个平面将其划分。为了避免在低维空间向高维空间的转化过程中增加计算复杂性和“维数灾难”,支持向量机应用核函数,不需要关心非线性映射的显式表达式,直接在高维空间建立线性分类器,优化了计算复杂度。支持向量机常见的核函数有线性核函数、多项式核函数、径向基函数和二层神经网络核函数等。支持向量机的目标变量以二分类最佳,虽然可以用于多分类,但效果不好。与其他分类算法相比,支持向量机对小样本数据集的分类效果更好。

(1)硬间隔分类

  在上⾯我们使⽤超平⾯进⾏分割数据的过程中,如果我们严格地让所有实例都不在最⼤间隔之间,并且位于正确的⼀ 边,这就是硬间隔分类。 硬间隔分类有两个问题,⾸先,它只在数据是线性可分离的时候才有效;其次,它对异常值⾮常敏感。

(2)软间隔分类

  要避免这些问题,最好使⽤更灵活的模型。⽬标是尽可能在保持最⼤间隔宽阔和限制间隔违例(即位于最⼤间隔之上, 甚⾄在错误的⼀边的实例)之间找到良好的平衡,这就是软间隔分类。

  

(3)在Scikit-Learn的SVM类中,可以通过超参数C来控制这个平衡:C值越⼩,则间隔越宽,但是间隔违例也会越多。上图 显示了在⼀个⾮线性可分离数据集上,两个软间隔SVM分类器各⾃的决策边界和间隔。 左边使⽤了⾼C值,分类器的错误样本(间隔违例)较少,但是间隔也较⼩。 右边使⽤了低C值,间隔⼤了很多,但是位于间隔上的实例也更多。看起来第⼆个分类器的泛化效果更好,因为⼤多数 间隔违例实际上都位于决策边界正确的⼀边,所以即便是在该训练集上,它做出的错误预测也会更少。

(4)SVM的核⽅法

  将原始输⼊空间映射到新的特征空间,从⽽,使得原本线性不可分的样本可能在核空间可分。

(5)核函数概念

  核函数,是将原始输⼊空间映射到新的特征空间,从⽽,使得原本线性不可分的样本可能在核空间可分。

  

(6)常⻅核函数

  

  线性核和多项式核: 这两种核的作⽤也是⾸先在属性空间中找到⼀些点,把这些点当做base,核函数的作⽤就是找与该点距离和⻆ 度满⾜某种关系的样本点。 当样本点与该点的夹⻆近乎垂直时,两个样本的欧式⻓度必须⾮常⻓才能保证满⾜线性核函数⼤于0;⽽当样 本点与base点的⽅向相同时,⻓度就不必很⻓;⽽当⽅向相反时,核函数值就是负的,被判为反类。即,它在空间上划分出⼀个梭形,按照梭形来进⾏正反类划分。 RBF核: ⾼斯核函数就是在属性空间中找到⼀些点,这些点可以是也可以不是样本点,把这些点当做base,以这些 base为圆⼼向外扩展,扩展半径即为带宽,即可划分数据。 换句话说,在属性空间中找到⼀些超圆,⽤这些超圆来判定正反类。 Sigmoid核: 同样地是定义⼀些base, 核函数就是将线性核函数经过⼀个tanh函数进⾏处理,把值域限制在了-1到1上。 总之,都是在定义距离,⼤于该距离,判为正,⼩于该距离,判为负。⾄于选择哪⼀种核函数,要根据具体的样本 分布情况来确定。

  ⼀般有如下指导规则:

    1) 如果Feature的数量很⼤,甚⾄和样本数量差不多时,往往线性可分,这时选⽤LR或者线性核Linear;

    2) 如果Feature的数量很⼩,样本数量正常,不算多也不算少,这时选⽤RBF核;

    3) 如果Feature的数量很⼩,⽽样本的数量很⼤,这时⼿动添加⼀些Feature,使得线性可分,然后选⽤LR或 者线性核Linear;

    4) 多项式核⼀般很少使⽤,效率不⾼,结果也不优于RBF;

    5) Linear核参数少,速度快;RBF核参数多,分类结果⾮常依赖于参数,需要交叉验证或⽹格搜索最佳参 数,⽐较耗时;

    6)应⽤最⼴的应该就是RBF核,⽆论是⼩样本还是⼤样本,⾼维还是低维等情况,RBF核函数均适⽤。

(7)SVM⽅法既可以⽤于分类(⼆/多分类),也可⽤于回归和异常值检测。 SVM具有良好的鲁棒性,对未知数据拥有很强的泛化能⼒,特别是在数据量较少的情况下,相较其他传统机器学习 算法具有更优的性能。

(8)使⽤SVM作为模型时,通常采⽤如下流程:

  1. 对样本数据进⾏归⼀化

  2. 应⽤核函数对样本进⾏映射(最常采⽤和核函数是RBF和Linear,在样本线性可分时,Linear效果要⽐RBF好)

  3. ⽤cross-validation和grid-search对超参数进⾏优选

  4. ⽤最优参数训练得到模型

(9)sklearn中⽀持向量分类主要有三种⽅法:SVC、NuSVC、LinearSVC,扩展为三个⽀持向量回归⽅法:SVR、 NuSVR、LinearSVR。 SVC和NuSVC⽅法基本⼀致,唯⼀区别就是损失函数的度量⽅式不同 NuSVC中的nu参数和SVC中的C参数; LinearSVC是实现线性核函数的⽀持向量分类,没有kernel参数。

(10)SVM优缺点

  SVM的优点:

    在⾼维空间中⾮常⾼效;

    即使在数据维度⽐样本数量⼤的情况下仍然有效;

    在决策函数(称为⽀持向量)中使⽤训练集的⼦集,因此它也是⾼效利⽤内存的;

    通⽤性:不同的核函数与特定的决策函数⼀⼀对应;

  SVM的缺点:

    如果特征数量⽐样本数量⼤得多,在选择核函数时要避免过拟合;

    对缺失数据敏感;

    对于核函数的⾼维映射解释⼒不强。

3、神经网络

  神经网络包括输入层、隐藏层、输出层,每一个节点代表一个神经元,节点之间的连线对应权重值,输入变量经过神经元时会运行激活函数,对输入值赋予权重并加上偏置,将输出结果传递到下一层中的神经元,而权重值和偏置在神经网络训练过程中不断修正。神经网络的训练过程主要包括前向传输和逆向反馈,将输入变量逐层向前传递最后得到输出结果,并对比实际结果,逐层逆向反馈误差,同时对神经元中权重值和偏置进行修正,然后重新进行前向传输,依此反复迭代直到最终预测结果与实际结果一致或在一定的误差范围内。与神经网络相关的基础概念有感知器、反向传播算法、Hopfield神经网络、自组织映射(SOM)、学习矢量量化(LVQ)等,这些概念将在神经网络一章中详细说明。BP神经网络的结果准确性与训练集的样本数量和质量有关,如果样本数量过少可能会出现过拟合的问题,无法泛化新样本;而且BP神经网络对训练集中的异常点比较敏感,需要分析人员对数据做好预处理,例如数据标准化、去除重复数据、移除异常数据,从而提高BP神经网络的性能。由于神经网络是基于历史数据构建的模型,因此,随着新的数据不断产生,需要进行动态优化,例如随着时间变化,应用新的数据对模型重新训练,调整网络的结构和参数值。

 

二、回归分析

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

 1、线性回归

  概念:线性回归(Linear regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的 ⼀种分析⽅式。

  特点:只有⼀个⾃变量的情况称为单变量回归,多于⼀个⾃变量情况的叫做多元回归

  

  eg:房⼦价格 = 0.368×中⼼区域的距离 + 0.131×通勤时长 + 0.239×⾃住房平均房价 + 0.118×安全,我们看到特征值与⽬标值之间建⽴了⼀个关系,这个关系可以理解为线性模型。

  模型分类:线性回归当中主要有两种模型,⼀种是线性关系,另⼀种是⾮线性关系。

 (2)线性回归中总的损失函数

   

  如何去求模型当中的W,使得损失最⼩?(⽬的是找到最⼩损失对应的W值)

  线性回归经常使⽤的两种优化算法:正规⽅程、梯度下降法

   

   算法选择依据:

  (1)⼩规模数据:

    正规⽅程:LinearRegression(不能解决拟合问题)

    岭回归

  (2)⼤规模数据:

    梯度下降法:SGDRegressor

2、逻辑回归

  逻辑回归(Logistic Regression)是机器学习中的⼀种分类模型,逻辑回归是⼀种分类算法,虽然名字中带有回归。由 于算法的简单和⾼效,在实际中应⽤⾮常⼴泛。

 (1)逻辑回归输入

   

 (2)激活函数

  判断标准 回归的结果输⼊到sigmoid函数当中 输出结果:[0, 1]区间中的⼀个概率值,默认为0.5为阈值

  

  逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,并且这个类别默认标记为1(正例), 另外的⼀个类别会标记为0(反例)。(⽅便损失计算)

  输出结果解释(重要):假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值。现在有⼀个样本的 输⼊到逻辑回归输出结果0.55,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别。那么反之,如 果得出结果为0.3那么,训练或者预测结果就为B(0)类别。

 (3)损失及优化

  损失:逻辑回归的损失,称之为对数似然损失。

  优化:同样使⽤梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前⾯对应算法的权重参数,提升原本属于1类 别的概率,降低原本是0类别的概率。

 

3、多项式回归

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

 

4、岭回归

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

 

引申:回归决策树

我们主要可以把其分为两类,连续型数据和离散型数据。在⾯对不同数据时,决策树也 可以分为两⼤类型: 分类决策树和回归决策树。 前者主要⽤于处理离散型数据,后者主要⽤于处理连续型数据。

   关于数据类型,我们主要可以把其分为两类,连续型数据和离散型数据。在⾯对不同数据时,决策树也 可以分为两⼤类型:

  分类决策树和回归决策树。 前者主要⽤于处理离散型数据,后者主要⽤于处理连续型数据。

  在回归树中,采⽤的是启发式的⽅法。假如我们有n个特征,每个特征有s (i ∈ (1, n))个取值,那我们遍历所有特征, 尝试该特征所有取值,对空间进⾏划分,直到取到特征 j 的取值 s,使得损失函数最⼩,这样就得到了⼀个划分点。描 述该过程的公式如下:

  

  假设将输⼊空间划分为M个单元:R , R , ..., R 那么每个区域的输出值就是:c = avg(y ∣x ∈ R )也就是该区域内所 有点y值的平均数。

  (2)算法描述

  输⼊:训练数据集D: 输出:回归树f(x). 在训练数据集所在的输⼊空间中,递归的将每个区域划分为两个⼦区域并决定每个⼦区域上的输出值,构建⼆叉决 策树:

  

三、集成学习算法简介

1、集成学习相关概念

 (1)集成学习通过建⽴⼏个模型来解决单⼀预测问题。它的⼯作原理是⽣成多个分类器/模型,各⾃独⽴地学习和作出预 测。这些预测最后结合成组合预测,因此优于任何⼀个单分类的做出预测。

 (2)机器学习两个任务:

    任务⼀:如何优化训练数据 —> 主要⽤于解决⽋拟合问题

    任务⼆:如何提升泛化性能 —> 主要⽤于解决过拟合问题

 (3)boosting和Bagging

    

  只要单分类器的表现不太差,集成学习的结果总是要好于单分类器的。

2、Bagging和随机森林

  (1)Bagging集成原理

  (2)随机森林构造过程

  在机器学习中,随机森林是⼀个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数⽽定。 随机森林 = Bagging + 决策树

  

  随机森林够造过程中的关键步骤(M表示特征数⽬):
   1)⼀次随机选出⼀个样本,有放回的抽样,重复N次(有可能出现重复的样本)
   2) 随机去选出m个特征, m <<M,建⽴决策树

 (3)包外估计 (Out-of-Bag Estimate)

  1)定义

  随机森林的 Bagging 过程,对于每⼀颗训练出的决策树 g ,与数据集 D 有如下关系:

 

  对于星号的部分,即是没有选择到的数据,称之为 Out-of-bag(OOB)数据,当数据⾜够多,对于任意⼀组数据 (x , y ) 是包外数据的概率为:

  

 

  由于基分类器是构建在训练样本的⾃助抽样集上的,只有约 63.2% 原样本集出现在中,⽽剩余的 36.8% 的数据作为包 外数据,可以⽤于基分类器的验证集。 经验证,包外估计是对集成分类器泛化误差的⽆偏估计. 在随机森林算法中数据集属性的重要性、分类器集强度和分类器间相关性计算都依赖于袋外数据。

  2)用途

  当基学习器是决策树时,可使⽤包外样本来辅助剪枝 ,或⽤于估计决策树中各结点的后验概率以辅助对零训练样 本结点的处理; 当基学习器是神经⽹络时,可使⽤包外样本来辅助早期停⽌以减⼩过拟合 。

 (4)bagging集成优点

  Bagging + 决策树/线性回归/逻辑回归/深度学习… = bagging集成学习⽅法 经过上⾯⽅式组成的集成学习⽅法: 1. 均可在原有算法上提⾼约2%左右的泛化正确率 2. 简单, ⽅便, 通⽤

3、Boosting

  简⽽⾔之:每新加⼊⼀个弱学习器,整体能⼒就会得到提升,代表算法:Adaboost,GBDT,XGBoost,LightGBM

  (1)bagging集成与boosting集成的区别:

   区别⼀:数据⽅⾯ Bagging:对数据进⾏采样训练; Boosting:根据前⼀轮学习结果调整数据的重要性。

     区别⼆:投票⽅⾯ Bagging:所有学习器平权投票; Boosting:对学习器进⾏加权投票。

   区别三:学习顺序 Bagging的学习是并⾏的,每个学习器没有依赖关系; Boosting学习是串⾏,学习有先后顺序。

   区别四:主要作⽤ Bagging主要⽤于提⾼泛化性能(解决过拟合,也可以说降低⽅差) Boosting主要⽤于提⾼训练精度 (解决⽋拟合,也可以说降低偏差)

  

 

4、AdaBoost介绍

  (1)构造过程细节

  

 

  (2)即

  

 

 5、GBDT介绍

  GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升树,在传统机器学习算法中,GBDT算的上TOP3的算法。 想要理解GBDT的真正意义,那就必须理解GBDT中的Gradient Boosting 和Decision Tree分别是什么?

  (1)Decision Tree:CART回归树

  ⾸先,GBDT使⽤的决策树是CART回归树,⽆论是处理回归问题还是⼆分类以及多分类,GBDT使⽤的决策树通通都 是都是CART回归树。 为什么不⽤CART分类树呢? 因为GBDT每次迭代要拟合的是梯度值,是连续值所以要⽤回归树。 对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。 在分类树中最佳划分点的判别标准是熵或者基尼系数,都是⽤纯度来衡量的,但是在回归树中的样本标签是连续数值, 所以再使⽤熵之类的指标不再合适,取⽽代之的是平⽅误差,它能很好的评判拟合程度。

  1)回归树⽣成算法

  

   2)Gradient Boosting: 拟合负梯度

     梯度提升树(Grandient Boosting)是提升树(Boosting Tree)的⼀种改进算法,所以在讲梯度提升树之前先来说⼀下提升树。 先来个通俗理解:假如有个⼈30岁,我们⾸先⽤20岁去拟合,发现损失有10岁,这时我们⽤6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们⽤3岁拟合剩下的差距,差距就只有⼀岁了。如果我们的迭代轮数还没有完,可以继续迭代 下⾯,每⼀轮迭代,拟合的岁数误差都会减⼩。最后将每次拟合的岁数加起来便是模型输出的结果。

  

  (2)GBDT算法原理

  

  

 四、聚类算法

   聚类是基于无监督学习的分析模型,不需要对原始数据进行标记,按照数据的内在结构特征进行聚集形成簇群,从而实现数据的分离。聚类与分类的主要区别是其并不关心数据是什么类别,而是把相似的数据聚集起来形成某一类簇。在聚类的过程中,首先选择有效特征构成向量,然后按照欧氏距离或其他距离函数进行相似度计算,并划分聚类,通过对聚类结果进行评估,逐渐迭代生成新的聚类。聚类应用领域广泛,可以用于发现不同的企业客户群体特征、消费者行为分析、市场细分、交易数据分析、动植物种群分类、医疗领域的疾病诊断、环境质量检测等,还可用于互联网和电商领域的客户分析、行为特征分类等。在数据分析过程中,可以先用聚类对数据进行探索,发现其中蕴含的类别特点,然后再用分类等方法分析每一类的特征。聚类方法可分为基于层次的聚类(Hierarchical Method)、基于划分的聚类(PartitioningMethod,PAM)、基于密度的聚类、基于约束的聚类、基于网络的聚类等。基于层次的聚类是将数据集分为不同的层次,并采用分解或合并的操作进行聚类,主要包括BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)、CURE(Clustering UsingRepresentatives)等。基于划分的聚类是将数据集划分为k个簇,并对其中的样本计算距离以获得假设簇中心点,然后以簇的中心点重新迭代计算新的中心点,直到k个簇的中心点收敛为止。基于划分的聚类有k-均值等。基于密度的聚类是根据样本的密度不断增长聚类,最终形成一组“密集连接”的点集,其核心思想是只要数据的密度大于阈值就将其合并成一个簇,可以过滤噪声,聚类结果可以是任意形状,不必为凸形。基于密度的聚类方法主要包括DBSCAN(Density-Based Spatial Clustering of Applicationwith Noise)、OPTICS(Ordering Points To Identify the Clustering Structure)等。

 (1)聚类算法在现实中的应⽤

   ⽤户画像,⼴告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别 基于位置信息的商业推送,新闻聚类,筛选排序 图像分割,降维,识别;离群点检测;信⽤卡异常消费;发掘相同功能的基因⽚段

  (2)聚类算法:

   ⼀种典型的⽆监督学习算法,主要⽤于将相似的样本⾃动归到⼀个类别中。 在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算⽅法,会得到不同的聚类结 果,常⽤的相似度计算⽅法有欧式距离法。

 (3)聚类算法与分类算法最⼤的区别

     聚类算法是⽆监督的学习算法,⽽分类算法属于监督的学习算法。

 (4)k-means其实包含两层内容:

    K : 初始中⼼点个数(计划聚类数);

   means:求中⼼点到其他数据点距离的平均值;

 (5)k-means聚类步骤

  1、随机设置K个特征空间内的点作为初始的聚类中⼼

  2、对于其他每个点计算到K个中⼼的距离,未知的点选择最近的⼀个聚类中⼼点作为标记类别

  3、接着对着标记的聚类中⼼之后,重新计算出每个聚类的新中⼼点(平均值)

  4、如果计算得出的新中⼼点与原中⼼点⼀样(质⼼不再移动),那么结束,否则重新进⾏第⼆步过程

 (6)k-means算法优缺点总结

  优点:

    1.原理简单(靠近中⼼点),实现容易;

    2.聚类效果中上(依赖K的选择);

    3.空间复杂度o(N),时间复杂度o(IKN);

  缺点:

    1.对离群点,噪声敏感 (中⼼点易偏移);

    2.很难发现⼤⼩差别很⼤的簇及进⾏增量计算;

    3.结果不⼀定是全局最优,只能保证局部最优(与K的个数及初值选取有关)。

(7)算法优化

  

 

五、特征降维

  (1)降维是指在某些限定条件下,降低随机变量(特征)个数,得到⼀组“不相关”主变量的过程

  (2)降维的两种⽅式

    特征选择

     1)数据中包含冗余或⽆关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

     2)Filter(过滤式):主要探究特征本身特点、特征与特征和⽬标值之间关联

      ⽅差选择法:低⽅差特征过滤

      相关系数 Embedded (嵌⼊式):算法⾃动选择特征(特征与⽬标值之间的关联)

      决策树:信息熵、信息增益 正则化:L1、L2 深度学习:卷积等

      3)低⽅差特征过滤(把⽅差⽐较⼩的某⼀列进⾏剔除)

      删除低⽅差的⼀些特征,前⾯讲过⽅差的意义。再结合⽅差的⼤⼩来考虑这个⽅式的⻆度。

      特征⽅差⼩:某个特征⼤多样本的值⽐较相近;

      特征⽅差⼤:某个特征很多样本的值都有差别;

   

    主成分分析(可以理解⼀种特征提取的⽅式)

     1)⾼维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量

     2)是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

     3)回归分析或者聚类分析当中

  (3)相关系数

    主要实现⽅式: ⽪尔逊相关系数 斯⽪尔曼相关系数 ⽪尔逊相关系数 通过具体值的⼤⼩进⾏计算 相对复杂 api:from scipy.stats import pearsonr 返回值,越接近|1|,相关性越强;越接近0,相关性越弱 斯⽪尔曼相关系数 通过等级差进⾏计算 ⽐上⼀个简单 api:from scipy.stats import spearmanr 返回值,越接近|1|,相关性越强;越接近0,相关性越弱

  

六、、算法选择指导(scikit learn官⽅)

  

 

1、朴素⻉叶斯

(1)定义

  

  朴素⻉叶斯,简单理解,就是假定了特征与特征之间相互独⽴的⻉叶斯公式。 也就是说,朴素⻉叶斯,之所以朴素,就在于假定了特征与特征相互独⽴。在计算条件概率分布P(X=x∣Y=c_k)时,NB引⼊了⼀个很强的条件独⽴假设,即,当Y确定时,X的各个特征分量取值之 间相互独⽴。

  那么这个公式如果应⽤在⽂章分类的场景当中,我们可以这样看:

  

 

(2)朴素⻉叶斯优缺点

   优点: 朴素⻉叶斯模型发源于古典数学理论,有稳定的分类效率对缺失数据不太敏感,算法也⽐较简单,常⽤于⽂本分类 分类准确度⾼,速度快;

   缺点: 由于使⽤了样本属性独⽴性的假设,所以如果特征属性有关联时其效果不好需要计算先验概率,⽽先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳;

(3)原理

  朴素⻉叶斯法是基于⻉叶斯定理与特征条件独⽴假设的分类⽅法。 对于给定的待分类项x,通过学习到的模型计算后验概率分布, 即:在此项出现的条件下各个⽬标类别出现的概率,将后验概率最⼤的类作为x所属的类别。

(4)在估计条件概率P(X∣Y)时出现概率为0的情况处理

    采⽤⻉叶斯估计。 简单来说,引⼊λ, 当λ=0时,就是普通的极⼤似然估计; 当λ=1时称为拉普拉斯平滑。

 

2、SVM回归

  SVM回归是让尽可能多的实例位于预测线上,同时限制间隔违例(也就是不在预测线距上的实例)。

  线距的宽度由超参数ε控制。

  

3、EM算法

  EM算法也称期望最⼤化(Expectation-Maximum,简称EM)算法。 它是⼀个基础算法,是很多机器学习领域算法的基础,⽐如隐式⻢尔科夫算法(HMM)等等。

  EM算法是⼀种迭代优化策略,由于它的计算⽅法中每⼀次迭代都分两步,其中⼀个为期望步(E步), 另⼀个为极⼤步(M步),所以算法被称为EM算法(Expectation-Maximization Algorithm)。

  EM算法受到缺失思想影响,最初是为了解决数据缺失情况下的参数估计问题,其算法基础和收敛有效性等问题在 Dempster、Laird和Rubin三⼈于1977年所做的⽂章《Maximum likelihood from incomplete data via the EM algorithm》 中给出了详细的阐述。其基本思想是:⾸先根据⼰经给出的观测数据,估计出模型参数的值; 然后再依据上⼀步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前⼰经观测到的数据重新再 对参数值进⾏估计; 然后反复迭代,直⾄最后收敛,迭代结束。

  EM算法计算流程:

  

 (1)极⼤似然估计

   根据已知条件,通过极⼤似然估计,求出未知参数; 极⼤似然估计就是⽤来估计模型参数的统计学⽅法。

 (2)EM算法的实现思路:

   ⾸先根据⼰经给出的观测数据,估计出模型参数的值; 然后再依据上⼀步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前⼰经观测到的数据重 新再对参数值进⾏估计; EM算法实例 66 然后反复迭代,直⾄最后收敛,迭代结束。

  

4、HMM模型(Hidden Markov Model,HMM)

  隐⻢尔可夫模型(Hidden Markov Model,HMM)是统计模型,它⽤来描述⼀个含有隐含未知参数的⻢尔可夫过程。 其难点是从可观察的参数中确定该过程的隐含参数。然后利⽤这些参数来作进⼀步的分析,例如模式识别。

(1)⻢尔科夫链

  在机器学习算法中,⻢尔可夫链(Markov chain)是个很重要的概念。⻢尔可夫链(Markov chain),⼜称离散时间⻢尔 可夫链(discrete-time Markov chain),因俄国数学家安德烈·⻢尔可夫(俄语:Андрей Андреевич Марков)得 名。⻢尔科夫链即为状态空间中从⼀个状态到另⼀个状态转换的随机过程。

  该过程要求具备“⽆记忆”的性质: 下⼀状态的概率分布只能由当前状态决定,在时间序列中它前⾯的事件均与之⽆关。这种特定类型的“⽆记忆 性”称作⻢尔可夫性质。 ⻢尔科夫链作为实际过程的统计模型具有许多应⽤。 在⻢尔可夫链的每⼀步,系统根据概率分布,可以从⼀个状态变到另⼀个状态,也可以保持当前状态。 状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率。

  ⻢尔可夫链的数学表示为:

  

  既然某⼀时刻状态转移的概率只依赖前⼀个状态,那么只要求出系统中任意两个状态之间的转移概率,这个⻢尔科 夫链的模型就定了。

 (2)我们会应⽤⼀个和前⼀个问题类似的解法,只不过前⼀个问题关⼼的是概率最⼤值,这个问题关⼼的是 概率之和。解决这个问题的算法叫做前向算法(forward algorithm)。

 (3)HMM模型应用

  ⾸先我们来看看什么样的问题解决可以⽤HMM模型。使⽤HMM模型时我们的问题⼀般有这两个特征:

  1)我们的问题是基于序列的,⽐如时间序列,或者状态序列。

  2)我们的问题中有两类数据, ⼀类序列数据是可以观测到的,即观测序列; ⽽另⼀类数据是不能观察到的,即隐藏状态序列,简称状态序列。

  有了这两个特征,那么这个问题⼀般可以⽤HMM模型来尝试解决。这样的问题在实际⽣活中是很多的。

  ⽐如:老师上课,老师发出的⼀串连续的声⾳就是观测序列,⽽实际要表达的⼀段话就是隐藏状态序 列,你⼤脑的任务,就是从这⼀串连续的声⾳中判断出我最可能要表达的话的内容。 

  HMM模型⼀共有三个经典的问题需要解决:

  1)评估观察序列概率 —— 前向后向的概率计算 即给定模型λ = (A, B, Π)和观测序列O = {o , o , ...o },计算在模型 λ 下某⼀个观测序列O出现的概率P(O|λ )。 这个问题的求解需要⽤到前向后向算法,是HMM模型三个问题中最简单的。

  2)预测问题,也称为解码问题 ——维特⽐(Viterbi)算法 即给定模型λ = (A, B, Π)和观测序列O = {o , o , ...o },求给定观测序列条件下,最可能出现的对应的状态序列。 这个问题的求解需要⽤到基于动态规划的维特⽐算法,是HMM模型三个问题中复杂度居中的算法。

  3)模型参数学习问题 —— 鲍姆-⻙尔奇(Baum-Welch)算法(状态未知) ,这是⼀个学习问题 即给定观测序列O = {o , o , ...o },估计模型λ = (A, B, Π)的参数,使该模型下观测序列的条件概率P(O∣λ)最⼤。 这个问题的求解需要⽤到基于EM算法的鲍姆-⻙尔奇算法,是HMM模型三个问题中最复杂的。

  

5、XGBoost

  XGBoost(Extreme Gradient Boosting)全名叫极端梯度提升树,XGBoost是集成学习⽅法的王牌,在Kaggle数据挖掘 ⽐赛中,⼤部分获胜者⽤了XGBoost。 XGBoost在绝⼤多数的回归和分类问题上表现的⼗分顶尖。

 (1)XGBoost与GDBT的区别

   区别⼀: XGBoost⽣成CART树考虑了树的复杂度, GDBT未考虑,GDBT在树的剪枝步骤中考虑了树的复杂度。

   区别⼆: XGBoost是拟合上⼀轮损失函数的⼆阶导展开,GDBT是拟合上⼀轮损失函数的⼀阶导展开,因此,XGBoost 的准确性更⾼,且满⾜相同的训练效果,需要的迭代次数更少。

   区别三: XGBoost与GDBT都是逐次迭代来提⾼模型性能,但是XGBoost在选取最佳切分点时可以开启多线程进⾏,⼤ ⼤提⾼了运⾏速度。

 

6、lightGBM

(1)lightGBM演进过程

    

(2)AdaBoost算法

  AdaBoost是⼀种提升树的⽅法,和三个臭⽪匠,赛过诸葛亮的道理⼀样。

  AdaBoost两个问题:

    (2.1) 如何改变训练数据的权重或概率分布 提⾼前⼀轮被弱分类器错误分类的样本的权重,降低前⼀轮被分对的权重 。

    (2.2) 如何将弱分类器组合成⼀个强分类器,亦即,每个分类器,前⾯的权重如何设置 采取”多数表决”的⽅法。加⼤分类错误率⼩的弱分类器的权重,使其作⽤较⼤,⽽减⼩分类错误率⼤的弱分类器 的权重,使其在表决中起较⼩的作⽤。

(3)GBDT算法以及优缺点

  GBDT和AdaBosst很类似。GBDT和其它Boosting算法⼀样,通过将表现⼀般的⼏个模型(通常是深度固定的决策树)组合在⼀起来集成⼀个表现较好的模型。 AdaBoost是通过提升错分数据点的权重来定位模型的不⾜, Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型,即通过反复地选择⼀个指向负梯度⽅向的函数,该算法可被看做在函数空间⾥对⽬标函数进⾏优化。

 (3.1)缺点:

   1) 空间消耗⼤。 lightGBM算法原理 125 这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这⾥需要消耗训练数据两倍的内存。

   2) 时间上也有较⼤的开销。 在遍历每⼀个分割点的时候,都需要进⾏分裂增益的计算,消耗的代价⼤。

     3) 对内存(cache)优化不友好。 在预排序后,特征对梯度的访问是⼀种随机访问,并且不同的特征访问的顺序不⼀样,⽆法对cache进⾏优化。 同时,在每⼀层⻓树的时候,需要随机访问⼀个⾏索引到叶⼦索引的数组,并且不同特征访问的顺序也不⼀ 样,也会造成较⼤的cache miss。

 (3.2)启发

  常⽤的机器学习算法,例如神经⽹络等算法,都可以以mini-batch的⽅式训练,训练数据的⼤⼩不会受到内存限制。 ⽽GBDT在每⼀次迭代的时候,都需要遍历整个训练数据多次。 如果把整个训练数据装进内存则会限制训练数据的⼤⼩;如果不装进内存,反复地读写训练数据⼜会消耗⾮常⼤的时间。 尤其⾯对⼯业级海量的数据,普通的GBDT算法是不能满⾜其需求的。 LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地⽤于⼯业实践。

 (3.3)lightGBM

  1)作为三大知名GBDT的实现之一,lightGBM是微软在GItHub上开源的⼀个新的梯度提升框架。在开源之后,就被别⼈冠以“速度惊⼈”、“⽀持分布式”、“代码清晰易懂”、“占⽤内存⼩”等属性。 LightGBM主打的⾼效并⾏训练让其性能超越现有其他boosting⼯具。在Higgs数据集上的试验表明,LightGBM⽐ XGBoost快将近10倍,内存占⽤率⼤约为XGBoost的1/6。 

  2)lightGBM原理

  lightGBM 主要基于以下⽅⾯优化,提升整体特特性:

   1. 基于Histogram(直⽅图)的决策树算法,只需要遍历几个可能的分裂节点,也不需要计算所有样本;

   2. 带深度限制的Leaf-wise的叶⼦⽣⻓策略;

   3. 直接⽀持类别特征;

   4. LGB选择梯度大的样本来计算信息增益,在保留大梯度样本的同时,随机地保留一些小梯度样本,同时放大了小梯度样本带来的信息增益;

   5. LGB还内置了特征降维技术,思想就是合并那些冲突小的稀疏特征。

 

  感谢阅读,参考了不少大佬资源(非常感激),如需转载,请注明出处,谢谢!https://www.cnblogs.com/huyangshu-fs/p/14488384.html

posted on 2021-06-21 22:36  ys-fullStack  阅读(186)  评论(0编辑  收藏  举报