如何在sktime项目中实现兼容的评估器

如何在sktime项目中实现兼容的评估器

sktime A unified framework for machine learning with time series sktime 项目地址: https://gitcode.com/gh_mirrors/skt/sktime

本文将详细介绍如何在sktime项目中实现兼容的评估器(estimator),包括实现步骤、测试方法以及贡献到主项目的额外要求。sktime是一个用于时间序列分析的Python库,提供了统一的时间序列机器学习接口。

评估器实现基础

评估器类型识别

首先需要确定评估器的科学类型(scitype),即它解决的具体学习任务类型。sktime按模块组织不同的学习任务,常见类型包括:

  • 预测器(forecaster):解决时间序列预测问题
  • 时间序列分类器(time series classifier)
  • 转换器(transformer):用于数据转换

评估器应放在对应的模块中。如果不确定类型,可以检查相关文献或咨询社区。

使用扩展模板

sktime为每种评估器类型提供了扩展模板,位于extension_templates目录。模板采用"模板方法"设计模式:

  1. 公共接口由基类定义(如BaseForecaster)
  2. 具体实现通过私有方法完成(如_fit和_predict)

这与scikit-learn不同,避免了重复的样板代码。

实现步骤详解

1. 准备工作

  1. 复制对应类型的模板到目标位置
  2. 按模板中的todo提示逐步完成实现

2. 关键实现环节

参数初始化(init)

  • 参数应写入self且不应修改
  • 如果参数是其他评估器,应使用sklearn.clone克隆

标签设置(tags)

  • 能力标签:如是否处理缺失值
  • 数据类型标签:如X_inner_mtype指定内部方法接收的数据类型
  • 可在datatypes.MTYPE_REGISTER中找到类型字符串

内部方法实现

  • 如_fit、_predict等
  • 输入数据格式由标签保证
  • 应避免副作用,不修改参数

测试参数(get_test_params)

  • 应覆盖主要功能分支
  • 保持测试运行时间在秒级

3. 文档要求

  • 完善模块和评估器的docstring
  • 参数确定后尽早编写文档
  • 文档可作为实现规范参考

接口一致性测试

使用check_estimator工具

这是测试接口兼容性的最简单方法:

from sktime.utils.estimator_checks import check_estimator
from sktime.forecasting.naive import NaiveForecaster
check_estimator(NaiveForecaster)

返回值为字典,包含测试结果("PASSED"或异常)。常用参数:

  • tests_to_run/tests_to_exclude:指定要运行/排除的测试
  • fixtures_to_run/fixtures_to_exclude:指定测试组合
  • raise_exceptions=True:直接抛出异常便于调试

测试工作流建议

  1. 全量运行找出失败测试
  2. 缩小范围到失败测试
  3. 启用异常查看堆栈
  4. 必要时使用调试器

在项目测试套件中运行

如果评估器将贡献到sktime主项目:

pytest -k "EstimatorName"

这会运行与该评估器相关的所有测试。

贡献到sktime的额外要求

将评估器贡献到主项目时还需:

  1. 符合文档标准
  2. 添加到API参考文档
  3. 作者添加到评估器的"authors"和"maintainers"标签
  4. 处理软依赖关系(如有)
  5. 确保通过完整测试套件
  6. 保持测试运行时间合理

对于依赖Cython的评估器:

  1. Cython代码应作为独立包发布
  2. 在sktime中提供接口
  3. 设置requires_cython和python_dependencies标签
  4. 完整测试应在独立包中完成

总结

实现sktime兼容评估器的关键点包括:正确识别类型、使用模板规范实现、充分测试接口兼容性。贡献到主项目时还需满足额外要求。遵循这些规范可以确保评估器与sktime生态系统良好集成。

对于实现细节有疑问时,可以参考现有评估器的实现或寻求社区帮助。良好的文档和测试是保证评估器质量的关键。

sktime A unified framework for machine learning with time series sktime 项目地址: https://gitcode.com/gh_mirrors/skt/sktime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧崧锟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值