机器学习——lightGBM(学习整理)

news2024/11/25 0:28:53

目录

一、认识lightGBM

1. 简单介绍

2. 主要特点

LightGBM 的缺点

3. 模型训练方式

(1)Training API

(2)Scikit-learn API

二、相关函数参数

1. Training API

2. Scikit-learn API(重复只做补充)

3. lightgbm.cv

4. lightgbm.Dataset

5. Callbacks

(1)lightgbm.record_evaluation

(2)lightgbm.early_stopping

(3)lightgbm.log_evaluation

(4)lightgbm.reset_parameter

6. Plotting

(1)lightgbm.plot_metric

(2)lightgbm.plot_importance

(3)lightgbm.plot_tree

(4)lightgbm.create_tree_digraph

三、调参

1. 基本流程(使用GridSearchCV)

(1)确定 max_depth 和 num_leaves

(2)确定 min_data_in_leaf 和 max_bin

(3)确定 feature_fraction、bagging_fraction、bagging_freq

(4)确定lambda_l1和lambda_l2

(5)确定 min_split_gain

(6)最后再次尝试调节降低学习率,增加迭代次数,验证模型。

2. 其他需求

(1)更快的训练速度

(2)更好的准确率

(3)处理过拟合


一、认识lightGBM

1. 简单介绍

        LightGBM 是 微软的 一个团队 在 Github 上开发的一个 开源项目,高性能 的 LightGBM 算法具有分布式 和 可以 快速处理大量数据的 特点。LightGBM 虽然 基于 决策树和 XGBoost 而生,但它 还遵循 其他不同的 策略。

        XGBoost 使用决策树 对一个 变量进行 拆分,并在 该变量上 探索不同的 切割点(按级别划分的 树生长策略),而 LightGBM 则 专注于 按叶子节点 进行拆分,以便 获得更好的 拟合(按叶划分的树生长策略)。这使得 LightGBM 能够 快速获得很好的 数据拟合,并生成 能够 替代 XGBoost 的 解决方案。从 算法上讲,XGBoost 将决策树 所进行的 分割结构 作为一个图 来计算,使用 广度优先搜索(BFS),而 LightGBM 使用的是 深度优先搜索(DFS)

2. 主要特点

(1)比 XGBoost 准确性更高,训练时间 更短。

(2)支持 并行树增强,可以利用多核 CPU 或者 GPU 来加速训练过程,即使在大型数据集上也能提供 比 XGBoost 更好的 训练速度。

(3)通过 使用 直方图算法 将连续特征 提取为 离散特征,实现了 惊人的快速 训练速度 和 较低的内存 使用率。

(4)不需要 额外处理数据中的 缺失值,LightGBM 会自动 进行处理。

(5)通过 使用 按叶分割 而不是 按级别分割来 获得更高精度,加快 目标函数 收敛过程,并在非常复杂的 树中 捕获训练数据的 底层模式。使用 num_ leaves 和 max_depth 超参数控制过拟合

(6)支持分类和回归任务

LightGBM 的缺点

    ① 容易过拟合:与其他 树模型类似,LightGBM 容易过拟合,需要进行 适当的 正则化。

    ② 对超参数敏感:LightGBM 的性能 受超参数的 影响较大,需要 进行 仔细调参。

    ③ 不适用于小样本数据:LightGBM 在小样本数据 上 可能表现不佳,需要 足够的 数据量才能 发挥其优势。

3. 模型训练方式

        import lightgbm as lgb

(1)Training API
lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', keep_training_booster=False, callbacks=None)
lightgbm.cv(params, train_set, num_boost_round=100, folds=None, nfold=5, stratified=True, shuffle=True, metrics=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', fpreproc=None, seed=0, callbacks=None, eval_train_metric=False, return_cvbooster=False)
(2)Scikit-learn API
class lightgbm.LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type='split', **kwargs)
class lightgbm.LGBMRegressor(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type='split', **kwargs)

二、相关函数参数

1. Training API

lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', keep_training_booster=False, callbacks=None)
lightgbm.train参数含义
params(dict)

训练参数。

通过参数传递的值优先于参数默认值。

train_set (Dataset)

训练数据。

通常通过lightgbm.Dataset函数创建

num_boost_round 

(int, optional)

num_iterations、n_iter、n_estimators、max_iter

提升迭代的次数,即训练多少棵树。

默认值为100

valid_sets

(list of Dataset, optional)

验证数据集列表。默认为None。

用于在训练过程中评估模型性能。

valid_names 

(list of str, optional)

验证数据集的名字列表。默认为None。

用于在输出中标识每个验证集的性能。

fobj (callable, optional)自定义的目标函数。
feval (callable, optional)自定义的评估函数。

init_model 

(str or Booster, optional)

默认为None。

初始模型的文件路径或已训练的模型。

可以用来继续训练或作为热启动。

feature_name 

(str or list of str, optional)

特征名。默认为"auto"

如果为’auto’,则使用训练集中的特征名。

categorical_feature 

(str, list of str, int, list of int, or ‘auto’, optional)

类别特征。

可以指定为特征的索引或名称。

keep_training_booster

(bool, optional)

如果为True,则保留训练过程中的模型,以便后续使用。默认为False。
evals_result (dict, optional)用于存储每一轮迭代结果的字典。如果提供,将覆盖evals_result参数。

callbacks

(list of callable, optional)

回调函数列表,用于在训练过程中的特定事件触发时执行自定义操作。默认为None。

early_stopping_rounds

(early_stopping_round、early_stoppingn_iter_no_change

用于指定早停轮次,即如果验证集上的评估指标在指定的轮次内没有提升,则提前停止训练过程,以避免过拟合并节省计算资源。默认为0。

现在多采用 callbacks 参数传递early_stopping()回调函数来代替。

eval_metric用于指定模型在验证集上的评估指标,以便在训练过程中监控模型的性能。 与early_stopping_rounds 结合使用设置提前停止训练过程。
params参数含义

objective(objective_type)

指定学习任务的类型和损失函数,LightGBM 会应用不同的损失函数来优化模型。默认 regression。

① binary(binary_logistic): 用于二分类任务,预测概率并直接输出 0 或 1。

② multiclass(softmax): 多分类任务。适用于多个类别的分类问题,需配合 num_class 参数指定类别数。

③ cross_entropy(xentropy):交叉熵损失,常用于二分类或多分类任务,特别是在处理概率输出时。

④ regression(regression_l1、regression_l2、regression_l2_leaf): 回归任务,模型预测连续值。

⑤ l1: Lasso回归,用于稀疏特征表示,鼓励系数为零。

⑥ cross_entropy_lambda(xentlambda):带L2正则化的交叉熵损失,适用于需要控制模型复杂度的分类任务。

⑦ lambdarank:排序任务,特别是用于学习排序列表的场景,如搜索引擎的排名优化。

⑧ huber: 更鲁棒的回归损失,对于离群点影响较小。

⑨ fair: 面向公平性的回归,减小模型对某些特定群体的偏差。

⑩ mape: 对均绝对百分比误差(MAPE)的优化,常用于评估时间序列数据。

⑪ quantile: 计算给定分位数的回归,如0.5(中位数)或用户自定义的分位数。

⑫ poisson: 适用于事件计数问题,比如文档中单词数等。

boosting

(boosting_type、boost)

决定了 LightGBM 在训练过程中如何结合多个弱学习器(通常是决策树)来形成一个强学习器,即构造决策树的方式。默认‘gbdt’。

① gbdt:基于梯度提升决策树(Gradient Boosting Decision Tree)的方法。适用于回归和分类问题,速度较快且准确度较高。是大多数情况下的首选。

② rf:随机森林(Random Forest)的方式构造决策树。虽然训练速度也较快,但相较于gbdt,其准确率可能会略低。适用于对训练速度有较高要求,且对准确率要求不是非常严格的场景。

③ dart:Dropout 加了加性正则化的方法。训练时间较长,但能够取得较好的准确率,适合细调和调优。该方法引入了dropout机制,有助于防止过拟合。

metric

计算评估指标,以便了解模型的训练进度和性能表现。

(1)分类任务

① binary_logloss:二元对数损失。表示模型预测的概率分布与真实标签之间的差异。

② binary_error简单的分类错误率。

③ auc(Area Under the Curve)

④ auc_pr:Precision-Recall曲线下的面积。

④ multiclass_logloss:多类对数损失。是对每个类别的对数损失的平均值。

⑤ multi_error:多分类任务的错误率。

(2)回归任务

① l1(或mae、mean_absolute_error、regression_l1):平均绝对误差(Mean Absolute Error),衡量预测值与真实值之间差异的绝对值的平均值。

 l2(或mse、mean_squared_error、regression_l2、regression):均方误差(Mean Squared Error),衡量预测值与真实值之间差异的平方的平均值的平方根。

 rmse(或root_mean_squared_error、l2_root):均方根误差(Root Mean Squared Error)。l2实际上是MSE的另一种表述,而RMSE是MSE的平方根。】

④ quantile:分位数损失,用于预测具有不确定性的估计量(如预测区间)。

(3)排序任务

① ndcg(Normalized Discounted Cumulative Gain)(或lambdarank、rank_xendcg、xendcg、xe_ndcg、xe_ndcg_mart、xendcg_mart):用于评估搜索引擎等排序任务性能的指标,考虑了排序列表中元素的顺序和相关性。

② map(Mean Average Precision)(或mean_average_precision):在信息检索中常用的指标,特别适用于评估多个查询的平均性能。

【其他:cross_entropy、average_precision(平均精度得分)、cross_entropy_lambda、mape(MAPE损失)、huber(huber损失)、fair(fair损失)、gamma(Gamma回归的负对数似然)、gamma_deviance(Gamma回归残差)、tweedie(Tweedie回归的负对数似然)】

learning_rate

 (list of float, optional)

shrinkage_rateeta

每一轮迭代的学习率。

默认为0.1。

num_leavesnum_leafmax_leavesmax_leaf

指定了每棵树中叶子节点的最大数量。

默认31。

max_depth

限制树模型的最大深度,有助于防止模型过拟合。默认-1。

min_data_in_leafmin_data、min_data_per_leafmin_child_samplesmin_samples_leaf

用于指定一个叶子节点上必须包含的最少样本数量,有助于防止模型过拟合。 默认20。

max_bin

(max_bins)

用于指定每个特征的最大分桶数量,影响模型的训练速度和内存使用,以及可能的模型精度和泛化能力。 默认255。

较大的 max_bin 值可以保留更多的信息,但可能增加训练时间和 过拟合的风险;较小的值则可能减少训练时间并提高泛化性能,但也可能导致信息损失。

feature_fractionsub_featurecolsample_bytree

用于指定在每次迭代(即每棵树)中随机选择用于训练的特征的百分比,以此进行特征子采样,有助于防止过拟合并提高训练速度。 默认1.0。

通过减少每次迭代中使用的特征数量,该参数可以增加模型的泛化能力,并可能通过减少计算量来加速训练过程。

bagging_fractionsub_rowsubsamplebagging

用于指定在每次迭代中随机选择用于训练的样本的比例,以此进行样本子采样,有助于减少模型的方差,提高模型的稳定性和泛化能力。 默认1.0。

通过降低每次迭代中使用的样本数量,该参数可以增加模型的多样性,从而在一定程度上防止过拟合,并可能通过减少计算量来加速训练过程。

bagging_freq(subsample_freq)

用于指定进行bagging的频率,即每隔多少轮迭代执行一次bagging操作。 默认0。

它通过控制 bagging 的执行频率来影响模型的训练过程,进而对模型的稳定性和泛化能力产生影响。

lambda_l1reg_alphal1_regularization

这是一个正则化参数,用于控制 L1正则化 的强度,以减少模型的复杂度 和 防止过拟合默认0。

lambda_l1 通过设置一个 阈值,使得当节点的增益(gain)小于这个阈值时,该节点不再进行分裂,从而限制树模型的复杂度。这种机制有助于提升模型的泛化能力,防止在训练集上表现过好而在测试集上表现不佳的情况。

lambda_l2reg_lambdalambdal2_regularization

这是另一个正则化参数,用于控制 L2正则化 的强度,通过为节点的增益分母(即节点样本数)增加一个常数项,来减少模型的复杂度和防止过拟合。 默认0。

它作用于整个训练过程,特别是在节点样本数较小时,能显著减小增益,从而避免不必要的节点分裂。

min_gain_to_splitmin_split_gain

用于指定进行树节点分裂所需的最小增益阈值,用于控制树的生长和分裂的精细程度,有助于防止过拟合。默认0。

设置 min_gain_to_split 参数可以确保只有当分裂带来的增益大于或等于该阈值时,节点才会被分裂,从而控制树的深度和复杂度,防止模型学习到训练数据中的噪声,提高模型的泛化能力。

num_threads(num_threadnthreadnthreadsn_jobs

用于控制OpenMP并行执行时使用的最大线程数,以优化训练过程的性能。 默认0。

在可用的系统上,通过调整 num_threads 参数,可以充分利用多核CPU的计算资源,加速LightGBM的训练过程。默认情况下,LightGBM 会遵循 OpenMP 的默认行为,即每个真实CPU内核一个线程。

seed(random_seedrandom_state

用于控制训练过程中的随机性,以确保实验的可重复性。 默认为None。

它主要影响数据的初始洗牌、特征选择和分裂等过程中的随机性。通过设定相同的 seed 值,在相同的数据集和参数配置下,可以多次获得完全相同的训练结果。

verbose(verbosity)

用于控制训练过程中的信息输出量,即控制训练日志的详细程度。默认为1。

verbose=0:没有任何输出信息。
verbose=1:输出进度信息,每训练完一棵树都会输出。
verbose=2:输出详细训练信息,包括每棵树的评估结果。

 

2. Scikit-learn API(重复只做补充)

class lightgbm.LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type='split', **kwargs)
class lightgbm.LGBMRegressor(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type='split', **kwargs)

lightgbm.LGBMClassifier

lightgbm.LGBMRegressor

参数含义
subsample_for_bin

指定了用于构建直方图的样本数量。 默认为200000。

这个参数影响模型在特征选择过程中的细节,通过限制用于计算直方图的样本数,可以在保持一定精度的同时减少计算量,提高模型的训练效率。

class_weight

用于处理不平衡数据集,通过给不同类别的样本赋予不同的权重,以改善模型对少数类样本的识别能力。 默认为None。

这有助于模型在训练过程中更加关注那些数量较少的类别,从而提高整体分类性能。可以填 ’balanced‘ 自动处理,也可以以{class_label: weight} 格式手动设置。

min_child_weight

用于控制一个叶子节点上所有样本的权重之和的最小值,以防止模型过拟合。 默认为1e-3。

当某个叶子节点的样本权重和小于该参数时,该节点将不会继续拆分。

较大的min_child_weight值会使模型更加保守,倾向于生成较浅的树,有助于防止过拟合,但也可能导致模型欠拟合。

min_child_samples

用于控制每个叶子节点所需的最小样本数,以防止模型过拟合。 默认为20。

该参数设置了一个阈值,只有当叶子节点中的样本数大于或等于这个阈值时,节点才会被进一步拆分。

通过调整这个参数,可以影响模型的复杂度和泛化能力。较大的min_child_samples值会使模型更加保守,倾向于生成较浅的树,有助于防止过拟合,但也可能导致模型欠拟合。

3. lightgbm.cv

lightgbm.cv(params, train_set, num_boost_round=100, folds=None, nfold=5, stratified=True, shuffle=True, metrics=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', fpreproc=None, seed=0, callbacks=None, eval_train_metric=False, return_cvbooster=False)

        作用:使用给定的 参数实施 交叉验证。

lightgbm.cv参数含义
train_set指定数据。
folds

自定义的交叉验证分割器。

如果提供了这个参数,nfold 和 stratified 参数将被忽略。这允许用户使用更复杂的交叉验证策略,如时间序列数据的交叉验证。

nfold交叉验证的折数。默认为5。
stratified

是否进行分层抽样。默认值为 True

在分类问题中,如果类的分布是不均匀的,分层抽样可以帮助保持每一折中类的比例与原始数据集相似。

shuffle拆分数居前是否shuffle。默认值为 True

4. lightgbm.Dataset

class lightgbm.Dataset(data, label=None, reference=None, weight=None, group=None, init_score=None, feature_name='auto', categorical_feature='auto', params=None, free_raw_data=True, position=None)
lightgbm.Dataset参数含义
data指定训练或测试数据集。
label指定目标变量(即标签),用于有监督学习任务。默认为None。
reference

指定一个参考数据集,用于在后续的数据集上应用相同的特征索引和分组策略。

这通常用于训练集和测试集之间的特征对齐。

categorical_feature

 (list of str or int, or 'auto', optional)

指定哪些特征是分类特征。LightGBM 会对这些特征进行优化处理,以提高训练效率和模型性能。默认为'auto'。

如果设置为 'auto',LightGBM 会尝试自动检测分类特征。

weight

list, numpy 1-D array, pandas Series, pyarrow Array, pyarrow ChunkedArray or None, optional)

指定每个样本的权重。默认为None。

这在处理不平衡数据集时特别有用,可以通过给少数类样本赋予更高的权重来平衡不同类别的影响。

free_raw_data

如果设置为True,则在构建内部数据结构后释放原始数据的内存,以减少内存使用。默认为True。

这对于大数据集特别有用。

方法含义
get_data()获取Dataset的原始数据。
get_feature_name()获取Dataset中列(特征)的名称。
get_label()获取Dataset的标签。
get_params()获取Dataset使用的参数。

        更多方法可以查看 lightgbm.Dataset — LightGBM 4.5.0.99 documentation

5. Callbacks

(1)lightgbm.record_evaluation
lightgbm.record_evaluation(eval_result)

        作用:在训练过程中 自动地记录 并输出模型 在验证集(或训练集)上的 性能指标,如准确率、AUC值 等,以 帮助用户 监控模型的 训练过程 和 性能。

(2)lightgbm.early_stopping
lightgbm.early_stopping(stopping_rounds, first_metric_only=False, verbose=True, min_delta=0.0)

        功能:用于 控制 早停(early stopping)行为的 功能。在 LightGBM 的训练过程 中,早停 是一种 防止过拟合的 技术,它会 在验证集上的 性能 不再提升时 提前 停止训练。

# 实例
lgb_train = lgb.Dataset(x_train, y_train)
lgb_test = lgb.Dataset(x_test, y_test, reference=lgb_train)

params = {
    'boosting':'gbdt',
    'objective':'binary',
    "metric": ('auc')
}

eval_result = {}

lgb_model = lgb.train(
    params, lgb_train, num_boost_round=200, valid_sets=lgb_test
    ,callbacks=(lgb.record_evaluation(eval_result), lgb.early_stopping(stopping_rounds=3))
)
(3)lightgbm.log_evaluation
lightgbm.log_evaluation(period=1, show_stdv=True)

        功能:创建一个记录计算结果的回调。

(4)lightgbm.reset_parameter
lightgbm.reset_parameter(**kwargs)

        功能:创建一个回调函数,再一次迭代后重制参数。

6. Plotting

(1)lightgbm.plot_metric
lightgbm.plot_metric(booster, metric=None, dataset_names=None, ax=None, xlim=None, ylim=None, title='Metric during training', xlabel='Iterations', ylabel='@metric@', figsize=None, dpi=None, grid=True)

         作用:绘制训练过程中记录的评估指标。(结合 record_evaluation 使用

lightgbm.plot_metric参数含义
boosterlightgbm.train() 返回值。
metric要绘制的度量名称。
(2)lightgbm.plot_importance
lightgbm.plot_importance(booster, ax=None, height=0.2, xlim=None, ylim=None, title='Feature importance', xlabel='Feature importance', ylabel='Features', importance_type='auto', max_num_features=None, ignore_zero=True, figsize=None, dpi=None, grid=True, precision=3, **kwargs)

         作用:绘制特征重要性排序。

(3)lightgbm.plot_tree
lightgbm.plot_tree(booster, ax=None, tree_index=0, figsize=None, dpi=None, show_info=None, precision=3, orientation='horizontal', example_case=None, **kwargs)

         作用:画决策树。

(4)lightgbm.create_tree_digraph
lightgbm.create_tree_digraph(booster, tree_index=0, show_info=None, precision=3, orientation='horizontal', example_case=None, max_category_values=10, **kwargs)

        作用:画树图。

# 实例
print('画出训练结果...')
ax = lgb.plot_metric(evals_result, metric='auc')
plt.show()
 
print('画特征重要性排序...')
lgb.plot_importance(gbm, max_num_features=10)
plt.show()
 
print('Plot 3th tree...')  # 画出决策树,其中的第三颗
lgb.plot_tree(gbm, tree_index=3, figsize=(20, 8), show_info=['split_gain'])
plt.show()

print('画出决策树的pdf图')
lgb.create_tree_digraph(gbm, tree_index=3, name='Tree3')

三、调参

1. 基本流程(使用GridSearchCV)

# 初始参数
params = {
    'boosting':'gbdt',
    'objective':'binary',
    "metric": ('auc')
}
(1)确定 max_depth 和 num_leaves
params_test1={
    'max_depth': range(3,8), 
    'num_leaves': range(25,70,5)
}
(2)确定 min_data_in_leaf 和 max_bin
params_test2={
    'max_bin': range(10,256,20), 
    'min_data_in_leaf': range(10,101,10)
}
(3)确定 feature_fraction、bagging_fraction、bagging_freq
params_test3={
    'feature_fraction': [0.6, 0.7, 0.8, 0.9, 1.0],
    'bagging_fraction': [0.6, 0.7, 0.8, 0.9, 1.0],
    'bagging_freq': range(0,81,10)
}
(4)确定lambda_l1和lambda_l2
params_test4={
    'lambda_l1': [1e-5, 1e-3, 1e-1, 0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0],
    'lambda_l2': [1e-5, 1e-3, 1e-1, 0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0]
}
(5)确定 min_split_gain
params_test5={
    'min_split_gain': [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
}
(6)最后再次尝试调节降低学习率,增加迭代次数,验证模型。

2. 其他需求

(1)更快的训练速度
  • 通过设置 bagging_fraction 和 bagging_freq 参数来使用 bagging 方法
  • 通过设置 feature_fraction 参数来使用特征的子抽样
  • 使用较小的 max_bin
  • 使用 save_binary 在未来的学习过程对数据加载进行加速
  • 使用并行学习
(2)更好的准确率
  • 使用较大的 max_bin (学习速度可能变慢)
  • 使用较小的 learning_rate 和 较大的 num_iterations
  • 使用较大的 num_leaves (可能导致过拟合)
  • 使用更大的训练数据
  • 尝试 dart
(3)处理过拟合
  • 使用较小的 max_bin
  • 使用较小的 num_leaves
  • 使用 min_data_in_leaf 和 min_sum_hessian_in_leaf
  • 通过设置 bagging_fraction 和 bagging_freq 来使用 bagging
  • 通过设置 feature_fraction 来使用特征子抽样
  • 使用更大的训练数据
  • 设置 lambda_l1lambda_l2 和 min_gain_to_split 来使用正则化
  • 尝试 max_depth 来避免生成过深的树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python requests 被屏蔽(已设置header和代理IP,解决浏览器指纹问题)

情况说明: 已设置 User-Agent已使用代理IP之前请求没问题,突然无法请求了。我用浏览器打开网站可以正常访问。 我遇到的原因: 目标网站/接口,能够通过JA3或者其他浏览器指纹信息,识别到你不是通过浏览器进行访问的。…

【解决】JS Uncaught RangeError: Invalid array length

【解决】JS Uncaught RangeError: Invalid array length 在JavaScript编程中,Uncaught RangeError: Invalid array length 是一个相对常见的错误,通常发生在处理数组时提供了无效的长度值。这个错误可能由多种原因引起,本文将深入探讨此错误的…

LCP167 两数之和II--输入有序数组[leetcode-5]

LCP167 两数之和II–输入有序数组 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 <…

Redis(day 2)

一、常用指令 哈希Hash kv模式不变&#xff0c;但v是一个键值对 &#xff08;1&#xff09;hset、hget命令用于为哈希表中的字段赋值 。 &#xff08;2&#xff09;hmset、hmget 同时将多个field-value对设置到哈希表中。会覆盖哈希表中已存在的字段。 &#xff08;3&…

AI在医学领域:通过声纹特征来预测血糖水平

糖尿病代谢紊乱&#xff08;DM&#xff09;是一种以血糖水平异常为特征的代谢性疾病&#xff0c;其表现为高血糖&#xff08;≥230 mg/dL&#xff09;或低血糖&#xff08;<65 mg/dL&#xff09;。该病导致胰岛素产生或作用受损&#xff0c;胰岛素作为调节葡萄糖稳态的关键激…

20 动态内存管理

目录 一、为什么要有动态内存管理 二、malloc 和 free &#xff08;一&#xff09;malloc &#xff08;二&#xff09;free 三、calloc 和 realloc &#xff08;一&#xff09;calloc &#xff08;二&#xff09;realloc 四、常见的动态内存错误 &#xff08;一&#…

【初阶数据结构】顺序表与链表的比较(附题)

目录 一、顺序表和链表的区别&#xff08;其他链表存在缺陷&#xff0c;比较意义不大&#xff0c;这里用带头双向循环链表与顺序表进行比较&#xff09; 1.1插入、扩容与随机访问 二、缓存利用率的比较 2.1前置知识 详解及补充知识&#xff08;本文仅为比较顺序表及链表&am…

照片怎么转jpg格式?这些照片格式转换方法简单又高效

图片已成为我们日常生活与工作中不可或缺的一部分。然而&#xff0c;面对多种多样的图片格式&#xff0c;如何高效地将它们转换为最常用的JPG格式&#xff0c;成为了许多人面临的难题。下面给大家分享常用的几种照片格式转换方法&#xff0c;一起来了解下吧。 方法一&#xff1…

数据结构之树体系:二叉树、平衡二叉树、红黑树、AVL树、B树、B+树、最小生成树、哈夫曼树、决策树、LSM树、后缀树、R树

概述 数据结构与算法 二叉树 其中每个结点都不能有多于两个子结点&#xff1a; 满二叉树&#xff1a;若设二叉树的高度为 h h h&#xff0c;除第 h h h层外&#xff0c;其它各层(1&#xff5e;h-1) 的结点数都达到最大个数&#xff0c;最后一层都是叶子结点&#xff0c;且叶…

CICD持续集成持续交付部署

一、CICD概念 1、什么是CI/CD&#xff1f; 通俗来说就是启动一个服务&#xff0c;能够监听代码变化&#xff0c;然后自动执行构建、测试、打包、发布等流程&#xff1b; 2、CI 持续集成 指在开发人员频繁地提交新代码&#xff0c;都会自动执行构建、测试。根据测试结果&…

WPS回应“崩了”:提供15天会员补偿,另有新羊毛,你还不来薅?

近期&#xff0c;“WPS崩了”这一话题在时隔两个月后&#xff0c;再次因多名用户反馈软件使用问题而登上微博热搜。 WPS官方微博随后发布消息称&#xff0c;经过工程师的紧急修复&#xff0c;WPS服务已经恢复正常。 为了补偿用户&#xff0c;在8月22日0点至24点期间&#xff…

视频插帧—— RIFE 和 IFNet 的机制和应用

介绍 最近&#xff0c;数字和模拟技术开始加速融合。我们生活在一个人工智能技术能够显著提高质量的时代&#xff0c;只要模拟材料能够数字化。 例如&#xff0c;讨论中涉及到的纸艺软件&#xff0c;纸龙的移动模型被时间锁定&#xff0c;以大约 3 fps&#xff08;每秒帧数&a…

vm 虚拟机无法调用摄像头(亲测有效)

-- 前言1 报错说明1.1 opencv调用摄像头失败&#xff0c;画面窗口无法显示1.2 选择连接摄像头出现失败&#xff1a;桌面右下角出现【USB 设备“Acer Integrated RGB Camera"的连接失败】连接摄像头方法 2 解决方法步骤一步骤二步骤三 补充 前言 网上找的很多方法都是无效…

2024年游泳耳机哪个牌子好?四大热门游泳耳机多维测评盘点!

游泳不仅是夏日里最受欢迎的消暑方式&#xff0c;也是全年无休的一项全身性运动。在水中畅游时&#xff0c;若能伴随着喜爱的音乐&#xff0c;无疑能让体验更上一层楼。近年来&#xff0c;随着骨传导技术和防水材料的进步&#xff0c;游泳耳机已经成为许多游泳爱好者的必备装备…

网络编程,网络协议,UDP编程

网络&#xff1a; 1.协议&#xff1a;通信双方约定的一套标准 2.国际网络通信协议标准&#xff1a; 1.OSI协议&#xff1a; 应用层 发送的数据内容 表示层 数据是否加密 会话层 是否建立会话连接 传输层 …

electron仿微信,新建贴合窗口

说明 在写electron项目时&#xff0c;只有一个主窗口不足以满足需求&#xff0c;我们通常还会打开很多个窗口。 怎么打开一个子窗口像微信的聊天界面一样&#xff0c;全贴合在一起&#xff0c;看起来像一个整体呢&#xff1a; 分析 这个窗口有点像element ui中的抽屉(drawe…

回归预测|基于北方苍鹰优化NGO-Transformer-BiLSTM组合模型的数据预测Matlab程序多特征输入单输出

回归预测|基于北方苍鹰优化NGO-Transformer-BiLSTM组合模型的数据预测Matlab程序多特征输入单输出 文章目录 前言回归预测|基于北方苍鹰优化NGO-Transformer-BiLSTM组合模型的数据预测Matlab程序多特征输入单输出 一、NGO-Transformer-BiLSTM模型回归预测&#xff1a;NGO-Trans…

VUE学习笔记 2

条件渲染 v-if : 若不频繁切换&#xff0c;会删除DOM节点&#xff0c;再重复添加&#xff1b; template只能配合v-if v-show: 适用于频繁切换&#xff0c;动态变换但不删除DOM节点 列表渲染 方式&#xff1a; v-for"p in person" :key"yyy" 遍历数组…

详讲C#中如何存储当前项目的设置-超级简单省事

我们在编写软件的时候总有一些配置数据需要保存&#xff0c;比如用户选择的偏好设置&#xff0c;又如软件所用到的数据库文件等。我们有很多中方式都可以保存&#xff0c;比如直接保存在某个文本文件&#xff0c;或者ini文件中&#xff0c;其实最简单的办法是保存在项目的资源文…

File的常见成员方法(创建,删除)

一.File的常见成员方法&#xff08;创建&#xff0c;删除&#xff09;&#xff1a; 二.方法的代码实现&#xff1a; 1.createNewFile方法->创建一个新的空的文件&#xff1a; 如上图直接调用createNewFile方法会报错&#xff0c;处理方案如下&#xff1a; 本例选择第一个&a…