天天看点

【树模型与集成学习】(task8)阶段性总结(更新ing)

学习总结

作业需要继续补!

task1学习决策树基础,根据评价标准为信息增益、信息增益比、基尼指数分别分为ID3树,C4.5树和CART树

task2学习cart的分类和回归代码

task3基于偏差和方差理论,分为bagging和boosting两种组合基分类器的方法,另外staking和blending是两种根据数据集的划分进行训练的方法

task4学习两种并行集成的树模型,随机森林(基于投票)和孤立森林(可用于异常检测)

task5学习Adaboost自适应提升法,每轮提高前一轮弱分类器错误分类样本的权值

task6学习梯度提升树GBDT,常和逻辑回归组合一起进行CTR点击率预测;GBDT利用负梯度拟合残差进行训练。

task7是ML比赛中常用的XGBoost和LightGBM,继续恶补!

文章目录

  • ​​学习总结​​
  • ​​一、总结and回顾​​
  • ​​(task1)决策树(上)​​
  • ​​(task2)代码实现CART树(更新ing)​​
  • ​​(task3)集成模式(更新ing)​​
  • ​​(task4)两种并行集成的树模型​​
  • ​​(task5)自适应提升法AdaBoost(更新ing)​​
  • ​​(task6)梯度提升树GBDT+LR​​
  • ​​(task7)XGBoost和LightGBM(更新ing)​​
  • ​​二、不足点​​
  • ​​三、后期计划​​

一、总结and回顾

(task1)决策树(上)

(1)决策树常用于分类,目标就是将具有 维特征的 个样本分到 个类别中,相当于做一个映射 ,将样本经过一种变换赋予一个 。可以把分类的过程表示成一棵树,每次通过选择一个特征

ID3树 C4.5树 CART算法
评价标准 信息增益 信息增益比 基尼指数
样本类型 离散型变量 连续型变量 连续型变量
任务 分类 分类 分类and回归(回归树使用最小平方误差)

(2)掌握节点分类指标的引入原因、定义和计算,掌握两种分类树的原理和区别,掌握CART树与树减枝的原理。

(3)ID3使用【信息增益度】选择测试属性。从直觉上讲,小概率事件比大概率事件包含的信息量大,即百年一见的事情比习以为常的事情包含的信息量大。

(4)信息增益 = 信息熵 - 条件熵

其中【熵】指信息量的大小,即表示随机变量的不确定性,熵越大,随机变量的不确定性越大。如果用p(ai)表示事件ai发生的概率,熵则表示为事件的信息量I(ai):

取任意随机变量的概率均相同时,不确定性越高,即均匀分布的信息熵最大。

(5)CART树:

回归问题:用均方误差(MSE)或平均绝对误差(MAE)来替换熵和条件熵的位置。

分类问题:用基尼系数(CART将熵中的在处利用一阶泰勒展开,基尼系数定义为熵的线性近似)。

(task2)代码实现CART树(更新ing)

task2学习GYH大佬的回归CART树,并在此基础上改为分类CART树。

(task3)集成模式(更新ing)

  • 本次学习任务:理解泛化误差分解的过程,掌握bagging的性质,掌握四种集成模式的工作流程。实现stacking和blending。集成学习讨论的是如何将基分类器集成起来;集成学习一般分为3个步骤:找到误差互相独立的基分类器;训练基分类器;合并基分类器的结果。
【树模型与集成学习】(task8)阶段性总结(更新ing)
  • 偏差:由于分类器的表达能力有限导致的系统性错误,表现在训练误差不收敛;

    方差:分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合。

【树模型与集成学习】(task8)阶段性总结(更新ing)
  • 基分类器的错误 = 偏差 + 方差

    Boosting通过逐步聚集基分类器分错的样本,减少集成分类器的偏差;Bagging通过分而治之的策略,通过对训练样本多次采用,综合决策多个训练出来的模型,来减少集成分类器的方差。

  • stacking严格来说并不是一种算法,而是精美而又复杂的,对模型集成的一种策略。Stacking集成算法可以理解为一个两层的集成,第一层含有多个基础分类器,把预测的结果(元特征)提供给第二层, 而第二层的分类器通常是逻辑回归,他把一层分类器的结果当做特征做拟合输出预测结果。
  • 挖个坑,kaggle的一文​​Introduction to Ensembling/Stacking in Python​​要补。

(task4)两种并行集成的树模型

(1)随机森林中的随机主要来自三个方面:

  • 其一为bootstrap抽样导致的训练集随机性,
  • 其二为每个节点随机选取特征子集进行不纯度计算的随机性,
  • 其三为当使用随机分割点选取时产生的随机性(此时的随机森林又被称为Extremely Randomized Trees)。

(2)孤立森林算法类比在切蛋糕,点密度稠密的一块需要切很多刀才能分割完,而那些很早能分割完的应该是异常点(我们要把每个点都单独存在一个子空间中)。

孤立森林通过随机选择特征,然后随机选择特征的分割值,递归地生成数据集的分区。和数据集中「正常」的点相比,要隔离的异常值所需的随机分区更少,因此异常值是树中路径更短的点,路径长度是从根节点经过的边数。

(task5)自适应提升法AdaBoost(更新ing)

  • 上次task的两种并行集成的树模型(随机森林和孤立森林)都是属于Bagging模型,而这个task是学习Boosting的Adaboost模型(既可以作分类也可以作回归),用其处理分类和回归任务的算法原理,包括SAMME算法、SAMME.R算法和Adaboost.R2算法。
  • AdaBoost算法通过迭代每次学习一个基分类器。每次迭代中,提高那些被前一轮分类器错误分类数据的权值,降低正确分类的数据权值。最后给分类误差率小的基分类器,大权值;将各基分类器的线性组合作为【强分类器】。

    AdaBoost有一种解释,即可以认为它是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二分类学习方法。

  • 对于提升方法,要明确两个问题:

    (1)每一轮如何改变训练数据的权值或概率分布——提高那些被前一轮弱分类器错误分类样本的权值;

    (2)如何将弱分类器组合成一个强分类器——AdaBoost采用加权多数表决的方法(加大分类误差率小的弱分类器的权值)。

(task6)梯度提升树GBDT+LR

(1)不同问题的提升树学习算法,主要区别在于使用的损失函数不同,如用平方误差损失函数的回归问题、用指数损失函数的分类问题、用一般损失函数的一般决策问题等。

【树模型与集成学习】(task8)阶段性总结(更新ing)

(2)不管是二分类问题的提升树,还是回归问题的提升树,这里的损失函数都很方便:前者是用指数损失函数,所以可以当做是Adaboost的个例,Aadaboost的流程;而后者是当使用平方误差损失时,可以直接拟合残差。

而使用不同的损失函数,对应的凸优化问题不同,现在我们希望找到一个通用的方式,求解一般性凸优化问题——GBDT就是用来解决该问题(大体过程如上图)。

由于GBDT是利用残差训练的(用负梯度去拟合残差),在预测的过程中,我们也需要把所有树的预测值加起来,得到最终的预测结果。

(3)我们把以决策树为基础的一系列模型统称为树模型,也是 AI 比赛中最常用的模型。

  • 决策树经历了三次改进,ID3、C4.5、CART,主要区别在于一个根据信息增益划分特征、一个根据信息增益率、一个根据基尼指数。
  • 随机森林=决策树+Bagging集成学习
  • GBDT=决策树+AdaBoost集成学习
  • XGB是陈天奇2014年提出,相当于GBDT的工程改进版,在实用性和准确度上有很大提升。比如:使用泰勒二阶展开近似损失函数,支持处理缺失值、在特性粒度上并行计算等等特性。

(4)Gradient Boosting是Boosting中的一大类算法,基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加 的形式结合到现有模型中。在每 一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的更新。

(task7)XGBoost和LightGBM(更新ing)

XGBoost和GBDT树有何异同?

(可从目标损失、近似方法、分裂依据等方面考虑)

(1)GBDT是机器学习算法,XGBoost是该算法的工程实现。

(2)在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。

(3)GBDT在模型训练时只使用了损失函数的一阶导数信息,XGBoost对损失函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。

(4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。

(5)传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用与随机森林类似的策略,支持对数据进行采样。

(6)传统的GBDT没有对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

二、不足点

三、后期计划

继续阅读