集成学习笔记

集成学习

简介

在这里插入图片描述

决策树

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

GBDT

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
拟合残差
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一般 GBDT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

XGBOOST

1
能表达样本落入的子节点,但是不能把表示结构
在这里插入图片描述
2
在这里插入图片描述

3.正则项 – 惩罚

防止过拟合,比如一个值总共有10颗树都是由同一颗树决定的,过拟合
5
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
找到一种方式不依赖于损失函数 – 二阶泰勒
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述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值越大。比如可以定义为:特征在作为划分属性时对应样本的二阶导数之和的平均值:
在这里插入图片描述

在这里插入图片描述

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值