目录
一、GBDT模型原理
1.1 GB(Gradient Boost)算法
GB算法直观理解,将损失函数的负梯度在当前模型的值,当做下个模型训练的目标函数。沿着损失函数负梯度方向迭代,使得损失函数越来越小,模型偏差越来越小。
1.2 GBDT模型
GBDT模型将决策树CART放入GB模型框架中,获得一个集成的模型。
回归问题:
解决回归问题时,采用损失函数为残差平方和:
损失函数负梯度为(残差和):
分类问题:
解决分类问题时,采用的损失函数为log损失函数:
损失函数负梯度为(残差和):
分类任务与回归任务的区别在于,分类任务的损失函数采用log损失函数
二、spark ML机器学习库中GBDT使用案例
pyspark.ml.classification.GBTClassifier(featuresCol='features', labelCol='label', predictionCol='prediction', maxDepth=5, maxBins=32, minInstancesPerNode=1, minInfoGain=0.0, maxMemoryInMB=256, cacheNodeIds=False, checkpointInterval=10, lossType='logistic', maxIter=20, stepSize=0.1, seed=None, subsamplingRate=1.0)
lossType:分类问题损失函数为logistic。回归问题可选择平方误差和绝对误差。
maxIter:迭代次数,每一次迭代将产生一棵树。增加maxiter会减少模型偏差,但相应的会增加过拟合概率,结合测试集进
行验证,防止过拟合。
maxDepth:树的深度。
stepSize:学习率,若太小,模型收敛速度太慢;若太大,模型会不稳定,不能收敛。
利用网格搜索,对上述参数遍历:
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.evaluation import BinaryClassificationEvaluator
import pyspark.ml.classification as cl
from pyspark.ml.pipeline import Pipeline
vf = VectorAssembler(inputCols=[‘c1’,’c2’,’c3’], outputCol="features")
evas = []
for maxiter in [20,30,50,80,100]:
for maxdepth in [1,3,4,5]:
for stepsize in [0.05,0.1,0.3]:
print(maxiter,maxdepth,stepsize)
gbt = cl.GBTClassifier(maxIter=maxiter, maxDepth=maxdepth,stepSize=stepsize)
gbt_pipeline = Pipeline(stages=[vf,gbt])
gbt_model = gbt_pipeline.fit(train)
gbt_test = gbt_model.transform(test)
gbt_evaluator = BinaryClassificationEvaluator(rawPredictionCol='probability',labelCol='label')
evas.append([maxiter,maxdepth,stepsize,gbt_evaluator.evaluate(gbt_test,{gbt_evaluator.metricName: 'areaUnderROC'}),gbt_evaluator.evaluate(gbt_test,{gbt_evaluator.metricName: 'areaUnderPR'})])
三、GBDT与Boost算法比较
Boos算法,开始为每个样本赋予相同的权重,在每一个模型训练结束后后,增加分错样本点的权重,减少预测正确的样本点权重,进行N次迭代后,将会得到N个简单的分类器,然后将这些分类器加权组合,最终得到一个强分类器。
GBDT算法,计算损失函数在当前模型的负梯度值,作为下一次模型训练的目标函数,每次迭代时沿着损失函数的负梯度方向移动,最终损失函数越来越小,得到越来越精确的模型。与Boost对错误样本加权有很大的区别。
四、 GBDT与RF比较
1、RF每棵树相互独立训练,可以并行执行。GBDT每棵树的训练依赖于当前模型的结果,只能串行执行。
2、随着树的个数增加,RF的预测结果会更加稳定,模型精度和方差都会降低。而GBDT开始预测表现会随着树的数目增大变好,但到一定程度后,会随着树的数目增加而变差(过拟合)。
3、GBDT会选择更浅的树,RF会选择更深的树。RF并行地训练多个不同的分类器,目的是为了降低方差,所以对于每个基分类器来说,目标是如何降低偏差,因而会采用更深的决策树。GBDT每个模型都是在当前模型的基础上更加拟合原数据,可以保证偏差,对每个基分类器而言,需要选择方差更小的分类器,即更简单的分类器,所以选择深度较浅的决策树。
GBDT和RF共同的优点:
1、可以处理连续特征和离散特征。
2、对缺失值和高维特征有较高的稳健性。
3、可以得到变量的重要性排序。
参考资料:
https://blog.****.net/qq_34531825/article/details/52366265#t8
https://www.jianshu.com/p/005a4e6ac775