参考:http://www.jianshu.com/p/1fa837221360
代码主要在gradient_boosting.py里面,定义了各种loss类以及estimator类,前者定义了loss的计算方式,后者是一些简单基本的estimator类,主要用于LossFunction中init_estimator的计算,即初始预测值的计算。
loss类
loss的类层级关系为:
- LossFunction
- RegressionLossFunction
- LeastSquaresError(负梯度是目标值y和预测值pred的差)
- LeastAbsoluteError(负梯度是目标值y和预测值pred的差的符号,适用于 稳健回归 ,PS:数据出现异常点时最小二乘法的替代方法)
- HuberLossFunction( 一种适用于稳健回归Robust Regression的损失函数,init_estimator是QuantileEstimator(alpha=0.5))
- QuantileLossFunction(分位数回归的损失函数,分位数回归允许估计目标值条件分布的百分位值)
- ClassificationLossFunction
- BinomialDeviance(logistic regression,二分类问题损失函数,init_estimator是LogOddsEstimator)
- MultinomialDeviance(softmax, 多分类问题损失函数,init_estimator是PriorProbabilityEstimator)
- ExponentialLoss(二分类问题指数损失,AdaBoost用的loss。init_estimator是ScaledLogOddsEstimator)
- RegressionLossFunction
注意:对于ClassificationLossFunction, 代码里计算loss和负梯度的时候,并不是用概率计算而是用决策树的直接累计输出score(pred)计算。
以BinomialDeviance为例,score转成概率要经过sigmoid转化。设p为概率,P为预测值,则BinomialDeviance的loss公式为
ylog(p)+(1−y)log(1−p)=log(1−p)+ylog(p1−p<