梯度下降树GBDT
a基本原理:
利用梯度下降(提升)树GBDT算法拟合出最优的决策树,将拟合好的决策树保存下来。若出现需要预测的数据,只要将数据过一遍决策树,就可以获得预测的数值结果。在下文我会写梯度下讲树的工作原理。
b算法原理:
回归树
GBDT梯度下降树
GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。
如存在一个真实值为20(真实值在test中并不会给出,这里只是便于理解),第一个树得到的预测值是12,那就目前来看真实值和预测值的差值还是蛮大的,所以这时就需要第二个回归树。
第二个回归树给出的预测值是8,那么GBDT的算法就可以结束了,如果第二个回归树给出的预测值比8要小,那么还需要建立第三个回归树……最终将每个回归树的结果加起来就是我们预测出来的值。
c方法优缺点:
优点:
-
预测精度高,能处理非线性的数据。
-
可以灵活处理各种类型的数据,包括连续值和离散值。
-
相对于SVM来说,在相对少的调参时间情况下,预测的准确率比较高。
-
使用一些健壮的损失函数,对异常值的鲁棒性非常强。
缺点:
-
高维数据算法复杂度大。
-
难以对训练样本进行人工控制。
d算法入口:
使用sklearn里的GradientBoostingClassifier函数可以较轻松训练好GBDT
sklearn.ensemble.GradientBoostingClassifier(loss=’deviance’,learning_rate=0.1,n_estimators=100,subsample=1,intit,max_depth=3,*args)
loss 损失函数
learning_rate 学习率,也被叫作步长。
n_estimators 弱学习器最大迭代次数。太大容易过拟合,太小容易欠拟合。
subsample 即我们在原理篇的正则化章节讲到的子采样,取值为(0,1]。如果取值为1,则 全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本 会去做GBDT的决策树拟合。
init 如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1, 则只有一部分样本会去做GBDT的决策树拟合。
Max_depth 决策树的最大深度
e实例参考:
# -*- coding: utf-8 -*-
'''
建立GBDT梯度下降决策树,并预测
'''
from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
# 使用make_hastie_10_2随机生成一组十维的数据X,和对应的输出值y,共12000条
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:]
# 迭代拟合再预测
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=3, random_state=0)
gbdt.fit(X_train, y_train)
pred = gbdt.predict(X_test)
error = 0
for i in range(pred.shape[0]): # 输出测试数据所有的预测和真实值
print(pred[i], y_test[i])
if pred[i] != y_test[i]:
error += 1
print('错误率:{}'.format(error / pred.shape[0]))
输出结果
f参考文献:
GBDT(MART) 迭代决策树入门教程 | 简介 https://blog.csdn.net/suranxu007/article/details/49910323
Regression Tree 回归树 https://zhuanlan.zhihu.com/p/82054400
GBDT回归树过程详解 https://www.cnblogs.com/zsgyx/p/12640611.html
GBDT算法的优缺点 https://blog.csdn.net/suv1234/article/details/72588048
scikit-learn 梯度提升树(GBDT)调参小结https://www.cnblogs.com/pinard/p/6143927.html
sklearn与GBDT入门案例 https://blog.csdn.net/levy_cui/article/details/72920366
gbdt算法_GBDT算法-从原理到sklearn应用到总结 https://blog.csdn.net/weixin_39856607/article/details/110659505