设置sklearn梯度提升分类器的自定义损失

时间:2019-06-20 08:46:05

标签: python machine-learning scikit-learn

Sklearn梯度增强分类器接受偏差和指数损失,如herehere所述。但是,我们能否传递自定义损失而不是其预定义损失(“偏离”或“指数”损失)。


关于stackoverflow的类似问题以及为什么它们没有回答我的问题:

我已经找到this question,它看起来最相关。 但是,它根本没有涵盖我的问题,因为它没有讨论如何将自定义损失传递给GradientBoostingClassifier 。

this question似乎也很相关,但是,一旦定义了一个类(如答案中所述),答案就无法解释,如何将其作为参数传递给GradientBoostingClassifier。

1 个答案:

答案 0 :(得分:1)

为此,您应该创建一个“ BaseGradientBoosting”子类,并同时创建第一个子类和GradientBoostingClassifier类(在分类情况下)。在第一类中,您应该在super().__init__中传递自定义损失函数的名称,在第二个子类中,您可以将自定义损失函数的名称传递为_SUPPORTED_LOSS

此外,要在SKlearn梯度增强中关闭ValueError的{​​{1}},您必须重写此功能,或考虑此功能的例外情况。

例如:

_check_params

请记住,* args是BaseGradientBoosting的所有参数。

嗯,这是很多工作,但是我找不到更好的解决方案。希望对您有所帮助。

P.S。顺便说一句,您是对的,提到的链接无法回答您的问题。