4月1号GBDT调参的实验报告

一 实验目的:

通过调参进一步熟悉GBDT的模型特性,方便下一步优化模型做回归的效能

二 实验内容:

1.观察弱学习器个数(也就是决策树的个数)与GBDT模型预测的预测偏差(预测值与真实值的均方差MSE)以及模型运行速度的关系

2.观察学习速率大小(也就是步长)与GBDT模型的预测偏差以及模型运行速度的关系

3.观察子采样大小与GBDT模型的预测偏差以及模型运行速度的关系

4.观察决策树最大深度大小与GBDT模型的预测偏差以及模型运行速度的关系

三 实验过程:

4月1号再次调参时并没有采取网上的每每两个参数同时调整来进行调参,而是每次只调整一个参数,符合控制变量的思想,这样以来,不再需要手动一个一个调整,定义了函数,用for循环的方式遍历给定的参数值,然后为了直观的体现出参数变化与GBDT模型性能的关系,这里取了两个指标:

(1)predict erorr :预测偏差 (这里不再像上次那样取好几个回归指标,而是均方差MSE)

(2)latency :模型运行的时间(反应了模型的速度性能)

这两个指标足以表现出一个模型基本的性能。

1.n_estimator,(弱学习器,决策树)的个数对模型的影响



如图我们可以看到,学习器的个数也很大程度的影响着模型的复杂度,

GBDT运行的时长与学习器的个数增长呈正相关

GBDT的预测偏差在一定范围内会随着学习器的增多而显著减少,而在数量过多之后渐渐趋于平稳

2.learning_rate(学习速率)大小对模型的影响




如图我们可以看到,GBDT模型在这个数据集上,模型的运行速度在学习速率(步长)小于0.2之前有两个极大值点,意思是

GBDT的模型的运行速度在一定0.2~0.3之间某个点最大,而后学习速率的增大甚至会缓慢减小GBDT的运行速率,在取得最大速率之前突变起伏,所以在调参时要反复尝试,才能找到模型运行速度的最大值点,

恰好,GBDT的预测偏差最小时也是模型运行速度最快时,也就是

存在一个学习速率使得预测准确率和模型运行速度同时达到最大值

3.subsample(子采样)对模型的影响


子采样的概念:当样本全部使用,则没有子采样,即取值为1。

我们可以看到,GBDT模型在运行中预测偏差出现了两个极小值,分别是子采样值为0.6和1,在0.6之前,子采样的数值太小,只有一小部分样本去做GBDT模型拟合,增加了样本拟合的偏差,所以子采样的值不能太小。

但是在0.6~0.8的样本去拟合GBDT模型的时候,预测偏差反而上升了。这个问题暂时还没想到答案。

但是相比较其他参数而言,MSE均方差的变化范围其实不太大,这点我们可通过观察这几幅图的纵坐标轴来得出。

至于模型的运行速度,又恰好在子采样0.6时最慢,

在0.6~0.8区间内,模型的预测偏差与模型的运行速度同时增大。

4.决策树最大深度max_depth对模型的影响



我们可以看到决策树深度这个值增大,而模型的误差随之增大,当然可能是采用的数据集不够大,我们进一步观察一下决策树深度这个值小于1时的表现,值小于一的意思是百分比,即每颗决策树的深度小于1.


当这个值过小时,每个学习器,也就是每颗决策树的深度都太小,基本上什么都没有学到,所欲预测误差非常大,而运行时间也非常小

在这个数据集中,当这个值等于1时,预测偏差取最小,当然当数据集非常大,数据维度非常多时,据说增大这个值是有很好的效果。


四 实验总结:

1.本次实验取了6个参数,但是另外两个min_samples_split,min_samples_leaf,这两个弱学习器(决策树)参数的调整对模型影响几乎没有。

对此暂时没有清楚原因。需要加强对决策树原理的进一步学习。

2.本次实验暴露出对GBDT原理的理解还很浅,无法把算法的流程和算法的公式与某些参数的关系理清楚,比如子采样和学习速率这两个值,

尚未理解这两个值为什么对预测误差有突变产生。

3.一个模型的评价指标当然不仅仅是速度和预测偏差两个,所以本次实验只是对GBDT算法进行了一个简单的测试评估。

4.现有资料上对GBDT用于数据做回归时,说的数据集大还是小,数据维度多还是少,并没有给出明确的界限,所以还存在一个很模糊问题。

本次采用的数据集是sklearn上的波士顿房价回归数据集,样本600行,12个维度。应该算是小数据集了。所以此次GBDT的表现,应该算是

GBDT在数据量小维度少的数据集上的表现。

你可能感兴趣的:(4月1号GBDT调参的实验报告)