赞
踩
有三种:最大信息增益、最大信息增益率、基尼系数。而这三种不同的划分标准就对应了三种典型决策树:ID3(最大信息增益)、C4.5(最大信息增益率)、CART(基尼系数)。
信息增益:指的是使用某一个属性a进行划分后,所带来的纯度(信息熵用来度量样本集合的纯度)提高的大小。一般而言,信息增益越大,意味着使用属性a来进行划分所获得的“纯度提升”越大。但信息增益对可取值较多的属性有所偏好。
而信息增益率则解决了特征偏好的问题。
但是不论是信息增益还是信息增益率,存在的问题是涉及对数运算,计算量大,为了解决这个问题。可以采用基尼系数作为节点划分的标准。
最大的区别是划分标准的不同:ID3采用信息增益,而C4.5采用的是信息增益率。
C4.5继承了ID3的优点,并在以下几个方面对ID3算法进行了改进:
树模型是要寻找最佳分裂点,对于离散特征,树模型会评估每个离散值的信息增益,将信息增益最大的数值作为分裂点,因此,树模型不需要对离散特征进行事先one-hot处理,否则会使特征维度增大且稀疏,不仅会增加模型的计算量,而且会损失数据的信息量造成模型的效果不佳,以及过拟合的风险。也不需要进行归一化处理。
原因
剪枝是防止决策树过拟合的方法。一棵完全生长的决策树很可能失去泛化能力,因此需要剪枝。
剪枝的策略
剪枝分为预剪枝和后剪枝两种,预剪枝是在构建决策树时抑制它的生长,后剪枝是决策树生长完全后再对叶子节点进行修剪。
预剪枝
设置一个树的最大高度/深度或者为树设置一个最大节点数,达到这个值即停止生长(限制深度)
对每个叶子节点的样本数设置最小值,生长时叶子节点样本数不能小于这个值(限制宽度)
判断每次生长对系统性能是否有增益
后剪枝
错误率降低剪枝(Reduced-Error Pruning)
后剪枝错误率降低剪枝的方法比较直观,从下至上遍历所有非叶子节点的子树,每次把子树剪枝(所有数据归到该节点,将数据中最多的类设为结果),与之前的树在验证集上的准确率进行比较,如果有提高,则剪枝,否则不剪,直到所有非叶子节点被遍历完。
悲观剪枝(Pessimistic Error Pruning)
代价复杂度剪枝(Cost-Complexity Pruning)
预剪枝和后剪枝的优缺点比较
时间成本方面,预剪枝在训练过程中即进行剪枝,后剪枝要在决策树完全生长后自底向上逐一考察。显然,后剪枝训练时间更长。预剪枝更适合解决大规模问题。
剪枝的效果上,预剪枝的常用方法本质上是基于贪心的思想,但贪心法却可能导致欠拟合,后剪枝的欠拟合风险很小,泛化性能更高。
另外,预剪枝的有些方法使用了阈值,如何设置一个合理的阈值也是一项挑战。
不需要归一化,因为他们不关心变量的值,而是关心变量的分布和变量之间的条件概率。决策树是一种概率模型,数值缩放,不影响分裂点位置。所以一般不对其进行归一化处理。
xgboost与LightGBM的区别
在树生成过程中,最耗时的一个步骤就是在每次寻找最佳分裂点时都需要对特征的值进行排序。而 XGBoost 在训练之前会根据特征对数据进行排序,然后保存到块结构中,并在每个块结构中都采用了稀疏矩阵存储格式(Compressed Sparse Columns Format,CSC)进行存储,后面的训练过程中会重复地使用块结构,可以大大减小计算量。
作者提出通过按特征进行分块并排序,在块里面保存排序后的特征值及对应样本的引用,以便于获取样本的一阶、二阶导数值。具体方式如图:
通过顺序访问排序后的块遍历样本特征的特征值,方便进行切分点的查找。此外分块存储后多个特征之间互不干涉,可以使用多线程同时对不同的特征进行切分点查找,即特征的并行化处理。在对节点进行分裂时需要选择增益最大的特征作为分裂,这时各个特征的增益计算可以同时进行,这也是 XGBoost 能够实现分布式或者多线程计算的原因。
Bagging 是 bootstrap aggregation的缩写。bagging对于数据集进行bootstrap取样,每个数据点有同等几率被采样,然后创建n个模型,每个模型进行m个数据采样,最后进行投票(voting)得出最后结果。Bagging 的典型应用是随机森林
boosting创建了一系列预测器,或者说是学习器。前面的学习器用简单的模型去适配数据,然后分析错误。然后会给予错误预测的数据更高权重,然后用后面的学习器去修复。boosting通过把一些弱学习器串起来,组成一个强学习器。boosting的典型应用是Adaboost。
(1)相同点
不适合处理
GBDT对于海量的id类特征,GBDT由于树的深度和树的数量限制(防止过拟合),不能有效存储;
另外海量特征也会存在性能瓶颈,当GBDT的one hot特征大于100k维时,需要做分布式训练才能保证不爆内存,
因此,GBDT通常配合少量的反馈CTR特征来表达,在带来一定范化能力的同时会有信息损失,对于头部资源无法有效表达。
会
树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。
2个随机(bootstrap+特征m)
Bootstrap是一种抽样方法,即随机抽取数据并将其放回。如一次抽取一个样本,然后放回样本集中,下次可能再抽取这个样本。
论文中关于缺失值的处理将其看与稀疏矩阵的处理看作一样。在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,
只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。
在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。
如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。