数据科学个人笔记:集成方法简单总结

周志华老师《机器学习》+李航老师《统计学习方法》学习笔记

 

(一)AdaBoost

1.Adaboost使用n个弱分类器的结果进行加权,求出的结果即作为预测结果。初始化每个样本的权重为均分,每次训练一个分类器G,训练完成后计算误差率e,而该分类器的权重为alfa=0.5*ln(1-e/e)。每个样本的权重进行调整为w=[w*exp(-alfa*y*G(x))]/所有样本的分子之和。

2.Adaboost的误差分析与解释(待添加)

(二)GBDT

1.回归:梯度提升树每次训练一个回归器,并计算每个样本的预测值与实际值之间的误差,误差用负梯度来近似,即损失函数(最小二乘)对f(xi)求导在xi上的值*-1。我们将这些值作为新一轮训练回归器的目标值,继续训练第二个回归器。最后将所有回归器的结果加起来作为最终结果。

2.分类:梯度提升树结果分类问题有两种思路,一种是按照回归的思路,将损失函数改为指

数损失函数exp(-yf(x))。另一种是使用真实概率和预测概率的差来作为误差,此时损失函数改为使用类似于逻辑回归的对数似然损失函数,为l(y,f(x))=log(1+exp(-yf(x))),y属于-1,1。每个叶子节点中预测的概率使用sum(r)/sum(|r|*(1-|r|))来计算,r为样本的损失函数对f(x)求导的负梯度值。

3.正则化:每次加上新分类器的结果f(x)=f(x)+v*新分类器。0

也可以使用子采样subsample,每次迭代使用部分数据,但会减少方差提升偏差。

4. 使用GBDT构造新特征举例:使用 GBDT 生成了两棵树,两颗树一共有五个叶子节点。我们将样本 X 输入到两颗树当中去,样本X 落在了第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,于是我们便可以依次构建一个五纬的特征向量,每一个纬度代表了一个叶子节点,样本落在这个叶子节点上面的话那么值为1,没有落在该叶子节点的话,那么值为 0。

4.优点: 它的非线性变换比较多,表达能力强,而且不需要做复杂的特征工程和特征变换。

缺点:Boost是一个串行过程,不好并行化,而且计算复杂度高,同时不太适合高维稀疏特征。

(三)XgBoost

XgBoost原理:

1.定义一个损失函数,损失函数的输入项包括正则化项(当前模型的复杂度)、该各样本的真实值、各样本在现有模型下的预测值、以及各样本在当前要优化的模型下的预测值。通过这个损失函数,优化当前这颗决策树。

2.损失函数中的正则化项需要被确定,即如何定义当前模型的复杂度。通常我们使用系数*叶子节点数+0.5*系数*各节点预测值平方和(回归树,分类树对应类别)。直观上看,目标要求预测误差尽量小,叶子节点尽量少,节点数值尽量不极端。

3.损失函数的完整结构为sum(l(真实值,之前预测值+当前模型预测值))+正则化项,其中l函数需要被自己定义。调参中可使用的包括交叉熵、平方误差等。

4.构建当前决策树的最优化模型,其方法为,先将损失函数利用泰勒展开式,近似变换为二次,此时损失函数中包括l函数对之前预测值的一阶和二阶导数。然后使用贪心策略对二次函数进行优化,即每次尝试对一个叶子节点进行分割,如果得到的增益小于一个阈值,则该叶子节点不再分割。每次分割的方式同cart树。

XgBoost特点:

1.GBDT和XGBoost区别:

(1)传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器;

(2)传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;

2.XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性。

3. 与GBDT相同,XGBoost在进行完一次迭代时,会将叶子节点的权值乘上学习速率,主要是为了削弱每棵树的影响,让后面有更大的学习空间。

4.列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;

5. XGBoost可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。

6.XGBoost工具支持并行。对数据做了预排序,特征列排序后以块的形式存储在内存中,在迭代中可以重复使用,在处理每个特征列的最优分割点时可以做到并行。

7.在寻找最佳分割点时,考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似直方图算法(Histogram)。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。

8.xgboost使用经验总结:类别特征必须编码,因为xgboost把特征默认都当成数值型的多类别分类时,类别需要从0开始编码。

9.XGBoost计算出得某个特征的重要性(feature score),等于它被选中为树节点分裂特征的次数的和。

10.缺点:level-wise 建树方式对当前层的所有叶子节点一视同仁,有些叶子节点分裂收益非常小,对结果没影响,但还是要分裂,加重了计算代价。

预排序方法空间消耗比较大,不仅要保存特征值,也要保存特征的排序索引,同时时间消耗也大,在遍历每个分裂点时都要计算分裂增益(不过这个缺点可以被近似算法所克服)。

(四)LightGBM

1.可以处理类别特征,将一个类别看作一类,其他看作另一类。这实际上与0/1展开的效果是一样的。

2.在subsample的过程中只对梯度较大的前百分之a的数据进行采样。(GOSS方法)

3.使用了与Xgboost相同的histgram算法。

4. 它摒弃了现在大部分GBDT使用的按层生长(level-wise)的决策树生长策略,使用带有深度限制的按叶子生长(leaf-wise)的策略。level-wise过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上level-wise是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。这样在相同节点数的情况下lgbm拥有更高的精度。 缺点可能会导致树的深度过大,解决方式是增加最大深度限制。

(五)CatBoost(待完善)

使用catboost时要对类别变量进行声明,不然遇到字符变量程序会报错。

(六)Bagging与随机森林

1.Bagging策略基于自主采样法(bootstrap sampling),每次有放回地重复从训练集中取k个样本,则进行n次后能得到n份有k个样本的数据集。使用n份数据训练出n个分类器,结果进行Voting或Averaging。

2.随机森林是使用决策树为基训练器的bagging方法,另外它还增加了在每个决策树根节点随机抽样出l个特征的方法,这样增强了基分类器的多样性和随机性。一般推荐l=log_2(d),d为特征总量。

(七)Voting与Averaging

使用多个分类器预测时使用多数表决voting(可加权),或在回归时averaging或加权平均。

(八)Stacking

训练多个分类器,每个分类器训练时将数据分为k份,每次使用k-1份进行训练并输出剩下一份的预测值,重复k次后获得该分类器对训练样本的预测值特征。将n个分类器的n列预测值特征作为新的样本特征,输入超学习器进行训练,训练得到将各分类器结果进行组合的方式。

预测时,先将预测集输入各基分类器,再将预测结果输入超分类器。

(九)多样性问题(待添加)

你可能感兴趣的:(数据科学个人笔记:集成方法简单总结)