sklearn中GBDT的一些参数、属性、方法的理解

该博客详细介绍了GBDT分类器的重要参数,包括loss、learning_rate、subsample等,并提供了调参建议。同时提到了GBDT回归器的区别在于loss和criterion。通过理解这些参数,有助于优化模型性能。


本文主要是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)调参小结

### 使用GBDT算法实现工业园区碳排放核算 #### 数据准备与预处理 为了使用梯度提升决策树(Gradient Boosting Decision Tree, GBDT)来预测或分析工业园区内的碳排放情况,首先要收集并整理相关数据集。这些数据通常包括但不限于各个工厂的生产量、能源消耗种类及数量、设备运行时间等特征变量[^1]。 ```python import pandas as pd # 假设已有一个CSV文件包含了上述提到的数据字段 data = pd.read_csv('industrial_park_emission_data.csv') print(data.head()) ``` #### 特征工程 针对特定行业特点构建有效的输入特征对于提高模型准确性至关重要。这一步骤可能涉及创建新的衍生属性(例如单位产品能耗)、去除异常值以及标准化数值范围等工作[^3]。 ```python from sklearn.preprocessing import StandardScaler # 对选定的一些连续型特征做标准缩放转换 scaler = StandardScaler() scaled_features = scaler.fit_transform(data[['energy_consumption', 'production_volume']]) data['scaled_energy'] = scaled_features[:, 0] data['scaled_production'] = scaled_features[:, 1] # 移除明显错误的数据点 cleaned_data = data[(data['carbon_emission'] >= 0)] ``` #### 构建与训练GBDT模型 利用经过清洗和增强后的高质量样本集合来进行机器学习过程中的监督式学习阶段——即通过历史记录教导计算机理解不同因素之间存在的关系模式,并据此建立能够对未来事件做出合理推测的能力[^2]。 ```python from sklearn.model_selection import train_test_split from sklearn.ensemble import GradientBoostingRegressor # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( cleaned_data.drop(['carbon_emission'], axis=1), cleaned_data['carbon_emission'], test_size=0.2, random_state=42) # 初始化GBDT回归器对象 gbdt_model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42) # 训练模型 gbdt_model.fit(X_train, y_train) ``` #### 模型评估与优化 完成初步拟合之后还需要进一步验证其泛化性能的好坏程度;可以通过交叉验证方法获取更加稳健的结果估计值,并尝试调整超参数设置以期获得更优解。 ```python from sklearn.metrics import mean_squared_error predictions = gbdt_model.predict(X_test) mse = mean_squared_error(y_test, predictions) rmse = mse ** 0.5 print(f'Root Mean Squared Error on Test Set: {rmse:.2f}') ``` #### 应用实例展示 假设某市环保局希望借助本项目成果辅助制定减排政策,则可以基于所开发出来的工具快速计算出各类企业预计产生的温室气体总量,从而有针对性地采取措施降低整体环境影响水平。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值