集成学习
简介

决策树

 

GBDT

 

 拟合残差
 
 
 
一般 GBDT

 
 
 
 
 

 

 
 
 

 
 
 

 
XGBOOST
弓
1
 能表达样本落入的子节点,但是不能把表示结构
 
 2
 
3.正则项 – 惩罚
防止过拟合,比如一个值总共有10颗树都是由同一颗树决定的,过拟合
 5
 

 
 找到一种方式不依赖于损失函数 – 二阶泰勒
 
 
 
  gi – 一阶梯度 hi–二阶梯度
gi – 一阶梯度 hi–二阶梯度
 
 
 凸函数Hj为正,lambda为正
 
 7 确定树结构
- 穷举 – 所有组合,复杂度太高,不可行
- gain – 贪心算法 - 增益 = obj前 - obj后
 
不需要考虑排列组合的过程
 
 停止分裂:
 1 max(gain) <= 0
 2 叶子节点个数
 3 效果
作者代码
 
 
唐宇迪
O b j ( Θ ) = L ( Θ ) + Ω ( Θ ) Obj(\Theta) = L(\Theta)+\Omega(\Theta) Obj(Θ)=L(Θ)+Ω(Θ)
损失:
  L = ∑ i = 1 n l ( y i , y i ^ ) L = \sum_{i=1}^{n}{l(y_i,\hat{y_i})} \hspace{4cm} L=∑i=1nl(yi,yi^)
O b j = ∑ i = 1 n l ( y i , y i ^ ) + ∑ = 1 t Ω ( f i ) Obj= \sum_{i=1}^{n}{l(y_i,\hat{y_i})}+\sum_{=1}^{t}\Omega({f_i)} \hspace{4cm} Obj=∑i=1nl(yi,yi^)+∑=1tΩ(fi)



 


样本的遍历转化为叶子节点的遍历是等价的




Gain
 
xgboost的安装
 https://www.lfd.uci.edu/~gohlke/pythonlibs/
 搜索xgboost
 https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost

 
 
xgboost参数:
‘booster’:‘gbtree’,
 ‘objective’: ‘multi:softmax’, 多分类的问题
 ‘num_class’:10, 类别数,与 multisoftmax 并用
 ‘gamma’:损失下降多少才进行分裂
 ‘max_depth’:12, 构建树的深度,越大越容易过拟合
 ‘lambda’:2, 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
 ‘subsample’:0.7, 随机采样训练样本
 ‘colsample_bytree’:0.7, 生成树时进行的列采样
 ‘min_child_weight’:3, 孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束
 ‘silent’:0 ,设置成1则没有运行信息输出,最好是设置为0.
 ‘eta’: 0.007, 如同学习率
 ‘seed’:1000,
 ‘nthread’:7, cpu 线程数

为什么xgboost要用二阶泰勒展开,优势在哪里?
xgboost进行了二阶泰勒展开, 使用梯度下降求解时收敛速度更快。
 引入二阶泰勒展开是为了统一损失函数求导的形式,以支持自定义损失函数。二阶泰勒展开可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化(参数选择)分开了。 这种去耦合方法增加了xgboost的适用性, 使得它可以自定义损失函数, 可以用于分类, 也可以用于回归。
 ————————————————
 版权声明:本文为CSDN博主「Yasin_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 原文链接:https://blog.csdn.net/Yasin0/article/details/82154768
Adaboost


 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
2 特征选择
2.1

2.2 参数
1.1 weight
特征在所有树中作为划分属性的次数。
1.2 gain
特征在作为划分属性时loss平均的降低量(也就是特征的信息增益),以特征k=1,2,…,K为例,其重要度计算可以表述如下:
 
 这里k表示某节点,T表示所有树的数量,N(t)表示第t棵树的非叶子节点数量, [公式] 表示第t棵树的第i个非叶子节点的划分特征,所以 [公式] ,I(.)是指示函数, [公式] 分别表示落在第t棵树的第i个非叶子节点上所有样本的一阶导数和二阶导数之和,[公式]分别表示落在第t棵树上第i个非叶子节点的左、右节点上的一阶导数之和,同理,[公式]分别表示落在第t棵树上第i个非叶子节点的左、右节点上的二阶导数之和,所以有
 
 λ为正则化项的超参数。
1.3 cover
这个计算方法,需要在定义模型时定义。之后再调用model.feature_importance_得到的便是cover得到的贡献度。
cover形象地说,就是树模型在分裂时,特征下的叶子节点涵盖的样本数除以特征用来分裂的次数。分裂越靠近根部,cover值越大。比如可以定义为:特征在作为划分属性时对应样本的二阶导数之和的平均值:
 
