Duncan's Blog

模型记录

实战模型记录

1.GBDT(Gradient Boosting Decision Tree)

  • GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用来分类。
  • 回归树:回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得到一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每个feature的每个阈值找最好的分割点,但衡量标准不再是最大熵,而是最小平方误差分枝终止条件为属性值唯一或者预设的终止条件(叶子个数上限)
  • 提升树算法:提升树是迭代多棵回归树来共同决策。当采用平方误差损失函数时每一个棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树。
  • 梯度提升决策树:当损失函数是平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。但对于一般的损失函数,往往每一步优化没那么容易(如绝对值损失函数和Huber损失函数),所以有梯度下降方法。

2.XGBoost(eXtreme Gradient Boosting)

和gbdt对比:

  • 1.GBDT以CART作为基分类器,xgboost还支持线性分类器
  • 2.GBDT在优化函数中只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
  • 3.xgboost在代价函数中加入了正则项,控制了模型的复杂度。正则项包含两部分:叶子节点数和叶子结点输出分数。
  • 4.划分点的查找:贪心算法和近似算法
  • 5.支持并行,在特征粒度上并行,预先对数据进行排序,保存为block结构,在节点分裂时计算每个特征的信息增益,各个特征的信息增益就是多个线程进行

3.LightGBM

优化点

  • 1.Histogram算法:先把连续的浮点特征值离散化成k个整数,同事构造一个宽度为k的直方图。遍历数据时,根据离散化后的值作为索引在直方图中累计统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。
  • 2.带深度限制的Leaf-wise的叶子生长策略:每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。

4.RandomForest

bootstrap自助法生成m个训练集对每个训练集构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽取到的特征中找到最优解,进行分裂。模型预测阶段就是bagging策略,分类投票,回归取均值。

分享