我的问题:
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]