GBDT(回归树)原理详解与python代码实现
GBDT算法
- 1、算法原理
- 2、对数据的要求
- 3、算法的优缺点
- 4、算法需要注意的点
- 5、python代码实现(待更......)
- 导入相关包
- 读取数据并预处理
- 训练及评估
1、算法原理
步骤:
1、初始f0(x)f_0(x)f0(x):
编号 | 真实值 | f0(x)f_0(x)f0(x) | 残差 |
---|---|---|---|
0 | 1.1 | 1.475 | -0.375 |
1 | 1.3 | 1.475 | -0.175 |
2 | 1.7 | 1.475 | -0.225 |
3 | 1.8 | 1.475 | -0.325 |
2、以残差作为样本真实值训练f1(x)f_1(x)f1(x):
编号 | 年龄 | 体重 | 标签值 |
---|---|---|---|
0 | 5 | 20 | -0.375 |
1 | 7 | 30 | -0.175 |
2 | 21 | 70 | -0.225 |
3 | 30 | 60 | -0.325 |
划分点 | 小于划分点样本 | 大于划分点样本 | SElSE_lSEl | SErSE_rSEr | SEsumSE_{sum}SEsum |
---|---|---|---|---|---|
年龄5 | /// | 0、1、2、3 | 0 | 0.327 | 0.327 |
… | … | … | … | … | … |
体重70 | 0、1、3 | 2 | 0.260 | 0 | 0.260 |
- 选出SEsumSE_{sum}SEsum最小的分裂,以此类推,达到第一棵树终止条件
- 建成第一棵树,重新使用样本建第二棵树(使用第一棵树的残差),建立的树满足终止条件
- 预测f(x)=f0(x)+f1(x)+....+fn(x)∗learning_ratef(x)=f_0(x)+f_1(x)+....+f_n(x)*learning\_ratef(x)=f0(x)+f1(x)+....+fn(x)∗learning_rate
2、对数据的要求
与cart类似 https://blog.csdn.net/weixin_41851055/article/details/106234426
3、算法的优缺点
一、优点:
- 预测精度高
- 适合低维数据
- 能处理非线性数据与各种类型数据(离散(one_hot) or 连续)
二、缺点:
- 由于弱学习器之间存在依赖关系,难以并行训练数据
- 数据维度较高会加大算法的计算复杂度
4、算法需要注意的点
GBDT分裂规则
选取使得误差下降最多的(均方差则选SEsumSE_{sum}SEsum最小的)。终止条件:节点分裂最小样本数、树最大深度、最大叶子节点数、min(loss)
GBDT如何正则化
1、Shrinkage(步长)+最大迭代次数
2、Subsample(子采样):采用不放回采样(值为1则全部使用)
3、正则化剪枝
GBDT梯度提升体现在哪
每一棵树基于上一棵树的loss进行梯度下降
GBDT如何做特征选择(重要性)
每棵树的加权平均
GBDT为什么用回归树而不用分类树
GBDT主要以残差逼近的方式,这一点和回归树输出连续值不谋而合,如果为分类男+男+女=到底是男还是女
GBDT为什么较RF浅
1、GBDT主要降低bias(模型的泛化能力),串行保证了降低bias。即GBDT中基分类器需要低方差(variance)。即简单的树
2、RF主要降低variance(模型的稳定性),因此RF中的基分类器需要低偏差的bias。即树的深度较深
GBDT哪些部分可以并行
1、计算每个样本的负梯度
2、分裂挑选最佳特征及节点分割时,对特征计算相应误差及均值时
3、更细每个样本负梯度
4、最后预测将之前所有树的结果相加
GBDT与RF的区别
1、RF的树可回归可分类,GBDT只能回归树
2、RF树独立,互不影响可并行;GBDT树依赖,串行
3、RF由多棵树表决,GBDT由多棵树累加;RF对异常值不敏感,GBDT则很敏感(当前错误影响下一棵树)
5、RF不需要数据预处理,GBDT需要进行特征归一化
GBDT如何用于分类
https://zhuanlan.zhihu.com/p/46445201
5、python代码实现(待更…)
导入相关包
import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import roc_curve,auc
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import LabelEncoder
读取数据并预处理
#读取数据
data = pd.read_excel(r'E:/wyz/Desktop/data/data.xlsx')
#将数据集中的字符串转化为代表类别的数字。因为sklearn的决策树只识别数字
le = LabelEncoder()
for col in data_model.columns: data_model[col] = le.fit_transform(data_model[col].astype(str))
#划分数据集(3、7划分)
y = data_model['target']
x = data_model.drop('target', axis=1)
x_train, x_test, y_train, y_test = train_test_split(x, y,random_state=0,train_size=0.7)
#标准化数据
ss_x = StandardScaler()
ss_y = StandardScaler()
x_train = ss_x.fit_transform(x_train)
x_test = ss_x.transform(x_test)
训练及评估
model_GBDT = GradientBoostingClassifier(random_state=10)
model_GBDT.fit(x_train,y_train)
y_pred = gbm0.predict(x_train)
y_predprob = model_GBDT.predict_proba(x_train)[:,1]
print ("Accuracy : %.4g" % metrics.accuracy_score(y.values, y_pred))
print ("AUC Score (Train): %f" % metrics.roc_auc_score(y, y_predprob))
GBDT(回归树)原理详解与python代码实现相关推荐
- 视频教程-深度学习原理详解及Python代码实现-深度学习
深度学习原理详解及Python代码实现 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥88.0 ...
- 字典树原理详解及其Python实现
一.原理详解 1.初步介绍: 字典树又名前缀树,Trie树,是一种存储大量字符串的树形数据结构,经常被搜索引擎系统用于文本词频统计. 除此之外也常用于计算左右信息熵.计算点互信息. 下图演示了一个保存 ...
- 随机森林原理详解及python代码实现
随机森林(RF)算法 1.算法原理 2.对数据的要求(无需规范化) 3.算法的优缺点 4.算法需要注意的点 5.python代码实现(待更......) 导入相关包 读取数据并预处理(必须处理缺失值) ...
- 决策树原理详解及python代码实现
决策树算法(信贷中常用来寻找规则) 1.算法原理 1.1 ID3(多叉树分类) 1.2 C4.5(多叉树分类) 1.3 Cart(二叉树分类+回归) 2.ID3.C4.5与Cart比较 3.算法优缺点 ...
- KNN算法原理详解及python代码实现
KNN算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python) 算法原理 计算待测样本与train_data的距离d并保存数组中 对d进行排序,取d最近的k个样本 统计样 ...
- Dijkstra 路径规划算法原理详解及 Python 代码实现
荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...
- google authenticator python_Google Authenticator TOTP原理详解(以Python为例)
http://xsboke.blog.51cto.com 如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 一. ...
- python google auth totp_Google Authenticator TOTP原理详解(以Python为例)
如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 一. 原理详解(图片可以点击然后放大查看) 二. 验证 1.下载 ...
- 2022年全国大学生数学建模竞赛E题目-小批量物料生产安排详解+思路+Python代码时序预测模型(三)
目录 前言 一.六种物料挑选 二.周数处理 三.时序预测模型 模型预测结果 建模的部分后续将会写出,想要了解更多的欢迎加博主微信,免费获取更多细化思路+模型! 点关注,防走丢,如有纰漏之处,请留言指教 ...
最新文章
- Java 性能优化:教你提高代码运行的效率
- hadoop集群环境搭建
- 计算机网络-思维导图(4)网络层
- Go 还是需要泛型的
- CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
- java获取tomcat目录结构_Tomcat目录结构详解
- Java-NIO(三):直接缓冲区与非直接缓冲区
- 在EditPlus中配置PHP调试
- mybatis查询返回null的原因_可怕!你没看错,这次确实是纯手工实现一个MyBatis框架...
- DVWA搭建中遇到的无法连接数据库问题及处理
- 计算机网络组建课设心得,计算机网络课程设计心得体会
- Tomcat的使用(详细流程)
- 模模搭升级,场景自动同步ThingJS平台,搭建开发无缝衔接!
- 陀螺仪随机误差的Allan方差分析
- Android支付接入(七):Google In-app-Billing
- UBOOT NVME驱动(一路io队列和一路admin队列的例程分析)(未完成)
- 数据库优化、索引【面试题】
- 基于VS2010MFC平台使用C++编写的上位机源程序(可在虚拟机下实现两个com端口的数据传输)
- C语言软件版本号宏定义的高级技巧
- C语言火焰图,Python程序性能分析和火焰图
热门文章
- 【解析】案例4-1.5 顺序存储的二叉树的最近公共祖先问题
- 【终极办法!】idea没有import project解决办法
- 为什么TCP连接至少3次握手
- Java 核心编程技术干货
- java servlet 多线程_java – 多线程GAE servlet来处理并发用户
- 幼儿园带括号算式口诀_幼儿园数学作业括号题型.doc
- DHCP与DHCP中继简介
- 加分二叉树 java_P1040 加分二叉树
- shell 非_Shell基本操作(一)
- aso优化师是什么_2019最新ASO优化常见问题精选(下)