GBDT:残差与梯度;以及相同样本模型结果不同的原因

GBDT的核心在于选择不同的学习目标:残差版本通过拟合真实值与预测值之差,梯度版本利用损失函数的负梯度。虽然两者在流程上相似,但残差版本受限于固定损失函数,而梯度版本适用于更广泛的可导损失函数。在实现中,sklearn的GBDT采用随机特征排列,导致每次训练结果可能不同,即使参数相同,体现了决策树构建的贪心策略和NP难问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的问题:

1、为什么决策树的损失函数的梯度值可以直接有y-f(x)计算出来,即不用去计算像线性回归即逻辑回归的计算每个参数的梯度下降一样,如常用的theta(i) := theta(i)-alpha* (J(theta)对theta(i)),theta(j) := theta(j)-alpha* (J(theta)对theta(j))的偏导。此处注意要更新每个参数值之后再去用每个更新后的theta(i)去更新整个损失函数,而不是每更新一个theta(i)就去更新整体的损失函数式。

这篇博文对此有详细的数学解释,在后记部分,主要是由于决策树的构建可以得到损失函数的预测值。这个有待详细验证。不过是一个思考方向。

通过本文不难发现其实 GBDT 与逻辑回归的本质差别只在于 h 的不同。如果 h函数中的 x 为决策树,预测值通过决策树预测得到,那就是 GBDT;如果将 h 中的x变为一个权重向量,预测值为x与d的内积,则算法就变成了逻辑回归(LR)

2、GBDT所谓残差版本与梯度版本有什么区别?随机梯度下降是否可运用于GBDT?sklearn中的GBDTRegression算法除了样本处可以做随机抽样,在确定样本之后的算法环节,哪些做了随机处理?为什么在给定一样的参数,如学习率等得情况下,两次 

pipeline fit出来的结果和clf fit出来的结果不一样?

params = {'n_estimators': 500, 'max_depth': 4, 'min_samples_split': 2,
        'learning_rate': 0.01, 'loss': 'ls'}


clf = ensemble.GradientBoostingRegressor(**params)

clf.fit(X_train, y_train)

pipeline = PMMLPipeline([
    ("gbdtgressor", GradientBoostingRegressor(**params))
])

pipeline.fit(X_train]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值