前言
本期我们来聊GBDT,这是一种被广泛使用的集成学习方法。当今在kaggle竞赛中被广泛使用的XGBoost、LightGBM正是以它为基础。因此掌握好该基础算法的原理与编码技巧还是有必要的。
我们知道,集成学习大致可分为Bagging、Boosting两种方法,其对于集成中每个单独学习器的训练过程如下简图所示:
GBDT顾名思义,也是一种Boosting方法。我们不妨再把它的名字拆开说一下,G表示Gradient(梯度,是一种最优化损失函数的思想),B就是Boosting了,DT表示Decison Tree,代表这种集成学习方法的基学习器是一个决策树。决策树本身可以用于分类以及回归,那么GBDT当然也适用于两个场景了。
接下来我们结合sklearn来实践一下GBDT。
Sklearn + GBDT
在sklearn的官方文档中,GBDT又名Gradient Tree Boosting,它分别有用于分类的类(GradientBoostingClassifier)、用于回归的类(GradientBoostingRegressor)。这里着重来聊分类。我们的方法会是结合代码的使用过程,把相关的理论知识点也带出来。
本节我们继续使用前面讲logistic回归时使用过的一个二分类数据集:
先把完整的代码贴出来:
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
#导入数据
X,y = load_breast_cancer(return_X_y=True)
#拆分训练集与测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state = 0) #test_ratio指定测试集数据量的占比,random_state是为了保证实验可复现,如果不指定数值,下一次运行随机拆分的数据未必就是本次的结果了
#创建一个分类器的实例, 注意用到了哪些参数
clf = GradientBoostingClassifier(n_estimators=50,learning_rate=1.0, max_depth=1, random_state=0)
#拟合数据
clf = clf.fit(X_train, y_train