XGBoost学习笔记

本文介绍了XGBoost模型的学习过程,包括Python库安装、参数说明及优化。重点讨论了如何通过调整参数如eta、gamma、max_depth、min_child_weight等防止过拟合,并讲解了如何处理数据集的不平衡问题,如使用DMatrix的权重设置和scale_pos_weight参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XGBoost是Kaggle上非常火的一种模型,很多项目用它拿到了第一。

python库安装

python的pip上还没有1,mac上略有麻烦,参见Installing XGBoost on Mac OSX

Mac上,CC, CXX的version应该是7

export CC = gcc-7
export CXX = g++-7

参数的说明

对于xgboost,有很多参数可以设置,这些参数的详细说明在这里,有几个重要的如下:

  • 一般参数,设置选择哪个booster算法
    • booster: 可以选择gbtree,dart和gblinear。gbtree, dart使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree
    • silent: 取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0
    • nthread: XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
    • num_pbuffer: 预测缓冲区大小,通常设置为训练实例的数目。缓冲用于保存最后一步提升的预测结果,无需人为设置。
    • num_feature: Boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,无需人为设置。
  • 使用的booster算法的参数

    • gbtree参数设置

      • eta(学习率): 为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3。取值范围为:[0,1] 在 Scikit-Learn中,这个参数名是learning_rate
      • gamma(最小扩展损失): 决定树的节点是否扩展为区域的最小损失。如多一个节点split的时候,对于loss function带来的降低量大于gamma时,则进行split。值越大,算法越保守。==需要调参==。缺省值是0,取值范围是[0,∞]
      • max_depth:树的深度,越大模型越复杂,也越可能过拟合。0表示没限制,默认值是6。==需要调参==,一般在3到10之间。
      • min_child_weight: 子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。值越大,算法越保守conservative,但太大会导致模型欠拟合,==需要调参==。默认值是1,取值范围为:[0,∞]
      • max_delta_step: 我们允许每个树的权重被估计的最大值。如果它的值被设置为0,意味着没有约束;如果它被设置为一个正值,它能够使得更新的步骤更加保守。通常无需设置该参数,但是如果在逻辑回归中极其不平衡时它可能会有帮助。把它范围设置为1-10之间也许能控制更新。默认值是0,取值范围为:[0,∞]
      • subsample: 用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的从整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合,但取值太小可能欠拟合。一般在[0.5, 1]之间比较合适,允许的取值范围为:(0,1]
      • colsample_bytree: 在建立树时对特征采样的比例。缺省值为1,取值范围为:(0,1]
      • colsample_bylevel: 在建立树时,split时,对于每一层的特征采样比例。缺省值为1,取值范围为:(0,1]
      • alpha: L1 正则的惩罚系数,值越大越不容易过拟合,缺省值为0,增加这个值会让算法更保守。在 Scikit-Learn中,这个参数名是reg_alpha
      • lambda: L2 正则的惩罚系数,值越大越不容易过拟合,缺省值为1,增加这个值会让算法更保守。在 Scikit-Learn中,这个参数名是reg_lambda
      • scale_pos_weight: 当分类很不平衡的时候,把它设置为正值,可以加快收敛。默认值是1。

      还有很多,感觉不是特别重要,就没写上来

  • 学习任务的参数

    • objective: 定义学习目标,可选的目标函数如下:

      • “reg:linear” —— 线性回归。
      • “reg:logistic”—— 逻辑回归。
      • “binary:logistic”—— 二分类的逻辑回归问题,输出为概率。
      • “binary:logitraw”—— 二分类的逻辑回归问题,输出的结果为逻辑变换前的分值。
      • “count:poisson”—— 计数问题的poisson泊松回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7。(used to safeguard optimization)
      • “multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数),返回的是预测的分类
      • “multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。每行数据表示样本所属于每个类别的概率。
      • “rank:pairwise” –设置XGBoost使用最小化pairwise损失做排名。
      • “reg:gamma”
      • “reg:tweedie”
    • base_score: 所有实例的初始化预测分数,全局的偏差值; 只要经历足够多的迭代次数,这个值对最终结果将不会有太大的影响。初始化为0.5

    • eval_metric: 校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(rmse for regression, and error for classification, mean average precision for ranking),用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是dict,否则后面的参数会覆盖之前。参数选择有

以下是关于机器学习的一些重要知识点和学习笔记,涵盖了数据预处理、学习器类型、激活函数等内容,供参考学习: ### 数据预处理 在机器学习中,数据预处理是特征工程的重要组成部分,它包括缺失值处理、特征缩放、编码分类变量等步骤。这些步骤有助于提升模型的性能和稳定性。例如,在缺失值处理中,可以通过删除缺失值较多的特征或用均值、中位数等方法填充缺失值。特征缩放则可以通过标准化(Standardization)或归一化(Normalization)实现,以确保不同特征在相同尺度上进行比较和处理[^1]。 ### 学习器类型 机器学习的学习器可以分为有监督学习和无监督学习两类。有监督学习中,集成学习是一种常用方法,它通过结合多个较弱的模型来提高预测性能。例如,随机森林通过装袋法(Bagging)组合多个决策树的预测结果,而XGBoost则通过提升法(Boosting)逐步优化模型的预测能力。无监督学习则用于没有标签数据的场景,例如聚类分析和降维技术[^2]。 ### 学习器预测与评估 许多学习器会为测试样本生成一个实值或概率预测,并通过与分类阈值的比较来决定最终的类别。例如,神经网络通常会输出一个概率值,该值与阈值比较后决定样本属于正类还是反类。这种预测值的准确性直接影响学习器的泛化能力。因此,在模型评估中,选择合适的分类阈值以及衡量预测性能的指标(如准确率、召回率、F1分数等)非常重要[^3]。 ### 激活函数 在神经网络中,激活函数的选择对模型性能有着重要影响。Sigmoid函数曾被广泛使用,但它存在输出不是零中心(zero-centered)的问题,这可能会影响模型的收敛速度。tanh函数解决了Sigmoid函数的零中心问题,但它仍然面临梯度消失(gradient vanishing)和幂运算效率低的问题。因此,在现代神经网络中,ReLU(Rectified Linear Unit)及其变种(如Leaky ReLU)通常被优先考虑,因为它们能够有效缓解梯度消失问题并加速训练过程[^4]。 ### 示例代码:特征缩放 以下是一个使用Python中`scikit-learn`库进行特征标准化的示例代码: ```python from sklearn.preprocessing import StandardScaler import numpy as np # 假设有一个数据集X X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 初始化标准化器 scaler = StandardScaler() # 对数据进行标准化 X_scaled = scaler.fit_transform(X) print(X_scaled) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值