陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步!
每天都在更新中,记得收藏,每天进步一点点!!

一天1个机器学习知识点(一)(决策树,有无监督学习,SVM,梯度下降法,逻辑回归,NB)
一天1个机器学习知识点(二)(KNN,Kmeans,偏差方差,参数非参数模型,生成模型判别模型,正则化,概率,牛顿法,熵)
一天1个机器学习知识点(三)(损失函数,生成模型和判别模型,DBSCAN,OPTICS)
一天1个机器学习知识点(四)这部分主要更新集成学习的内容(RF,adaboost,GBDT,XGBoost等)
一天1个机器学习知识点(五)(特征工程相关,PCA,LDA等)

穿越---->深度学习知识点!!

目录

  • 1.bagging和boosting
    • 1.1 bagging(套袋法)
    • 1.2boosting
    • 1.3 区别
    • 1.4为什么说bagging是减少variance,而boosting是减少bias?
  • 1.随机森林(RF)
    • 1.1原理
    • 1.2 优缺点
    • 1.3其他面试点
  • 2.Adaboost
    • 2.1加法模型和指数损失函数
    • 2.2原理
    • 2.3算法流程
    • 2.4弱分类器权重公式推导
    • 2.5优缺点
    • 2.6其他面试点
  • 3.GBDT(梯度提升决策树)
    • 3.1 原理
    • 3.2GBDT 算法的流程?
    • 3.3GBDT 如何选择特征 ?
    • 3.4GBDT如何构建特征 (GBDT+LR)
    • 3.5GBDT 如何用于分类?
    • 3.6GBDT的优点和局限性
    • 3.7梯度提升和梯度下降的区别和联系
    • 3.8RF、GBDT的区别
    • 3.9GBDT怎样设置单棵树的停止生长条件?
    • 3.10GBDT如何评估特征的权重大小?
    • 3.11GBDT中哪些部分可以并行?
    • 3.12如何防止过拟合?
    • 3.13GBDT当增加样本数量时,训练时长是线性增加吗?
    • 3.14当增加树的颗数时,训练时长是线性增加吗?
    • 3.15当增加一个棵树叶子节点数目时,训练时长是线性增加吗?
    • 3.16每个节点上都保存什么信息?
  • 4.XgBoost
    • 4.1XgBoost有哪些特点
    • 4.2对于连续值如何进行分割?
    • 4.3对于特征缺失值如何分类?
    • 4.4XGBoost怎么做到并行化
    • 4.5XgBoost和GBDT的区别和联系
    • 4.6.XGBoost和深度学习的区别?
    • 4.7.xgboost为什么使用二阶泰勒展开
  • 5.lightGBM
    • 5.1LGB原理
    • 5.2.XGboost的不足之处
    • 5.3.XGBoost和LGBM树的生长方式
    • 5.4.XGBoost和LGBM树的划分方式
    • 5.5.支持类别特征
    • 5.6.支持并行学习
    • 5.7lightGBM与XGboost对比
    • 5.8直方图算法

1.bagging和boosting

1.1 bagging(套袋法)

其算法过程如下:

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  3. 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

1.2boosting

AdaBoosting方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)
梯度提升的Boosting方式是使用代价函数对上一轮训练出的模型函数f的偏导来拟合残差。

1.3 区别

1)样本选择上
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大

3)预测函数权重
Bagging:所有预测函数的权重相等
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重

4)并行计算
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

1.4为什么说bagging是减少variance,而boosting是减少bias?

关于偏差和方差在机器学习系列第二篇。

  • bagging的方法主要是随机取样,每个模型的目标函数跟单模型并没有很大的区别,所以bias变化不大,而多个模型的集成降低异常点的影响,这两个方法都可以降低variance。
  • boosting的方法通过残差学习,最后得预测值发生了改变,是由多个模型预测值与每个模型权重重新表示,纠错之后的boosting预测值自然是更接近真实值,因此bais偏离真实值的误差会降低。(我觉得根据这个可以用在stacking的模型选择上)

1.随机森林(RF)

1.1原理

Random Forest(随机森林)是Bagging的扩展变体,它在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括RF包括四个部分:1、随机选择样本(放回抽样);2、随机选择特征;3、构建决策树;4、随机森林投票(平均)

随机选择样本和Bagging相同,随机选择特征是指在树的构建中,会从样本集的特征集合中随机选择部分特征,然后再从这个子集中选择最优的属性用于划分,这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的‘平均’特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。

在构建决策树的时候,RF的每棵决策树都最大可能的进行生长而不进行剪枝;在对预测输出进行结合时,RF通常对分类问题使用简单投票法,回归任务使用简单平均法。
小细节:每个袋外数据会对相应的树作预测,评估其误差(称为袋外误差);随机森林中的绝大多数树为Cart树

1.2 优缺点

随机森林的优点:

  1. 在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);
  2. 能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性。因此可做特征选择;
  3. 容易做成并行化方法
  4. 噪声小的时候不容易过拟合,因为跟bagging一样减小variance
  5. 随机性的引入,增加了多样性,泛化能力非常强,抗噪声能力强

RF的缺点:

  1. 噪声较大的分类或者回归问题上会过拟合
  2. 随机森林在解决回归问题时,表现较差,这是因为它并不能给出一个连续的输出。
  3. 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。
  4. 随机森林给人的感觉就像一个黑盒子,无法控制模型内部运行(可控性差)。

1.3其他面试点

  1. 为什么随机抽样?
    保证基分类器的多样性,若每棵树的样本集都一样,那训练的每棵决策树都是一样

  2. 为什么要有放回的抽样?
    保证样本集间有重叠,若不放回,每个训练样本集及其分布都不一样,可能导致训练的各决策树差异性很大,最终多数表决无法 “求同”,即最终多数表决相当于“求同”过程。

  3. 为什么不用全样本训练?
    全样本忽视了局部样本的规律,不利于模型泛化能力

  4. 为什么要随机特征?
    随机特征保证基分类器的多样性(差异性),最终集成的泛化性能可通过个体学习器之间的差异度而进一步提升,从而提高泛化能力和抗噪能力

  5. 需要剪枝吗?
    不需要

  6. RF与决策树的区别?
    (1)RF是决策树的集成;
    (2)RF中是“随机属性型”决策树

  7. RF为什么比bagging效率高?
    bagging无随机特征,使得训练决策树时效率更低

2.Adaboost

AdaBoost就是损失函数为指数损失的Boosting算法。

2.1加法模型和指数损失函数

2.2原理


分类器权值根据分类的误差或者正确率来计算。再根据分类器权重求样本权重。

2.3算法流程

弱分类器–>计算误差–>弱分类器权重–>样本权重–>强分类器

2.4弱分类器权重公式推导

看这里

2.5优缺点

优点:
1.可使用不同分类器(LR,DT…)作为基分类器
2.精度高

缺点:
1.对异常值敏感
2.基分类器数目(迭代次数)不好设定
3.对样本不平衡敏感

2.6其他面试点

3.GBDT(梯度提升决策树)

梯度提升树(GBDT)原理小结

3.1 原理

GBDT 通过不断减小训练过程产生的残差,以及采用加法模型来达到将数据分类或者回归的算法。GBDT 通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练,每个弱分类器通过线性叠加成一个强分类器。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。

GBDT与传统的Boosting区别较大,它的每一次计算都是为了减少上一次的残差,而为了消除残差,我们可以在残差减小的梯度方向上建立模型,所以说,在GradientBoost中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法,与传统的Boosting中关注正确错误的样本加权有着很大的区别。

在GradientBoosting算法中,关键就是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。

GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树)。

3.2GBDT 算法的流程?

3.3GBDT 如何选择特征 ?

GBDT选择特征的细节其实是想问你CART Tree(最小基尼指数)生成的过程。这里有一个前提,gbdt的弱分类器默认选择的是CART TREE。其实也可以选择其他弱分类器的,选择的前提是低方差和高偏差。框架服从boosting 框架即可。

3.4GBDT如何构建特征 (GBDT+LR)

参考

逻辑回归本身是适合处理线性可分的数据,如果我们想让逻辑回归处理非线性的数据,其中一种方式便是组合不同特征,增强逻辑回归对非线性分布的拟合能力。利用gbdt去产生有效的特征组合,以便用于逻辑回归的训练,提升模型最终的效果。

其实说GBDT 能够构建特征并非很准确,GBDT 本身是不能产生特征的,但是我们可以利用GBDT去产生特征的组合。
我们使用 GBDT 生成了两棵树,两颗树一共有五个叶子节点。我们将样本 X 输入到两颗树当中去,样本X 落在了第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,于是我们便可以依次构建一个五纬的特征向量,每一个纬度代表了一个叶子节点,样本落在这个叶子节点上面的话那么值为1,没有落在该叶子节点的话,那么值为 0.
于是对于该样本,我们可以得到一个向量[0,1,0,1,0] 作为该样本的组合特征,和原来的特征一起输入到逻辑回归当中进行训练。实验证明这样会得到比较显著的效果提升。

3.5GBDT 如何用于分类?

看这里
一些注意点:

  • GBDT 无论用于分类还是回归一直都是使用的CART 回归树。不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为GBDT每轮的训练是在上一轮的训练的残差基础之上进行训练的。这里的残差就是当前模型的负梯度值 。这个要求每轮迭代的时候,弱分类器的输出的结果相减是有意义的。残差相减是有意义的。
  • 如果选用的弱分类器是分类树,类别相减是没有意义的。上一轮输出的是样本 x 属于 A类,本一轮训练输出的是样本 x 属于 B类。 A 和 B 很多时候甚至都没有比较的意义,A 类- B类是没有意义的。
  • GBDT 的多分类是针对每个类都独立训练一个 CART Tree。

3.6GBDT的优点和局限性

查看《百面机器学习》
优点:

  1. 预测阶段的计算速度快,树与树之间可并行化计算
  2. 在分布稠密的数据集上,泛化能力和表达能力都很好
  3. 采用决策树作为弱分类器使得GBDT具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且不需要对数据进行特殊的数据处理和归一化等

局限性:

  1. GBDT在高维稀疏的数据集上表现不如支持向量机或者神经网络
  2. 在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显
  3. 训练过程现需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度

3.7梯度提升和梯度下降的区别和联系

两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新,而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在损失函数空间中,从而大大扩展了可以使用的模型种类。(见百面机器学习)

3.8RF、GBDT的区别

  • 组成随机森林的数可是分类树也可以是回归树,而GBDT只由回归树组成
  • 组成随机森林的数可是并行生成,而GBDT只能是串行生成
  • 随机森林的结果是多棵树表决决定,而GBDT则是多棵树累加之和
  • 随机森林对异常值不敏感,而GBDT对异常值比较敏感
  • 随机森林是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能

3.9GBDT怎样设置单棵树的停止生长条件?

  • 节点分裂时的最小样本数
  • 树的最大深度
  • 最多叶子结点数
  • Loss满足约束条件

3.10GBDT如何评估特征的权重大小?

  • 计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比为权重值。
  • 借鉴投票机制。用相同的GBDT参数对w每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值。

3.11GBDT中哪些部分可以并行?

  • 计算每个样本的负梯度时
  • 分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时
  • 更新每个样本的负梯度时
  • 最后预测的过程当中,每个样本将之前的所有树的结果累加的时候

3.12如何防止过拟合?

  • 增加样本,移除噪声
  • 减少特征,保留一些重要的特征
  • 对样本进行采样,就是在构建树的时候,不是把所有的样本都作为输入,而是选择一部分数据作为子集
  • 对特征进行采样,和对样本采样基本一致,就是在每次建树的时候只对部分的特征进行切分(XgBoost)

3.13GBDT当增加样本数量时,训练时长是线性增加吗?

NO,因为生成单颗决策树时,对于 损失函数极小值与样本数量N不是线性相关

3.14当增加树的颗数时,训练时长是线性增加吗?

NO,因为每颗树的生成时间复杂度O(N)不同

3.15当增加一个棵树叶子节点数目时,训练时长是线性增加吗?

NO,叶子节点数和每棵树的生成的时间复杂度O(N)不成正比

3.16每个节点上都保存什么信息?

中间节点保存某个特征的分割值,叶节点保存预测是某个类别的概率

4.XgBoost

这个写得超详细。
还有这个
原始的GBDT算法基于经验损失函数的负梯度来构建新的决策树,只是在局测试构建完成后再进行剪枝。而XGboost在决策树构建阶段就加入正则项,起到一定预剪枝的作用。正则项包括两部分,T表示叶子结点的个数,w表示叶子节点的分数。γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。
损失函数为:

正则项为:

4.1XgBoost有哪些特点

  1. 每个叶子节点的值w是最优化求出来的,不是啥平均值或规则指定的,这个算是一个思路上的新颖吧;
  2. 正则化防止过拟合的技术,上述看到了,直接loss function里面就有;
  3. 支持自定义loss function,只要能泰勒展开(能求一阶导和二阶导)就行;
  4. 实现后剪枝
  5. xgboost还支持设置样本权重,这个权重体现在梯度g和二阶梯度h上,是不是有点adaboost的意思,重点关注某些样本
  6. Shrinkage,你可以是几个回归树的叶子节点之和为预测值,也可以是加权,比如第一棵树预测值为3.3,label为4.0,第二棵树才学0.7,….再后面的树还学个鬼,所以给他打个折扣,比如3折,那么第二棵树训练的残差为4.0-3.3*0.3=3.01,这就可以发挥了啦,以此类推,作用是啥,防止过拟合,如果对于“伪残差”学习,那更像梯度下降里面的学习率;
    (以下4.2,4.3,4.4也是XgBoost的特点)

4.2对于连续值如何进行分割?

方法名字:Weighted Quantile Sketch
以收入为例:每个样本在节点(将要分裂的节点)处的loss function一阶导数gi和二阶导数hi,衡量预测值变化带来的loss function变化,举例来说,将样本“月收入”进行升序排列,5k、5.2k、5.3k、…、52k,分割线为“收入1”、“收入2”、…、“收入j”,满足(每个间隔的样本的hi之和/总样本的hi之和)为某个百分比ϵ(我这个是近似的说法),那么可以一共分成大约1/ϵ个分裂点。

4.3对于特征缺失值如何分类?

假设样本的第i个特征缺失时,无法利用该特征对样本进行划分,这里的做法是将该样本默认地分到指定的子节点,至于具体地分到哪个节点还需要某算法来计算,算法的主要思想是,分别假设特征缺失的样本属于右子树和左子树,而且只在不缺失的样本上迭代,分别计算缺失样本属于右子树和左子树的增益,选择增益最大的方向为缺失数据的默认方向,论文中“枚举”指的不是枚举每个缺失样本在左边还是在右边,而是枚举缺失样本整体在左边,还是在右边两种情况。 分裂点还是只评估特征不缺失的样本。

4.4XGBoost怎么做到并行化

这个地方有必要说明下,因为这是xgboost的闪光点,直接的效果是训练速度快,boosting技术中下一棵树依赖上述树的训练和预测,所以树与树之间应该是只能串行!但在在选择最佳分裂点,进行枚举的时候并行!(据说恰好这个也是树形成最耗时的阶段)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行

4.5XgBoost和GBDT的区别和联系

(2二阶导数+3基分类器+4缺失值)(防止过拟合:1正则项+5特征采样+6缩减)

  1. 在使用CART作为基分类器的时候,XGBoost加入正则项来控制模型的复杂度,从权衡方差偏差来看,它降低了模型的方差,有利于防止过拟合,提高模型泛化能力
  2. GBDT在模型训练的时候只使用代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数
  3. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归)
  4. GBDT没有设计对缺失值的处理,XGBoost能够自动学习出缺失值的处理策略
  5. GBDT在每轮迭代时使用全部的数据,XGBoost采用与随机森林相似的策略,支持对数据进行列采样(列抽样即随机特征采样),不仅防止过拟合,还能减少计算
  6. shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率)

4.6.XGBoost和深度学习的区别?

Xgboost第一感觉就是防止过拟合+各种支持分布式/并行,所以一般传言这种大杀器效果好(集成学习的高配)+训练效率高(分布式),与深度学习相比,对样本量和特征数据类型要求没那么苛刻,适用范围广。
不同的机器学习模型适用于不同类型的任务。深度神经网络通过对时空位置建模,能够很好地捕获图像、语音、文本等高维数据。而基于树模型的XGBoost则能很好地处理表格数据,同时还拥有一些深度神经网络所没有的特性(如:模型的可解释性、输入数据的不变性、更易于调参等)。

4.7.xgboost为什么使用二阶泰勒展开

关于Xgboost用泰勒二阶展开的原因,主要有两点:

  • Xgboost官网上有说,当目标函数是MSE时,展开是一阶项(残差)+二阶项的形式(官网说这是一个nice form),而其他目标函数,如logloss的展开式就没有这样的形式。为了能有个统一的形式,所以采用泰勒展开来得到二阶项,这样就能把MSE推导的那套直接复用到其他自定义损失函数上。简短来说,就是为了统一损失函数求导的形式以支持自定义损失函数。这是从为什么会想到引入泰勒二阶的角度来说的。
  • 二阶信息本身就能让梯度收敛更快更准确。这一点在优化算法里的牛顿法里已经证实了。可以简单认为一阶导指引梯度方向,二阶导指引梯度方向如何变化。这是从二阶导本身的性质,也就是为什么要用泰勒二阶展开的角度来说的。

P.S.为什么要在形式上与MSE统一?因为MSE是最普遍且常用的损失函数,而且求导最容易,求导后的形式也十分简单。所以理论上只要损失函数形式与MSE统一了,那就只用推导MSE就好啦

5.lightGBM

5.1LGB原理

参考
XGB采用了直方图加速,只需要遍历几个可能的分裂节点就好了!它也不需要计算所有样本吖!

这里的意思是,XGB虽然每次只需要遍历几个可能的分裂节点,然后比较每个分裂节点的信息增益,选择最大的那个进行分割,但比较时需要考虑所有样本带来的信息增益。而LGB只需采用少量的样本计算信息增益,所以速度会快很多。

那么问题就来了,XGB如果选少量的样本算信息增益,该如何保证把信息损失降到最低呢?
LGB选择梯度大的样本来计算信息增益。如果一个样本的梯度较小,证明这个样本训练的误差已经很小了,所以不需要计算了。我们在XGB的那篇文章中说过,GBDT的梯度算出来实际上就是残差,梯度小残差就小,所以该样本拟合较好,不需要去拟合他们了。

这听起来仿佛很有道理,但问题是丢掉他们会改变数据的分布,还是无法避免信息损失,进而导致精度下降,所以LGB提出了一个很朴实无华且枯燥的方法进行优化。
LGB的优化方法是,在保留大梯度样本的同时,随机地保留一些小梯度样本,同时放大了小梯度样本带来的信息增益。

除了通过部分样本计算信息增益以外,LGB还内置了特征降维技术,思想就是合并那些冲突小的稀疏特征。
举个例子,对于一列特征[1,nan,1,nan,1]和一列特征[nan,1,nan,1,nan],他们正好可以合并成一列特征[1,2,1,2,1]。LGB的目标就是在于找到这样的特征并且将他们合并在一起。

至于LGB为什么比XGB的精度高这一点,我的理解是选择梯度大(残差大)样本来进行特征分裂生成的树,借鉴了Adaboost的更改样本权重的思想。每棵树针对某些特定训练样本有着较好的划分能力,导致每棵树之间的异质性较大,对于效果近似但异质性大的模型加权往往会带来更大的提升。

5.2.XGboost的不足之处

1)每轮迭代时,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。
2)预排序方法的时间和空间的消耗都很大

LGBM最大的优势就是快。

5.3.XGBoost和LGBM树的生长方式

  • XGBoost按层生长的方式,有利于工程优化,但对学习模型效率不高
  • LightGBM是直接去选择获得最大收益的结点来展开,这样呢LightGBM能够在更小的计算代价上建立我们需要的决策树。当然在这样的算法中我们也需要控制树的深度和每个叶子结点的最小数据量,从而减少过拟合。

5.4.XGBoost和LGBM树的划分方式

  • XGBoost中采用预排序的方法,计算过程当中是按照value的排序,逐个数据样本来计算划分收益,这样的算法能够精确的找到最佳划分值,但是代价比较大同时也没有较好的推广性。
  • LightGBM直方图算法:将这些精确的连续的每一个value划分到一系列离散的域中,也就是筒子里。以浮点型数据来举例,一个区间的值会被作为一个筒,然后以这些筒为精度单位的直方图来做。这样一来,数据的表达变得更加简化,减少了内存的使用,而且直方图带来了一定的正则化的效果,能够使我们做出来的模型避免过拟合且具有更好的推广性。另外数据结构的变化使得在细节处的变化理上效率会不同.
    按照bin来索引“直方图”,所以不用按照每个“特征”来排序,也不用一一去对比不同“特征”的值,大大的减少了运算量。

5.5.支持类别特征

传统的机器学习一般不能支持直接输入类别特征,需要先转化成多维的0-1特征,这样无论在空间上还是时间上效率都不高。LightGBM通过更改决策树算法的决策规则,直接原生支持类别特征,不需要转化,提高了近8倍的速度

5.6.支持并行学习

参考
LightGBM原生支持并行学习,目前支持特征并行(Featrue Parallelization)和数据并行(Data Parallelization)两种,还有一种是基于投票的数据并行(Voting Parallelization)

  • 特征并行的主要思想是在不同机器、在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
  • 数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。

LightGBM针对这两种并行方法都做了优化。

  • 特征并行算法中,通过在本地保存全部数据避免对数据切分结果的通信。
  • 数据并行中使用分散规约 (Reduce scatter) 把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。
  • 基于投票的数据并行(Voting Parallelization)则进一步优化数据并行中的通信代价,使通信代价变成常数级别。在数据量很大的时候,使用投票并行可以得到非常好的加速效果。

5.7lightGBM与XGboost对比

1、xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了不必要的开销。 leaft-wise的做法是在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。
  
2、lightgbm使用了基于histogram直方图的决策树算法,这一点不同于xgboost中的 exact预排序算法,histogram算法在内存和计算代价上都有不小优势。

  • 内存上优势:很明显,直方图算法的内存消耗为(#data* #features * 1Bytes)(因为对特征分桶后只需保存特征离散化之后的值),而xgboost的预排序算法内存消耗为:(2 * #data * #features* 4Bytes),因为xgboost既要保存原始feature的值,也要保存这个值的顺序索引,这些值需要32位的浮点数来保存。
  • 计算上的优势,预排序算法在选择好分裂特征计算分裂收益时需要遍历所有样本,时间为(#data),而直方图算法只需要遍历桶就行了,时间为(#bin)

5.8直方图算法

一天1个机器学习知识点(四)相关推荐

  1. 机器学习知识点(四)最小二乘法Java实现

    最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小.最小二乘法 ...

  2. 一天1个机器学习知识点(五)

    陆陆续续整理机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,一起学习,一起进步! 每天都在更新中,记得收藏,每天进步一点点!! 一天1个 ...

  3. 一天1个机器学习知识点(三)

    陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步! 每天都在更新中,记得收藏,每天进步一点点!! 一天 ...

  4. 一天1个机器学习知识点(二)

    陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步! 每天都在更新中,记得收藏,每天进步一点点!! 一天 ...

  5. 机器学习知识点全面总结

    ✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础.机器学习.深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习.➡️点击跳转到 ...

  6. 一天1个机器学习知识点(一)

    陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步! 每天都在更新中,记得收藏,每天进步一点点!! 一天 ...

  7. 机器学习知识点(三十三)机器学习入门的数学基础

    三类:1)多元微积分:2)线性袋鼠,主要是关于矩阵方面的:3)概率论和统计学:4)几何学: 下面的题要能解出,才能更好理解机器学习中的内容. 涉及的相关数学知识点,在机器学习知识点系列上都有介绍,不过 ...

  8. 机器学习知识点(七)决策树学习算法Java实现

    为理解机器学习第四章节决策树学习算法,通过网上找到的一份现成代码,主要实现了最优划分属性选择和决策树构造,其中最优划分属性选择采用信息增益准则.决策树构造采用递归实现,代码如下: package sk ...

  9. Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”

    Coursera公开课笔记: 斯坦福大学机器学习第四课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第 ...

最新文章

  1. 某程序员吐槽自己追求某字节HR,暧昧半年,见面后却被告知是普通朋友!心态已崩!网友:别追HR!道行太深!...
  2. IOS NSArray 倒序
  3. kodi 更改服务器文件,云服务器安装kodi
  4. 实战-130W表增加字段耗时
  5. 基于DirectShow的局域网内音视频流的多机共享
  6. java界面布局都有什么_java入門教程-10.5Java圖形界面之布局設計
  7. ChaiNext:过去24小时,市场情绪“燥”
  8. mysql binlog 日志
  9. 零基础学python全彩版答案-零基础学Python(全彩版)
  10. 九九乘法表c语言四种,C语言实现九九乘法表(四种情况)
  11. ReactNative配合node.js实现的公司通讯录管理app
  12. 信噪比与雷达探测距离之间关系
  13. ios 判断打开相机权限_iOS中判断照片和相机权限
  14. 9、Linux文本处理三剑客之sed命令
  15. 荣耀 MagicBook V 14 2022款评测
  16. 开式系统管径推荐选型_中央空调水系统设计(经典版)
  17. 站长号词库:今日热门长尾关键词挖掘 20221201
  18. 闪电贷攻击又背锅? “幕后元凶”竟是它!
  19. Win10禁用Ctrl+空格切换输入法
  20. python 虚拟串口通信

热门文章

  1. 视觉库—OpenCV
  2. poj 2817 WordStack (状态dp)
  3. [转贴]ASP优化之显示数据查询内容
  4. TCP/IP总结(4)TCP 之最大消息长度
  5. C++ Primer 5th笔记(chap 19 特殊工具与技术)枚举类型
  6. 【django】路由命名和路由反向解析
  7. python—操作MySQL查询表中数据
  8. [问答]-EL1t和EL1h中的后缀t和h分别是什么意思
  9. [Skill]-Markdown编辑器技巧
  10. (74)分析 APC 插入过程 —— KeInsertQueueApc , KiInsertQueueApc