【发布时间】:2021-08-31 16:18:12
【问题描述】:
我很好奇为什么xgBoost 不支持像sklearn 中经典的GB 分类器那样的min_samples_leaf 参数?如果我确实想控制最小值。单个叶子上的样本数,xgboost 中有什么解决方法吗?
【问题讨论】:
标签: python scikit-learn xgboost
我很好奇为什么xgBoost 不支持像sklearn 中经典的GB 分类器那样的min_samples_leaf 参数?如果我确实想控制最小值。单个叶子上的样本数,xgboost 中有什么解决方法吗?
【问题讨论】:
标签: python scikit-learn xgboost
您可以尝试使用min_child_weight。根据文档,这个参数:
孩子需要的实例权重(粗麻布)的最小总和。
对于具有 MSE 损失的回归问题,实例权重的总和将导致每个叶节点的样本最少,因为 MSE 损失的二阶导数等于 1。
对于分类问题,它会产生一个不同的度量来表征叶子节点中样本的纯度(例如,对于二元分类,如果一个类的一部分样本严重支配叶子中的其他类——那里无需进一步拆分)。
我不知道没有min_samples_leaf 参数的具体原因。我猜它对min_child_weight的干扰会给用户带来一些设计挑战和困惑。
【讨论】:
min_samples_leaf 比min_child_weight 直观得多!
xgboost 有min_child_weight,但在普通回归任务之外确实不同于最小样本。我不能说为什么不包括附加参数。请注意,尽管在二进制分类中,logloss hessian 为p(1-p),介于 0 和 1/4 之间,对于非常自信的预测,值接近于零;所以实际上设置min_child_weight 需要在每个叶子中设置许多当前不确定的行,这可能足够接近(或优于!)设置最小行数。
【讨论】: