梯度提升树 GBDT
什么是梯度提升树?
- 梯度提升树(Gradient Boosting Decision Tree,简称 GBDT)是一种集成学习算法,它通过构建多个决策树来逐步修正之前的预测错误,从而提高模型的整体性能
梯度提升树如何应用于分类任务?
- 梯度提升分类器(GradientBoostingClassifier)支持二进制和多级分类
1
2
3
4
5
6
7
8
9
10
11>>> 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...
梯度提升树如何用于回归任务?
- GradientBoostingRegressor 支持许多不同的回归损失函数,可以通过参数 loss 来指定;回归的默认损失函数是平方误差(‘squared_error’)
1
2
3
4
5
6
7
8
9
10
11
12
13
14>>> import numpy as np
>>> 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='squared_error'
... ).fit(X_train, y_train)
>>> mean_squared_error(y_test, est.predict(X_test))
5.00...
为什么梯度提升树 (Gradient Boosting Decision Tree, GBDT) 只能由回归树组成?
- 因为 GBDT 是加法模型,主要是利用残差逼近的方式,这就意味每棵树的值是连续的可叠加的,这一点和回归树输出连续值不谋而合,如果采用分类树,那么残差逼近进行叠加就会使得这种叠加没有意义,比如男 + 男 + 女 = 到底是男是女。这个是 GBDT 基本原理决定的