GBDT(回归树)原理详解与python代码实现

更新时间:2023-05-15 09:10:22 阅读: 评论:0

GBDT (回归树)原理详解与python 代码实现
GBDT 算法
1、算法原理
步骤:1、初始:
编号真实值残差0  1.1  1.475-0.3751  1.3  1.475-0.1752  1.7  1.475-0.2253
户外运动有哪些1.8
1.475
-0.325
2、以残差作为样本真实值训练:
上善若水的意思和典故
编号年龄体重标签值0520-0.3751730-0.17522170-0.2253
30
60
-0.325
划分点⼩于划分点样本⼤于划分点样本年龄50、1、2、3
00.3270.327………………体重70
0、1、3
2
0.260
0.260
选出最⼩的分裂,以此类推,达到第⼀棵树终⽌条件
建成第⼀棵树,重新使⽤样本建第⼆棵树(使⽤第⼀棵树的残差),建⽴的树满⾜终⽌条件预测2、对数据的要求3、算法的优缺点
⼀、优点:
预测精度⾼适合低维数据
能处理⾮线性数据与各种类型数据(离散(one_hot) or 连续)⼆、缺点:
f (x )0f (x )
0f (x )1SE l
SE r
SE sum
/
SE sum f (x )=f (x )+0f (x )+1....+f (x )∗n learning _rate
由于弱学习器之间存在依赖关系,难以并⾏训练数据
数据维度较⾼会加⼤算法的计算复杂度
mp3和mp4区别4、算法需要注意的点
GBDT分裂规则
SE sum
选取使得误差下降最多的(均⽅差则选最⼩的)。终⽌条件:节点分裂最⼩样本数、树最⼤深度、最⼤叶⼦节点数、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需要进⾏特征归⼀化
5、python代码实现(待更…)
导⼊相关包
import pandas as pd
import numpy as np
ble import GradientBoostingClassifier
ics import roc_curve,auc
from sklearn import metrics骆驼祥子主旨
del_lection import GridSearchCV
from sklearn.preprocessing import LabelEncoder
读取数据并预处理
#读取数据
data = pd.read_excel(r'E:/wyz/Desktop/data/data.xlsx')
#将数据集中的字符串转化为代表类别的数字。因为sklearn的决策树只识别数字
le = LabelEncoder()
for col in lumns:
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 = ansform(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"% _auc_score(y, y_predprob))

本文发布于:2023-05-15 09:10:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/898917.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   需要   分裂   样本   特征   回归   模型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图