GBDT:梯度提升树算法

欢迎关注”生信修炼手册”!

GBDT全称为gradient boosting decision tree, 是一种基于决策树的集成学习算法。在Adaboost算法中,弱分类器的模型可以根据需要灵活选择,而GBDT则强制限定为决策树算法。

基于CART决策树算法,GBDT可以用于处理分类和回归两项任务。由此,GBDT又有了各种不同的叫法

1. GBDT, Gradient Boosting Decision Tree

2. GBRT,Gradient Boosting Regression Tree

3. MART, Multiple Addtive Regression Tree

从名称可以看出,GBDT和Adaboost算法一样,都是属于boosting的集成策略,多次迭代之间是存在一个链式的依赖关系。在Adaboost算法中,根据每次迭代调整下一次迭代样本的权重值,而在GBDT中,则将每次迭代的损失函数值作为下次迭代拟合的目标值。

在求解回归问题时,GBDT可以使用均方差作为误差的衡量值,在求解分类问题时,则使用逻辑回归中目标和损失函数的定义方式来量化计算过程。

以下列数据为例,具体看下算法的求解过程

GBDT:梯度提升树算法_第1张图片

该数据表示泰塔尼克号上乘客的生存情况,第一步,计算初始值,利用了逻辑回归中目标值的定义,计算如下

样本共6名乘客,其中4名生还,P表示生还的概率,1-P则表示死亡的概率,带入上述公式,即可算出初始值。

计算出初始值之后,计算样本初始值与真实值之间的残差,结果如下

GBDT:梯度提升树算法_第2张图片

将残差作为拟合的目标值,构建分类树,结果如下所示

GBDT:梯度提升树算法_第3张图片

注意,这个分类树是为了便于展示算法过程,构建的示例,并不是真实的分类结果。根据建好的分类树,要计算样本对应的新的拟合值,为了方便计算,引入了如下转换公式

使用该公式,对于示例中的决策树,第一个叶子节点的计算结果如下

第二个叶子节点的计算结果如下

第三个叶子节点的计算结果如下

GBDT:梯度提升树算法_第4张图片

整颗决策树的结果如下所示

GBDT:梯度提升树算法_第5张图片

接下来,引入学习率来定义每颗决策树的贡献,公式如下

学习率是自定义的,比如学习率设置为0.1, 根据上述公式计算每个乘客新的log odds, 以第一名乘客为例,结果如下

首先初始值为0.7,在第一次的决策树中该样本所在叶子节点的值为-0.16, 所以根据公式可以求解新的log odds值。接下来的迭代过程也是如此,每次迭代不断使用残差来计算新的log odds值,直到迭代终止。

在scikit-learn中,使用GBDT算法的代码如下

1. 分类

>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> X, y = make_hastie_10_2(random_state=0)
>>> X_train, X_test = X[:2000], X[2000:]
>>> y_train, y_test = y[:2000], y[2000:]
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,max_depth=1, random_state=0).fit(X_train, y_train)
>>> clf.score(X_test, y_test)
0.913

2. 回归

>>> from sklearn.metrics import mean_squared_error
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> X, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0)
>>> X_train, X_test = X[:200], X[200:]
>>> y_train, y_test = y[:200], y[200:]
>>> est = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1,max_depth=1, random_state=0, loss='ls').fit(X_train, y_train)
>>> mean_squared_error(y_test, est.predict(X_test))
5.009154859960321

对于GBDT算法而言,其优点如下

1. 准确度和灵活性很高

2. 不需要数据预处理

3. 可以处理缺失值

缺点如下

1. 计算费时

2. 解释性不强

3. 容易过拟合

在实际运用中,相比Adaboost算法,GBDT的应用更多,无论在分类还是回归问题中,都可以尝试使用该模型。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

  更多精彩

  • KEGG数据库,除了pathway你还知道哪些

  • 全网最完整的circos中文教程

  • DNA甲基化数据分析专题

  • 突变检测数据分析专题

  • mRNA数据分析专题

  • lncRNA数据分析专题

  • circRNA数据分析专题

  • miRNA数据分析专题

  • 单细胞转录组数据分析专题

  • chip_seq数据分析专题

  • Hi-C数据分析专题

  • HLA数据分析专题

  • TCGA肿瘤数据分析专题

  • 基因组组装数据分析专题

  • CNV数据分析专题

  • GWAS数据分析专题

  • 2018年推文合集

  • 2019年推文合集

  • 2020推文合集

  写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

GBDT:梯度提升树算法_第6张图片

一个只分享干货的

生信公众号

你可能感兴趣的:(决策树,人工智能,逻辑回归,数据分析,数据挖掘)