设为首页 加入收藏

TOP

使用sklearn进行集成学习——实践(一)
2017-09-30 17:10:57 】 浏览:595
Tags:使用 sklearn 进行 集成 学习 实践

系列

目录

1 Random Forest和Gradient Tree Boosting参数详解
2 如何调参?
  2.1 调参的目标:偏差和方差的协调
  2.2 参数对整体模型性能的影响
  2.3 一个朴实的方案:贪心的坐标下降法
    2.3.1 Random Forest调参案例:Digit Recognizer
      2.3.1.1 调整过程影响类参数
      2.3.1.2 调整子模型影响类参数
    2.3.2 Gradient Tree Boosting调参案例:Hackathon3.x
      2.3.2.1 调整过程影响类参数
      2.3.2.2 调整子模型影响类参数
      2.3.2.3 杀一记回马枪
  2.4 “局部最优解”(温馨提示:看到这里有彩蛋!)
  2.5 类别不均衡的陷阱
3 总结
4 参考资料


1 Random Forest和Gradient Tree Boosting参数详解

  在sklearn.ensemble库中,我们可以找到Random Forest分类和回归的实现:RandomForestClassifier和RandomForestRegression,Gradient Tree Boosting分类和回归的实现:GradientBoostingClassifier和GradientBoostingRegression。有了这些模型后,立马上手操练起来?少侠请留步!且听我说一说,使用这些模型时常遇到的问题:

  • 明明模型调教得很好了,可是效果离我的想象总有些偏差?——模型训练的第一步就是要定好目标,往错误的方向走太多也是后退。
  • 凭直觉调了某个参数,可是居然没有任何作用,有时甚至起到反作用?——定好目标后,接下来就是要确定哪些参数是影响目标的,其对目标是正影响还是负影响,影响的大小。
  • 感觉训练结束遥遥无期,sklearn只是个在小数据上的玩具?——虽然sklearn并不是基于分布式计算环境而设计的,但我们还是可以通过某些策略提高训练的效率。
  • 模型开始训练了,但是训练到哪一步了呢?——饱暖思淫欲啊,目标,性能和效率都得了满足后,我们有时还需要有别的追求,例如训练过程的输出,袋外得分计算等等。

  通过总结这些常见的问题,我们可以把模型的参数分为4类:目标类、性能类、效率类和附加类。下表详细地展示了4个模型参数的意义:

参数 类型 RandomForestClassifier RandomForestRegressor GradientBoostingClassifier GradientBoostingRegressor
loss 目标    

损失函数

● exponential:模型等同AdaBoost

★ deviance:和Logistic Regression的损失函数一致

损失函数

● exponential:模型等同AdaBoost

★ deviance:和Logistic Regression的损失函数一致

alpha 目标      损失函数为huber或quantile的时,alpha为损失函数中的参数   损失函数为huber或quantile的时,alpha为损失函数中的参数
class_weight 目标

类别的权值

     
n_estimators  性能

子模型的数量

● int:个数

★ 10:默认值

子模型的数量

● int:个数

★ 10:默认值

子模型的数量

● int:个数

★ 100:默认值

子模型的数量

● int:个数

★ 100:默认值

learning_rate 性能     学习率(缩减) 学习率(缩减)
criterion 性能

判断节点是否继续分裂采用的计算方法

● entropy

★ gini

判断节点是否继续分裂采用的计算方法

★ mse

   
max_features 性能

节点分裂时参与判断的最大特征数

● int:个数

● float:占所有特征的百分比

★ auto:所有特征数的开方

● sqrt:所有特征数的开方

● log2:所有特征数的log2值

● None:等于所有特征数

节点分裂时参与判断的最大特征数

● int:个数

● float:占所有特征的百分比

★ auto:所有特征数的开方

● sqrt:所有特征数的开方

● log2:所有特征数的log2值

● None:等于所有特征数

节点分裂时参与判断的最大特征数

● int:个数

● float:占所有特征的百分比

● auto:所有特征数的开方

● sqrt:所有特征数的开方

● log2:所有特征数的log2值

★ None:等于所有特征数

节点分裂时参与判断的最大特征数

● int:个数

● float:占所有特征的百分比

● auto:所有特征数的开方

● sqrt:所有特征数的开方

● log2:所有特征数的log2值

★ None:等于所有特征数

max_depth 性能

最大深度,如果max_leaf_nodes参数指定,则忽略

● int:深度

★ None:树会生长到所有叶子都分到一个类,或者某节点所代表的样本数已小于min_samples_split

最大深度,如果max_leaf_nodes参数指定,则忽略

● int:深度

★ None:树会生长到所有叶子都分到一个类,或者某节点所代表的样本数已小于min_samples_split

最大深度,如果max_leaf_nodes参数指定,则忽略

● int:深度

★ 3:默认值

最大深度,如果max_leaf_nodes参数指定,则忽略

● int:深度

★ 3:默认值

min_samples_split 性能

分裂所需的最小样本数

● int:样本数

★ 2:默认值

 

分裂所需的最小样本数

● int:样本数

★ 2:默认值

 

分裂所需的最小样本数

● int:样本数

★ 2:默认值

 

分裂所需的最小样本数

● int:样本数

★ 2:默认值

min_samples_leaf 性能

叶节点最小样本数

● int:样本数

★ 1:默认值

叶节点最小样本数

● int:样本数

★ 1:默认值

叶节点最小样本数

● int:样本数

★ 1:默认值

叶节点最小样本数

● int:样本数

★ 1:默认值

min_weight_fraction_leaf 性能

叶节点最小样本权重总值

● float:权重总值

★ 0:默认值

叶节点最小样本权重总值

● float:权重总值

★ 0:默认值

叶节点最小样本权重总值

● float:权重总值

★ 0:默认值

叶节点最小样本权重总值

● float:权重总值

★ 0:默认值

max_leaf_nodes 性能

最大叶节点数

● int:个数

★ None:不限制叶节点数

最大叶节点数

● int:个数

★ None:不限制叶节点数

最大叶节点数

● int:个数

★ None:不限制叶节点数

最大叶节点数

● int:个数

★ None:不限制叶节点数

bootstrap 性能

是否bootstrap对样本抽样

● False:子模型的样本一致,子模型间强相关

★ True:默认值

是否bootstrap对样本抽样

● False:子模型的样本一致,子模型间强相关

★ True:默认值

  &n
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇通过try、except和else的使用来使.. 下一篇Django1.8教程——从零开始搭建一..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目