为 sklearn 梯度增强分类器设置自定义损失

2024-03-04

Sklearn 梯度增强分类器接受偏差和指数损失,详见here https://scikit-learn.org/stable/modules/ensemble.html#gradient-boosting and here https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html。但是,我们可以传递自定义损失而不是预定义损失(“偏差”或“指数”损失)。


stackoverflow 上的类似问题以及为什么他们不回答我的问题:

我已经找到了这个问题 https://stackoverflow.com/questions/55076833/adjust-custom-loss-function-for-gradient-boosting-classification,这看起来最相关。But它根本没有涵盖我的问题,因为它没有讨论如何将自定义损失传递给 GradientBoostingClassifier.

Also 这个问题 https://stackoverflow.com/questions/40720878/customize-loss-function-sklearn看起来相关,but答案没有解释一旦定义了一个类(如答案中所述),如何将其作为参数传递给 GradientBoostingClassifier。


为此,您应该创建“的子类”基础梯度提升 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/_gb.py#L1269“以及第一个子类和 GradientBoostingClassifier(在分类情况下)类的子类。在第一个类中,您应该在super().__init__,在第二个子类中,您可以将自定义损失函数的名称作为_SUPPORTED_LOSS.

此外,要关闭ValueError of _check_params在 SKlearn 梯度提升中,您必须重写此函数,或者考虑此函数的例外。

例如:

class my_base_gradient_boost(BaseGradientBoosting, metaclass=ABCMeta):
    @abstractmethod
    def __init__(self, *args):
       super().__init__(loss='my_custom_loss', *other_args)

    def _check_params(self):
      try:
        super()._check_params()
      except ValueError as e:
        if str(e) == "Loss 'my_costum_loss' not supported. ":
            self.loss_ = self.my_costum_loss
        else:
            raise

class my_classifier(my_base_gradient_boost, GradientBoostingClassifier):

    _SUPPORTED_LOSS = ('my_costum_loss')

    @_deprecate_positional_args           
    def __init__(self, *args):
        super().__init__(*args)

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

嗯,这是很多工作,但我找不到更好的解决方案来做到这一点。我希望这有帮助。

附:顺便说一句,你是对的,所提到的链接并不能回答你的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 sklearn 梯度增强分类器设置自定义损失 的相关文章

随机推荐

  • 适用于 Safari 浏览器的类似 Firebug 的插件

    Safari 是否有一个开发工具插件 就像 Firefox 的 Firebug 插件一样 Firebug 很棒 但 Safari 提供了自己的内置开发工具 如果您还没有尝试过 Safari 的开发工具包 请转到 Safari gt 首选项
  • Vim 的 Clang 完整版

    我复制了clang complete vim插件 但是当我输入 在一些变量之后 它说 未找到模式 我搜索了这个问题 有人说我应该配置g clang complete auto and g clang complete copen 我怎样才能
  • Swift 从对象数组映射到异步函数数组并等待它们全部

    我刚刚更新到 Xcode 13 2 1 现在可以访问异步等待 并且我正在尝试找到可以从合并 转换 为异步等待的地方 我想实现以下目标 给定一个像 的类型 struct Person let name String func fetchAva
  • React Native 地图:在react-native-maps 中使用自定义标记时,标记图像不显示

    我在用着react native maps但我遇到了一个问题 经过大量谷歌搜索后没有答案让我在这里问它 我正在尝试使用自定义标记作为地图中的标记 如下图所示 当我搜索时我发现需要使用自定义标记来完成创客的设计 然后我创建了一个自定义标记组件
  • 如何将 Jsoup(Java html 解析器)中生成的文档转换为字符串

    我有一个用 jsoup 制作的文档 如下所示 Document doc Jsoup connect http en wikipedia org get 我该如何转换它doc成字符串 你有没有尝试过 Document doc Jsoup co
  • JavaFX RotateTransition 无限期停止

    下面代码的问题在于两个动画之间有大约半秒的暂停 我希望节点不断旋转 RotateTransition rt new RotateTransition Duration seconds 2 syncNode rt setFromAngle 0
  • 如何停止反应原生动画

    我试图在本机反应中停止动画 但它不起作用 我尝试这样做停止动画方法 https facebook github io react native docs animated html stopanimation 这是我的代码 construc
  • 如何使用 Spark 查找中位数和分位数

    我怎样才能找到一个中位数RDD使用分布式方法 IPython 和 Spark 计算整数 这RDD大约有 700 000 个元素 因此太大而无法收集和查找中位数 这个问题与这个问题类似 如何使用 Apache Spark 计算精确中位数 ht
  • 如何在新窗口中打开链接?

    我有一个特定链接的点击处理程序 在其中我想做类似以下的事情 window location url 我需要这个才能在新窗口中实际打开网址 我该怎么做 您可以喜欢 window open url window name window sett
  • Java 并行流的性能影响

    使用的最佳实践是什么 stream parallel 例如 如果您有一堆阻塞 I O 调用 并且您想要检查是否 anyMatch 并行执行此操作似乎是明智的做法 示例代码 public boolean hasAnyRecentReferen
  • 在 C# 中删除继承对象的属性

    如果我有一个复杂的对象 我可以继承它并remove or ignore某些属性 如果你不在乎why我想这样做 请随意提交答案 如果您关心的话 可以阅读这个问题 https stackoverflow com questions 860786
  • 无法让 php exec 工作

    我已经为此奋斗了几个小时 但似乎无法解决 尝试了 exec shell exec 和 system 什么都不起作用 我有这个 exec usr bin php var www vhosts domain com httpdocs shell
  • 机器模式下mret和ret指令有什么区别?

    当RISC V核心工作在机器模式时 mret和ret指令有什么区别吗 ret is a pseudoinstruction which actually is a jalr instruction while mret is a real
  • 如何实例化相互依赖的类?

    我有一个PlayoffCreator类来创建季后赛比赛 这个类有一个Bracket生成括号结构的实例 该结构中的每个匹配都是一个Node 由该类的两个实例组成Element 然后PlayoffCreator经历每一个Node the Bra
  • 如何向pandas工具包代理添加会话记忆?

    我想添加一个ConversationBufferMemory to pandas dataframe agent但到目前为止我还没有成功 我尝试通过构造函数添加内存 create pandas dataframe agent llm df
  • HDFS 错误:只能复制到 0 个节点,而不是 1 个

    我在 EC2 中创建了一个 ubuntu 单节点 hadoop 集群 测试将简单文件上传到 hdfs 可以在 EC2 计算机上进行 但不能在 EC2 外部的计算机上进行 我可以通过远程计算机的 Web 界面浏览文件系统 它显示一个报告为正在
  • 我如何解码这个恶意软件 PHP 脚本? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我只是注意
  • 文本未出现在 XTS 图上

    我在使用 R 向时间序列数据图中添加一些文本时遇到问题xts 我已经制作了一个简单的问题示例 My text 命令似乎什么也没做 而我可以在图中添加一个点 我尝试尽可能使用默认值来保持代码简单 require quantmod fetch
  • intentService :为什么我的 onHandleIntent 从未被调用?

    我正在使用 android xml rpc 来安装服务器 为此 我正在使用intentService 唯一的问题是 当启动服务器类时 我的包含服务器的 onHandleIntent 永远不会被调用 我做了一些研究 发现有人有同样的问题 他设
  • 为 sklearn 梯度增强分类器设置自定义损失

    Sklearn 梯度增强分类器接受偏差和指数损失 详见here https scikit learn org stable modules ensemble html gradient boosting and here https sci