客观参数在python中是如何工作的';什么是xgboost?

客观参数在python中是如何工作的';什么是xgboost?,python,machine-learning,xgboost,Python,Machine Learning,Xgboost,。这很好,因为对于我的特殊任务,我有一个非常具体的损失函数,我可以计算预测的一阶和二阶导数 需要明确的是,机器学习任务的目标函数通常定义为obj=损失+复杂性 但是,我想保留标准复杂性惩罚,由Omega(f)=gamma*T+(1/2)*lambda*\sum{j=1}^T(w^2_j)给出,保持不变。这里,T,gamma,lambda,w是树中的叶数,在树的叶节点上进一步划分所需的最小损失减少,分别是关于每个叶的权重和权重向量的L2正则化项 我的问题是,使用,我是否可以将损失函数定义为obje

。这很好,因为对于我的特殊任务,我有一个非常具体的损失函数,我可以计算预测的一阶和二阶导数

需要明确的是,机器学习任务的目标函数通常定义为obj=损失+复杂性

但是,我想保留标准复杂性惩罚,由
Omega(f)=gamma*T+(1/2)*lambda*\sum{j=1}^T(w^2_j)
给出,保持不变。这里,
T,gamma,lambda,w
是树中的叶数,在树的叶节点上进一步划分所需的最小损失减少,分别是关于每个叶的权重和权重向量的L2正则化项

我的问题是,使用,我是否可以将损失函数定义为
objective
参数的输入,并让xgboost库处理复杂性项?这很好,因为我不想改变复杂性项或计算其导数

我的猜测是,不幸的是,我们还必须定义复杂性项,因为根据定义,目标函数是损失和复杂性的线性组合

注意:如果我们查看XGBClassifier的注释

from xgboost import XGBClassifier
help(XGBClassifier)
...
|  objective : string or callable
|      Specify the learning task and the corresponding learning objective or
|      a custom objective function to be used (see note below).
...
...
|  Note
|  ----
|  A custom objective function can be provided for the ``objective``
|  parameter. In this case, it should have the signature
|  ``objective(y_true, y_pred) -> grad, hess``:
|  
|  y_true: array_like of shape [n_samples]
|      The target values
|  y_pred: array_like of shape [n_samples]
|      The predicted values
|  
|  grad: array_like of shape [n_samples]
|      The value of the gradient for each sample point.
|  hess: array_like of shape [n_samples]
|      The value of the second derivative for each sample point

我们看到,自定义
目标
函数的唯一输入应该是
y_pred
y_true
。所以我不明白,如果我们确实需要定义复杂性项,那么在自定义目标函数中如何定义复杂性参数(
t,gamma,lambda,w
)。

您确定需要处理复杂性项吗?文档在任何地方都没有提到它,您的comlexity定义中的第二个术语实际上是L2正则化,只要您设置相应的输入参数(
reg_lambda
),XGBoost就可以在内部处理它,但如果您想添加L1术语,也有一种方法)我认为这是xgboost中笨拙的术语。设置自定义“目标”函数时,您正在设置自定义损失函数,xgboost随后将其标准正则化添加到损失函数中。如果不是这种情况,如果您设置了一个没有正则化的损失函数,那么您的训练过程不应该以任何方式对参数(如reg_lambda)敏感。通过使用自定义损失函数快速检查我的xgboost笔记本,可以发现提升reg_lambda会严重影响列车时间,因此它一定在做些什么。