机器学习——GBDT
###基础概念
GBDT(Gradient Boosting Decision Tree) 全称梯度提升决策树,是一种迭代的决策树算法。GBDT是集成学习Boosting的家族成员,GBDT中的树是回归树,用于回归预测,调整后也可以用于分类。
####分类树与回归树的差异
分类树大致的实现过程是:穷举每一个属性特征的信息增益值,每一次都选取使信息增益最大(或信息增益比,基尼系数等)的特征进行分枝,直到分类完成或达到预设的终止条件,实现决策树的递归构建。
回归树的实现过程与分类树大体类似,在划分标准上回归树使用最小化均方差(x-x1)2/n+(x-x2)2/n+...+(x-xn)2/n,而不是使用信息增益等指标。同时回归树的预测值是数值型。
关于决策树原理可查看我之前的文章:决策树算法
####Gradient Boosting:
Gradient Boosting是一种Boosting的方法,它主要的思想是沿着梯度方向,构造一系列的弱分类器函数,并以一定权重组合起来,形成最终决策的强分类器。
具体的实现方式是:
下一个分类器是在前一个分类器得到的残差基础上进行进一步分类,采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差(残差 = 真实值 - 预测值 ),拟合得到一个当前的残差回归树。它是一种串行的分类器集合方法。
####梯度下降:
梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一。
在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
同样的,GBDT的核心也是让损失函数沿着梯度方向下降。
迭代过程:
结合Gradient Boosting和梯度下降两个概念,说明GBDT的迭代过程:
针对数据集:T={(x1,y1),(x2,y2),⋅⋅⋅,(xN,yN)},xi∈χ=Rn,yi∈γ={−1,+1}, i=1,2,⋅⋅⋅,N
- 初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,初始化:

循环过程:
计算损失函数的负梯度在当前模型的值,将它作为残差的估计。以下是残差计算公式:

估计回归树叶节点区域,以拟合残差的近似值,得到决策树
利用线性搜索估计叶节点区域的值,使损失函数极小化,最优估计节点区域的值计算:

更新回归树

迭代完成后,输出最终模型 :

####负梯度方向:
负梯度方向(negative gradient direction)多元可微函数在一点处梯度向量的反方向,它是使函数f在点x附近下降最快的方向.
####残差
在GBDT中,残差是损失函数为MSE平方损失下的真实值和某一轮模型预测值的差值即 yi - f(xi)。其实这个是对平方损失函数求导之后的结果,也就是说在平方损失下求完导,它的负梯度就是残差。
####GBDT的优缺点:
优点:
- 可以灵活处理各种类型的数据,包括连续值和离散值。
- 精度一般都比较高
- GBDT几乎可用于所有回归问题(线性/非线性)
缺点:
- 对异常值比较敏感
- 算法的执行过程是串行的,树过得多时容易过拟合,而且会影响速度
###GBDT的回归与分类
GBDT既可以用于处理回归问题也可以处理分类问题,二者之间的差异主要是通过改变模型的损失函数进行更换。
回归问题对应的损失及在sklearn中的参数值:
- 平方损失,sklearn参数ls
- 绝对值损失,sklearn参数lad
- Huber损失,sklearn参数huber
- 分为数损失,,sklearn参数quantile
分类问题对应的损失及在sklearn中的参数值:
- 对数损失,sklearn参数deviance(类似与逻辑回归的损失函数)
- 指数损失,sklearn参数exponential
###python代码实现
from sklearn.datasets import load_boston
import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.ensemble import GradientBoostingClassifier
boston = load_boston()
#查看波士顿数据集的keys
print(boston.keys())
boston_data=boston.data
target_var=boston.target
feature=boston.feature_names
boston_df=pd.DataFrame(boston_data,columns=boston.feature_names)
boston_df['tar_name']=target_var
#查看目标变量描述统计
print(boston_df['tar_name'].describe())
#把数据集转变为二分类数据
boston_df.loc[boston_df['tar_name']<=21,'tar_name']=0
boston_df.loc[boston_df['tar_name']>21,'tar_name']=1
X_train, X_test, y_train, y_test = train_test_split(boston_df[feature], boston_df['tar_name'], test_size=0.30, random_state=1)
GB=GradientBoostingClassifier(n_estimators=500,max_depth=2,random_state=1,learning_rate=0.03)
GB.fit(X_train,y_train)
# 度量GBDT的准确性
y_train_pred = GB.predict(X_train)
y_test_pred = GB.predict(X_test)
tree_train = accuracy_score(y_train, y_train_pred)
tree_test = accuracy_score(y_test, y_test_pred)
print('GBDT train/test accuracies %.3f/%.3f' % (tree_train, tree_test))
结果:
Random Forest train/test accuracies 0.986/0.882
参考资料:
https://www.cnblogs.com/pinard/p/6140514.html
机器学习——GBDT的更多相关文章
- 机器学习-GBDT和XGboost
参考: 陈天奇slides : https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf Friedman GBDT 论文: htt ...
- 机器学习 GBDT+xgboost 决策树提升
目录 xgboost CART(Classify and Regression Tree) GBDT(Gradient Boosting Desicion Tree) GB思想(Gradient Bo ...
- 图解机器学习 | LightGBM模型详解
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/34 本文地址:http://www.showmeai.tech/article-det ...
- 机器学习系列------1. GBDT算法的原理
GBDT算法是一种监督学习算法.监督学习算法需要解决如下两个问题: 1.损失函数尽可能的小,这样使得目标函数能够尽可能的符合样本 2.正则化函数对训练结果进行惩罚,避免过拟合,这样在预测的时候才能够准 ...
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 机器学习中的算法——决策树模型组合之随机森林与GBDT
前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...
- 机器学习(四)--- 从gbdt到xgboost
gbdt(又称Gradient Boosted Decision Tree/Grdient Boosted Regression Tree),是一种迭代的决策树算法,该算法由多个决策树组成.它最早见于 ...
- 机器学习中的算法-决策树模型组合之随机森林与GBDT
机器学习中的算法(1)-决策树模型组合之随机森林与GBDT 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使 ...
- 机器学习 | 从加法模型讲到GBDT算法
作者:JSong, 日期:2017.10.10 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能,这对"弱学习器& ...
随机推荐
- 使用C#代码发送邮件,不完整的demo
作为一只入行不久的小菜鸟,最近接触到利用C#代码发送邮件,做了一点小的demo练习.首先,需要配置,这边我做的是QQ邮箱的相关的练习,练习之前,首先应该解决的问题肯定是关于服务器的配置,这边偷一个懒, ...
- vmware实现物理机和虚拟机复制粘贴
要实现物理机和虚拟机的复制粘贴需要安装VMware Tools. 1.点击菜单栏--虚拟机--安装VMware Tools. 2.打开linux终端,进入/media/VMware Tools目录. ...
- Eclipse内存不足 增加eclipse的运行内存
自己解决的 三. 修改Run Configurations (此方法可行) 在代码上右键,依次点击“Run As ”-> “Run Configurations ”,在Arguments ...
- Java面向对象之内部类(访问格式)
一.基础概念 1.内部类是定义在类中的类.A类需要直接访问B类中的成员时,可以将A类定义到B类中,作为B类的内部类存在. 2.内部类可以相当于外部类中的一个成员,可以被成员修饰符所修饰.(如:publ ...
- Udp 网络字节序
1.网络上的数据是一个字节一个字节的串行传递的. 2.字节序,规定,在内存里存储时,低字节在前称为小端,高字节在前称为大端,(现在主流系统都是小端的) 3.网络字节序,如果先传高字节,则是大端传输:如 ...
- Tarjan 点双+割点+DFS【洛谷P3225】 [HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- PowerShell 如何 远程连接【转】
转自: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://bobzy.blog.51cto.com/2109336/1181249 ...
- 蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应
版权声明:本文为博主原创文章,转载请注明作者和出处. 作者:强光手电[艾克姆科技-无线事业部] 1. 扫描请求和扫描响应 广播包含扫描请求SCAN_REQ和扫描响应SCAN_RSP. 扫描请求: ...
- Sql server inner join......on
--查询的时候,如果表中有重名的列,此时,应该在通过 表名.列名 的方式来限定指定的列是哪张表中的.select PhoneNum.pid, PhoneNum.pname, PhoneNum.pcel ...
- Exalogic硬件架构
1.硬件配置见如下图表. 组件名称 满配 半配 1/4配 1/8配 Sun Rack II 1242 1 1 1 1 计算节点 X2-2.X3-2.X4-2.X5-2.X6-2 30 16 8 4 存 ...