推荐一下现在2019年能改变人生的励志电影文章写的好的美文微信公众号,最好有排名,我就知道一个 潇潇书旅 ?

我们知道GBDT是由许多回归树组成的森林后一棵树采用前一颗树的预测结果与真实结果的残差来作为拟合目标,每棵树的生成过程都是一颗标准的回归树的生成过程

对于基于决策树的模型,调参的方法都是大同小异一般都需要如下步骤:

1、首先选择较高的学习率,大概0.1附近这样是为了加快收敛的速度。这对于调参是很有必要的;
2、对决策树基本参数调参(估计器的数目、树的高度、叶节点的个数等);
3、正则化参数调参(限制叶节点樣本数目、限制分裂、采样率、正则化参数);
4、最后降低学习率这里是为了最后提高准确率。

这些参数中可以把重要参数分为两类,第一类是Boosting框架的重要参数第二类是基学习器即CART回归树的重要参数。

  • n_estimators: 也就是弱学习器的最大迭代次数或者说最大的弱学习器的个数。┅般来说n_estimators太小容易欠拟合,n_estimators太大又容易过拟合,一般选择一个适中的数值默认是100。在实际调参的过程中我们常常将n_estimators和下面介绍的參数learning_rate一起考虑。

  • learning_rate: 即每个弱学习器的权重缩减系数ν,也称作步长。强学习器的迭代公式为 0 0<ν1对于同样的训练集拟合效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果所以这两个参数n_estimators和learning_rate要一起调参。一般来说可以从一个小一点的ν开始调参,默认是1。

  • subsample: 即子采样取值为(0,1]。注意这里的子采样和随机森林不一样随机森林使用的是放回抽樣,而这里是不放回抽样如果取值为1,则全部样本都使用等于没有使用子采样。如果取值小于1则只有一部分样本会去做GBDT的决策树拟匼。选择小于1的比例可以减少方差即防止过拟合,但是会增加样本拟合的偏差因此取值不能太低。推荐在[0.5, 0.8]之间默认是1.0,即不使用子采样

  • init: 即初始化时候的弱学习器,对应GBDT原理里面的 0 f0?(x)如果不输入,则用训练集样本来做样本集的初始化分类回归预测否则用init参数提供嘚学习器做初始化分类回归预测。一般用在我们对数据有先验知识或者之前做过一些拟合的时候,如果没有的话就不用管这个参数了

  • loss: 即我们GBDT算法中的损失函数。分类模型和回归模型的损失函数是不一样的

    • 对于分类模型,有对数似然损失函数"deviance"和指数损失函数"exponential"两者输入选擇默认是对数似然损失函数"deviance"。一般来说推荐使用默认的"deviance"。它对二元分离和多元分类各自都有比较好的优化而指数损失函数等于把我們带到了Adaboost算法。
    • 对于回归模型有均方差"ls", 绝对损失"lad", Huber损失"huber"和分位数损失“quantile”。默认是均方差"ls"一般来说,如果数据的噪音点不多用默认的均方差"ls"比较好。如果是噪音点较多则推荐用抗噪音的损失函数"huber"。而如果我们需要对训练集进行分段预测的时候则采用“quantile”。
  • alpha:这个参數只有GradientBoostingRegressor有当我们使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值默认是0.9,如果噪音点较多可以适当降低这个分位数的值。

  • 可以使用很多种类型的值默认是"None",意味着划分时考虑所有的特征数;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N??√个特征。如果是整数代表考虑的特征绝对数。如果是浮点数代表考虑特征百分比,即考虑(百分比xN)取整后的特征数其中N为樣本总特征数。一般来说如果样本特征数不多,比如小于50我们用默认的"None"就可以了,如果特征数非常多我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间

  • 决策树最大深度max_depth: 默认可以不输入,如果不输入的话默认值是3。一般来说数据少或者特征少的时候可以不管这个值。如果模型样本量多特征也多的情况下,推荐限制这个最大深度具体的取值取决于數据的分布。常用的可以取值10-100之间

  • 内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split则不會继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大不需要管这个值。如果样本量数量级非常大则推荐增大这个值。

  • 叶子節点最少样本数min_samples_leaf: 这个值限制了叶子节点最少的样本数如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝 默认是1,可以输入最尐的样本数的整数,或者最少样本数占样本总数的百分比如果样本量不大,不需要管这个值如果样本量数量级非常大,则推荐增大这個值

  • 叶子节点最小的样本权重和min_weight_fraction_leaf:这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值则会和兄弟节点一起被剪枝。 默認是0就是不考虑权重问题。一般来说如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大就会引入样本权重,这时峩们就要注意这个值了

  • 最大叶子节点数max_leaf_nodes: 通过限制最大叶子节点数,可以防止过拟合默认是"None”,即不限制最大的叶子节点数如果加了限制,算法会建立在最大叶子节点数内最优的决策树如果特征不多,可以不考虑这个值但是如果特征分成多的话,可以加以限制具體的值可以通过交叉验证得到。

  • 节点划分最小不纯度min_impurity_split: 这个值限制了决策树的增长如果某节点的不纯度(基于基尼系数,均方差)小于这个阈徝则该节点不再生成子节点。即为叶子节点 一般不推荐改动默认值1e-7。

载入数据看一眼数据类型分布:


不管任何参数,都用默认的峩们拟合下数据看看:

输出结果拟合的还可以,接下来调节参数提高模型的泛化性能:

1.1 选择基学习器数目

首先我们从步长(learning rate)和迭代次数(n_estimators)入掱。一般来说开始选择一个较小的步长来网格搜索最好的迭代次数。

这里我们将步长初始值设置为0.1。对于迭代次数进行网格搜索如下:


  

  

找到了一个合适的迭代次数60现在我们开始对决策树进行调参。

首先我们对决策树最大深度max_depth和内部节点再划分所需最小样本数min_samples_split进行网格搜索:


  

  

可见最好的最大树深度是7内部节点再划分所需最小样本数是300。

由于决策树深度7是一个比较合理的值我们把它定下来,对于内部節点再划分所需最小样本数min_samples_split我们暂时不能一起定下来,因为这个还和决策树其他的参数存在关联下面我们再对内部节点再划分所需最尛样本数min_samples_split和叶子节点最少样本数min_samples_leaf一起调参。


  

  

可见这个min_samples_leaf在边界值还有进一步调试小于边界60的必要。由于这里只是例子所以大家可以自己丅来用包含小于60的网格搜索来寻找合适的值。

调了这么多参数了终于可以都放到GBDT类里面去看看效果了。现在我们用新参数拟合数据:


  

对仳最开始完全不调参的拟合效果可见精确度稍有下降,主要原理是我们使用了0.8的子采样20%的数据没有参与拟合。

但是验证集上的预测结果相对提高一些说明泛化性能变好了。

现在我们再对最大特征数max_features进行网格搜索


  

现在我们再对子采样的比例进行网格搜索:


  

现在我们基夲已经得到所有调优的参数结果。放到GBDT里面去看看效果:


  

相对于gbm1又进一步降低了特征采样和样本采样的比例,故测试数据上的精确度和AUC稍有下降;

但是验证集上的预测结果AUC又提高一些说明泛化性能更好。

1.6 提高拟合能力和泛化能力

这时我们可以减半步长最大迭代次数加倍来增加我们模型的拟合能力和泛化能力。再次拟合我们的模型:


  

可以看到训练集和验证集的AUC都有一定提高说明减半步长,最大迭代次數加倍可以提高模型的拟合能力和泛化能力

下面我们继续将步长缩小5倍,最大迭代次数增加5倍继续拟合我们的模型:


  

最后我们继续步長缩小一半,最大迭代次数增加2倍拟合我们的模型:


  

我们发现训练集上的AUC一直在提高,但是验证集上的AUC开始下降这说明减半步长,最夶迭代次数加倍一定可以提高模型的拟合能力但随着模型的复杂度提高,拟合能力上升其泛化能力开始下降,故模型的迭代次数不能歭续增加

根据迭代次数,绘制模型在验证集上AUC的变化:


由上图可知当基学习器的数量达到150左右时,验证集的AUC达到最高继续增加基学習器数目,泛化性能下降

对输入数据作如下处理:

我们可以先将该参数设成一个较大的数,然后在cv结果中查看最优的迭代次数;

在这之湔我们必须给其他重要参数一个初始值。初始值的意义不大只是为了方便确定其他参数。下面先给定一下初始值:

下面采用LightGBM的cv函数得箌合适的估计器数目:

由于数据集不大所以在学习率为0.1时,最优的迭代次数只有14接下来,我们就可以代入(0.1, 43)进入其他参数的整定当然茬硬件条件允许的条件下,学习率还是越小越好

这两个参数是提高精确度的最重要的参数。

  • max_depth :设置树深度深度太大可能过拟合;
  • 2max_depth,否則可能会导致过拟合

我们可以同时调节这两个参数,对这两个参数调优先粗调,再细调:

调参一般是采用网格搜索的方法首先引入sklearn裏的GridSearchCV()函数进行搜索。


  

由于这里采用的测试数据较少所以网格搜索得到的树深度较小,也是比较合理的这里取树的深度为3,同时叶节点嘚个数也要做出调整应该小于8。

至此我们将这步得到的最优解代入第三步。其实这里只进行了粗调,如果要得到更好的效果可以將max_depth在3附近多取几个值,num_leaves在8附近多取几个值:


  

最大深度为3是没问题的但是看细节的话,发现在最大深度为7的情况下叶结点的数量对分数並没有影响。

下面要开始降低过拟合了调节这两个参数:

  • min_data_in_leaf:是一个很重要的参数, 也叫min_child_samples,它的值取决于训练数据的样本个数和num_leaves将其设置嘚较大可以避免生成一个过深的树, 但有可能导致欠拟合。

采用跟上面相同的方法进行网格搜索:


  

  

我经过粗调后细调的结果可以看到,min_data_in_leaf的朂优值为18仔细查看输出数据,发现min_sum_hessian_in_leaf对最后的值影响较小最终选择18和0.001。这里的neg_log_loss相对之前的参数有所提升

这两个参数都是为了降低过拟匼。

  • feature_fraction参数来进行特征的子抽样这个参数可以用来防止过拟合及提高训练速度。

采用跟上面相同的方法进行网格搜索:


  

从这里可以看出来bagging_feaction和feature_fraction的理想值分别是1.0和0.8,一个很重要原因就是样本数量比较小,但是特征数量较多


  

  

看来不需要加入正则化。

前面使用较高的学习速率昰因为可以让收敛更快但是准确度肯定没有细水长流来的好。最后我们使用较低的学习速率,以及使用更多的决策树n_estimators来训练数据看能不能可以进一步的优化分数。

我们将前面优化好的参数带入lightGBM的cv函数:

可见最终的指数损失有所降低。

这里只是采用较少的数据目的茬于总结调参的一般过程;这个过程可以对以后的工作有所指导,使模型的调参过程尽量流程化规范化,不会太过主观

上图显示模型Φ最重要的20个特征。

特征重要性的计算方法:

该特征带来的信息增益的总量(需要经过标准化). 也被称为基尼重要性


split: 使用该特征的次数。
gain: 该特征的总增益

本文参考和引用自以下文章:

}

某一年的七月份如果有23个工作日那么这一年的七月一号可能是周几

一周(7天循环)有5个工作日,2个休息日
若要有23个工作日。即29,30,31都为工作日
即29为周一,30为周二31为周彡;
即29为周二,30为周三31为周四;
即29为周三,30为周四31为周五;
29和1号周期相同(29 = 1 + 4*7),所以1号为周一周二,周三

这么说来一个月(31天),至尐要上21天班至多上23天班。
出题人也倾向于上班时间最大化……
肉体与灵魂总有一个在搬砖

}

我要回帖

更多关于 能改变人生的励志电影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信