文章目录

  • GBDT 分类器
    • 引入
    • 重要参数
      • loss
      • learning_rate
      • subsample
      • n_estimators
      • criterion
      • max_depth
      • min_samples_leaf
      • min_samples_split
      • max_features
      • verbose
    • 重要属性
    • 重要方法
  • GBDT 回归器

本文主要是sklearn中GBDT的一些参数、属性、方法的理解,如果需要了解基础的理论知识,可以看看之前发表的文章: 梯度提升树(GBDT)相关知识。

GBDT 分类器

引入

from sklearn.ensemble import GradientBoostingClassifier
# 全部参数
GradientBoostingClassifier(ccp_alpha=0.0, criterion='friedman_mse', init=None,learning_rate=0.1, loss='deviance', max_depth=3,max_features=None, max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,min_samples_leaf=1, min_samples_split=2,min_weight_fraction_leaf=0.0, n_estimators=100,n_iter_no_change=None, presort='deprecated',random_state=None, subsample=1.0, tol=0.0001,validation_fraction=0.1, verbose=0,warm_start=False)

重要参数

loss

字符串类型,默认值’deviance’。用于指定损失函数:

  1. ‘deviance’:对数损失函数
  2. ‘exponential’:指数损失函数,只能用于二分类。

learning_rate

数值型,默认值0.1。用于指定学习率,调参方法:

  1. 给定 learning_rate 较小的值,例如0.1。
  2. 根据验证集准确率以10倍为单位增大或者减小参数值。
  3. 在找到合适的数量级后,在此数量级上微调。

合适的候选值:[0.001, 0.01, 0.1, 1]

subsample

数值型,默认值1。指定采样出 subsample * n_samples 个样本用于训练弱学习器。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。 取值在(0, 1)之间,设置为1表示使用所有数据训练弱学习器。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。

推荐的取值为:[0.5, 0.6, 0.7, 0.8, 0.9, 1]

n_estimators

数值型参数,默认值为100,此参数指定了弱分类器的个数。设置的值越大,精确度越好,但是当 n_estimators 大于特定值之后,带来的提升效果非常有限。

推荐的参数值为:[120, 300, 500, 800, 1200]

criterion

字符串类型,默认值为 ‘gini’。这个参数指定划分子树的评估标准:

  1. ‘entropy’,使用基于信息熵的方法,即计算信息增益
  2. ‘gini’,使用基尼系数(Gini Impurity)

**推荐设置为 ‘gini’,**因为(1)基尼系数的计算过程相对简单,而计算信息增益需要进行对数运算。(2)使用信息增益作为划分标准时,在使用高纬度数据或者噪声很多的数据时容易过拟合。

max_depth

数值型,默认值3。这是与剪枝相关的参数,设置为None时,树的节点会一直分裂,直到:(1)每个叶子都是“纯”的;(2)或者叶子中包含⼩于min_sanples_split个样本。

推荐从 max_depth = 3 尝试增加,观察是否应该继续加大深度。

合适的取值可以是 [3, 5, 8, 15, 25, 30, None]

如果max_leaf_nodes参数非None,则忽略此项

min_samples_leaf

数值型,默认值1,指定每个叶子结点包含的最少的样本数。参数的取值除了整数之外,还可以是浮点数,此时(min_samples_leaf * n_samples)向下取整后的整数是每个节点的最小样本数。
此参数设置的过小会导致过拟合,反之就会欠拟合。调整过程:

  1. 从min_samples_leaf=5开始上下调整。
  2. 对于类别不多的分类问题,设置为1通常是合理的选择。
  3. 当叶节点包含样本数量差异很大时,建议设置为浮点数。

推荐的取值可以是:[1, 2, 5, 10]

min_samples_split

数值型,默认值2,指定每个内部节点(非叶子节点)包含的最少的样本数。与min_samples_leaf这个参数类似,可以是整数也可以是浮点数。

推荐的取值是:[1, 2, 5, 10, 15, 100]

max_features

可以为整数、浮点、字符串,默认值为None。此参数用于限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。

  1. 如果是整数,则每次切分只考虑max_features个特征。
  2. 如果是浮点数,每次切分只考虑max_features*n_features个特征(max_features指定百分⽐)。
  3. 如果是字符串‘auto’,则max_features等于n_features。
  4. 如果是字符串‘sqrt’,则max_features等于sqrt(n_features)。
  5. 如果是字符串‘log2’,则max_features等于log2(n_features)。
  6. 如果是字符串None,则max_features等于n_features。

推荐的取值为:[‘log2’, ‘sqrt’, None]

verbose

数值类型,默认值为0,表示不输出日志。如果为1,则每次迭代输出一次日志。如果大于1,则每间隔 verbose 此迭代输出一次日志。

重要属性

1,feature_importances_ ,给出了各个特征对模型的重要性。

2,estimators_,一个数组,给出了每个弱学习器。

重要方法

1,fit(X, y) : 训练模型。
2,predict(X) : 用模型预测,返回预测值。
3,predict_proba(X) : 返回一个数组,数组元素依次为各个样本属于各个类别的概率值。
4,score(X, y) : 返回在(X, y)上预测的准确率(accuracy)。

GBDT 回归器

引入方式如下:

from sklearn.ensemble import GradientBoostingRegressor
# 所有参数
GradientBoostingRegressor(alpha=0.9, ccp_alpha=0.0, criterion='friedman_mse',init=None, learning_rate=0.1, loss='ls', max_depth=3,max_features=None, max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,min_samples_leaf=1, min_samples_split=2,min_weight_fraction_leaf=0.0, n_estimators=100,n_iter_no_change=None, presort='deprecated',random_state=None, subsample=1.0, tol=0.0001,validation_fraction=0.1, verbose=0, warm_start=False)

与GBDT分类树相比较,主要是下面的参数存在区别:

loss

字符串类型,默认值为 ‘ls’,实际可选的有:

  • ‘ls’:此时损失函数为平方损失函数,使用最小二乘回归。

  • ‘lad’:此时使用指数绝对值损失函数。

  • ‘huber’:此时损失函数为上述两者的综合,即误差较小时,采用平方损失,在误差较大时,采用绝对值损失。

  • ‘quantile’:分位数回归(分位数指的是百分之几),采用绝对值损失。

criterion

字符串类型,默认值为 ‘friedman_mse’,是衡量回归效果的指标。可选的有:

  • ‘friedman_mse’:改进型的均方误差
  • ‘mse’:标准的均方误差
  • ‘mae’:平均绝对误差

除了这两个参数之外,其他参数、属性、方法的含义与用法与上文提到的GBDT分类器的参数基本一致。

参考文章:

sklearn.ensemble.GradientBoostingClassifier

sklearn.ensemble.RandomForestRegressor

scikit-learn 梯度提升树(GBDT)调参小结

sklearn中GBDT的一些参数、属性、方法的理解相关推荐

  1. Extjs中给同一个GridPanel中的事件添加参数的方法

    Extjs中给同一个GridPanel中的事件添加参数的方法: this.isUse = new Ext.Action({             text:'启用',             sco ...

  2. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  3. python中size的用法.dim_对于numpy中的函数的参数dim的一点理解

    对于numpy中的函数的参数dim的一点理解 经常被dim参数搞混.试着总结了一下.记忆瞬间清晰了 以.max(dim)方法为例: >>> import numpy as np &g ...

  4. VS中添加命令行参数的方法

    在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击:添加参数的工程-->属性-->配置属性-->调试,在右侧"命令参数"栏输入要添加的参数, ...

  5. sklearn中常见的线性模型参数释义

    from sklearn.linear_model import LinearRegression LinearRegression(fit_intercept=True,normalize=Fals ...

  6. VS2017中处理命令行参数的方法----C++语言 Windows系统

    我们使用Windows系统的VS2017编程时,有时候需要处理命令行参数,但是该IDE默认情况下没有提供命令行参数,并且也不会自动识别,必须由我们自己去手动打开,接下来就用一个简单的例子来介绍一下如何 ...

  7. mysql中的主从复制slave-skip-errors参数使用方法

    在主从复制中,难免会遇到一些sql语句错误的问题.这个时候我们需要手动来重新设置中继日志的起始点了,有些麻烦.今天在看"2012华东架构师大会"视频的时候,发现淘宝丁奇的ppt里有 ...

  8. JSP中四种传递参数的方法

    1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="index.jsp"?a= ...

  9. java中关于线程的状态属性_深入理解Java多线程与并发框(第①篇)——线程的状态...

    ![](http://img.blog.itpub.net/blog/2020/03/20/5d189a73e1147f37.png?x-oss-process=style/bb) **1. 新建状态 ...

最新文章

  1. putty network error:Connection refused 乱码
  2. linux sort 时间排序,linux sort多字段排序实例解析
  3. linux 内网怎么安装git环境_linux 安装go环境
  4. ipmsg飞鸽传书系统即时通讯
  5. 系统分析员、系统架构师、项目经理的区别(转载)
  6. 中小企业的进步:热爱大数据
  7. messagebox的用法_酝酿已久,MessageBox类实例代码讲解
  8. 【Pytorch】LeNet的pytorch写法
  9. J2EE中使用jstl报http //java sun com/jsp/jstl/core cannot be reso
  10. Windows Server 2003 安装教程——图文小白版(附下载地址)
  11. vue网易严选购物商城项目
  12. 蓝屏错误处理通用步骤附个人蓝屏解决步骤
  13. python 读写文件 把爬取的图片信息写入文件
  14. KY-RTI分布仿真技术:第四章 C++程序设计
  15. uni-app 微信小程序实现全屏悬浮按钮可拖动,自动吸附边缘
  16. kinect for Unity开发
  17. redis实现坐标附近查询
  18. 解决windows 10桌面文件图标上出现两个蓝色箭头
  19. 数商云B2B商城系统订货功能为新能源汽车行业赋能,打造高质量发展生态圈
  20. 最新 UltraEdit 24.20 注册成功经验分享

热门文章

  1. ic5141运行出现cannot compile ahdlcmi module解决方案
  2. 本地第一次对接已经存在的github上的repository
  3. python生成器generator:深度学习读取batch图片
  4. apt ubuntu 指定ipv4_如何使用 apt 命令安装软件
  5. python中from import用法_python学习--Python之import与from...import的区别与用法
  6. C# 字符串按设置的格试在前面或后面增加空格或其它字符
  7. linux每日命令(17):which命令
  8. 面试题解(3):SQL
  9. 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品
  10. 8.1个Windows 8.1的不足之处及其解决方法