Sklearn梯度增强分类器接受偏差和指数损失,如here和here所述。但是,我们能否传递自定义损失而不是其预定义损失(“偏离”或“指数”损失)。
关于stackoverflow的类似问题以及为什么它们没有回答我的问题:
我已经找到this question,它看起来最相关。 但是,它根本没有涵盖我的问题,因为它没有讨论如何将自定义损失传递给GradientBoostingClassifier 。
this question似乎也很相关,但是,一旦定义了一个类(如答案中所述),答案就无法解释,如何将其作为参数传递给GradientBoostingClassifier。
答案 0 :(得分:1)
为此,您应该创建一个“ BaseGradientBoosting”子类,并同时创建第一个子类和GradientBoostingClassifier类(在分类情况下)。在第一类中,您应该在super().__init__
中传递自定义损失函数的名称,在第二个子类中,您可以将自定义损失函数的名称传递为_SUPPORTED_LOSS
。
此外,要在SKlearn梯度增强中关闭ValueError
的{{1}},您必须重写此功能,或考虑此功能的例外情况。
例如:
_check_params
请记住,* args是BaseGradientBoosting的所有参数。
嗯,这是很多工作,但是我找不到更好的解决方案。希望对您有所帮助。
P.S。顺便说一句,您是对的,提到的链接无法回答您的问题。