sktime Estimator Overview 交互式检索表:基于标签系统与注册表的估计器查找指南
2026/9/15 23:03:43 网站建设 项目流程

sktime Estimator Overview 交互式检索表:基于标签系统与注册表的估计器查找指南

【免费下载链接】sktimeA unified framework for machine learning with time series项目地址: https://gitcode.com/GitHub_Trending/sk/sktime

导读

sktime是一个面向时间序列机器学习的统一框架,内置数百个预测、分类、聚类、异常检测、变换等估计器。面对如此庞大的算法库,如何快速找到满足特定需求的估计器(例如"支持概率预测的 forecaster"或"支持逆变换的 transformer")是一个现实痛点。本文基于仓库中的 docs/source/estimator_overview.md 文档,系统讲解 sktime 官方提供的 Estimator Overview 交互式检索表:你将掌握它的搜索、类型筛选、标签勾选三大交互机制,理解其底层数据来源(all_estimators注册表与标签系统),并学会在 Python 环境中用同样基于标签的 API 做可编程的估计器检索。


一、Estimator Overview 页面是什么

sktime官方文档中内置了一个"可搜索、可筛选、自动更新"的估计器总览表页面(页面源码即docs/source/estimator_overview.md)。它的设计目标非常明确:让用户不用翻阅分散的 API 文档,就能按属性(property)一次性检索所有估计器

该页面由三块核心交互组件组成:

  1. 搜索框(Search the table ...):在表格上做子串(substring)匹配,输入任意关键词即可按行过滤;
  2. 类型下拉菜单(dropdown):按 scitype(估计器的科学类型)筛选,例如只显示 Forecaster 或 Classifier;
  3. 标签复选框(Check to Show Tags):选定某个类型后,勾选感兴趣的 tag(如capability:pred_intpython_dependencies),表格列随即动态增加对应标签列。

这三者的组合效果是:"类型 + 标签"联合过滤 + "关键词"子串搜索,让用户能够回答诸如"哪些预测器支持外生变量且允许缺失值?"这类精确的检索问题。

页面在文档树中的引用方式也可在 docs/source/index.rst 与 docs/source/users.rst 中看到(均通过.. button-ref:: estimator_overview将检索页作为文档入口按钮),同时全部 API 参考页(如 api_reference/forecasting.rst、api_reference/classification.rst)顶部都挂有指向该页的Estimator Search Page链接,说明它承担着"整个文档体系的估计器检索门户"角色。

上图为 estimator 检索页的界面结构:搜索框、"Forecaster"类型下拉菜单、标签复选框以及带标签列的动态表格。

二、交互机制逐项拆解

2.1 搜索框:子串过滤

页面顶部的搜索框绑定了keyup事件,输入内容被转为小写后与表格每行textContentindexOf子串匹配,命中的行显示、未命中的行隐藏。这是纯前端的即时过滤,无需刷新页面。

2.2 类型下拉菜单:11 种 scitype

下拉菜单中的选项对应 sktime 的 11 种估计器科学类型(scitype):

下拉选项含义
ALL显示全部估计器
Aligner时间序列对齐器
Classifier时间序列分类器
Clusterer时间序列聚类器
Detector异常/变点检测器
Distance/Kernel成对距离/核(面板变换)
Forecaster预测器
Metric性能度量
Param.Estimator参数估计器
Regressor时间序列回归器
Splitter切分器
Transformer变换器

选择某个类型后,页面会从本地缓存的 JSON 数据库中过滤出该类型对应的估计器记录,并读取该类型预定义的标签集合来生成复选框。

2.3 标签复选框:动态列

勾选标签后,表格会重新渲染:表头插入所选标签列(标签名中的:被替换为<br>以便换行显示,例如capability:pred_int显示为两行的capability/pred_int),每个单元格填入对应估计器在该标签上的取值(True/False或其他值)。

值得注意的是,每种类型的可选标签集合是独立维护的。以 docs/source/conf.py 中的tags_by_object_type字典为准,例如:

  • forecaster类型提供capability:categorical_in_Xcapability:insamplecapability:pred_intcapability:pred_int:insamplecapability:missing_valuescapability:exogenouscapability:multivariaterequires-fh-in-fitX-y-must-have-same-indexpython_dependenciesauthorsmaintainers
  • transformer类型提供scitype:transform-inputscitype:transform-outputscitype:transform-labelscapability:multivariatecapability:inverse_transformcapability:missing_valuescapability:missing_values:removescapability:unequal_lengthfit_is_emptyrequires_Xrequires_y等;
  • classifier类型提供capability:multivariatecapability:predict_probacapability:multioutputcapability:unequal_lengthcapability:feature_importancecapability:train_estimatecapability:contractable等。

2.4 状态保持:URL hash 与浏览器缓存

页面实现中还包含两个易被忽略但实用的细节:

  • URL hash 持久化:每次筛选后,页面会把filtertags写入 URL hash(例如#filter=forecaster&tags={...}),并在加载时通过initTableFromURL()还原,方便分享带筛选状态的链接;
  • sessionStorage 缓存:JSON 数据库和"ALL"全表 HTML 会被缓存到sessionStorage,避免同会话内重复请求。

三、数据从哪来:构建期的自动生成管线

Estimator Overview 页面的表格数据并非手工维护,而是在 Sphinx 文档构建时自动生成的。生成逻辑位于 docs/source/conf.py 的_make_estimator_overview函数,它通过app.connect("builder-inited", _make_estimator_overview)在构建初始化阶段被调用。

3.1 核心数据源:all_estimators

生成管线的主循环是for obj_name, obj_class in all_estimators():,即调用sktime.registry.all_estimators遍历仓库中所有继承自BaseObject的估计器类。这一 API 的完整实现位于 sktime/registry/_lookup.py,它递归扫描sktime包,并显式忽略testssetupcontribbenchmarkingutilslibs等模块目录。

3.2 逐条记录的字段组装

对每个估计器类,构建脚本提取以下信息组成一行记录:

字段来源
Class Name类名,并通过obj_class._generate_doc_link()生成指向类文档的超链接
Estimator Type类的object_type标签,取"既在标签集中、又在菜单中出现"的第一个类型
Authors / Maintainers类的authorsmaintainers类标签(get_class_tag获取,默认回退为 "sktime developers")
Dependenciespython_dependencies类标签,列表长度为 1 时扁平化为字符串
Import Path从类的完整模块路径中删除含包名的倒数第二段后拼接而成
Tagstags_by_object_type为该类每个可展示类型收集的标签值字典

其中作者信息会被处理成 HTML 链接(_process_author_info),特殊作者串"sktime developers"会被链接到团队页面。

3.3 两份静态产物的生成

管线最终写出两份文件:

  • _static/estimator_overview_db.json:用df.to_json(records)生成的结构化 JSON 数据库,供前端按类型筛选并渲染带标签列的动态表格;
  • _static/table_all.htmldf.to_html()生成的 "ALL" 全量表(仅含 Class Name、Estimator Type、Authors、Maintainers、Dependencies 五列),作为无筛选时的即时渲染结果。

页面脚本通过fetch("_static/estimator_overview_db.json")fetch('_static/table_all.html')拉取这两份资源(见 docs/source/estimator_overview.md)。这也意味着:每次文档构建,检索表都会随仓库中估计器集合的变化自动更新

四、支撑一切的核心:标签(Tags)系统

Estimator Overview 页面之所以能按属性检索,底层依赖的是 sktime 的标签系统。官方对标签的完整说明见 docs/source/api_reference/tags.rst,其要点如下:

  • 每个 sktime 一等对象都带一组标签,标签是键值对(key 为字符串),描述对象的属性、能力或控制其行为;
  • 例如 forecaster 的标签"capability:pred_int": True表示该预测器能产出概率预测,用户即可借此过滤出所有支持概率预测的预测器;
  • 标签可分为实例标签与类标签:对象实例的标签可能依赖超参数(用get_tags获取);类的标签是静态的(用get_class_tags获取),在能力类标签上默认取"最具能力"的值;
  • 标签按适用对象分组:通用/打包标签(object_typeauthorsmaintainerspython_dependencies等)、forecaster 标签、面板估计器(分类/回归/聚类)标签、变换器标签、成对变换器标签、检测器标签、度量标签、对齐器标签、参数估计器标签、切分器标签,以及供扩展模板与 CI 使用的开发者标签。

从源码结构看,标签的权威注册表是 sktime/registry/_tags.py 中的ESTIMATOR_TAG_REGISTER,而 sktime/registry/_lookup.py 的all_tags工具则负责按 scitype 列出可用标签(返回名、适用 scitype、取值类型与说明)。

五、进阶:在 Python 中做等价的编程式检索

Estimator Overview 页面是 Web 端的检索入口;而在 Python 环境中,同一套"按类型 + 标签"的检索逻辑由sktime.registry.all_estimators提供(参见 docs/source/api_reference/tags.rst 的指引)。其关键参数如下(详见 sktime/registry/_lookup.py):

参数默认值作用
estimator_typesNone按 scitype 字符串(如"forecaster""classifier")过滤,支持字符串或字符串列表
filter_tagsNone标签过滤字典,键为标签名、值为取值或取值集合;多个键值对之间是"与"关系
exclude_estimatorsNone要排除的估计器名称
return_namesTrue是否在返回中包含估计器名称
as_dataframeFalse是否以pandas.DataFrame形式返回
return_tagsNone为每个估计器额外返回指定标签的取值
suppress_import_stdoutTrue导入时是否抑制标准输出

filter_tags的匹配语义(见 sktime/registry/_lookup.py):若类没有该标签则被排除;字符串值要求精确匹配标签值;列表值要求包含于标签值;re.Pattern则对标签值做fullmatch正则匹配。

常见用法示例:

from sktime.registry import all_estimators # 1. 返回全部估计器的 DataFrame(含名称、类型、作者、依赖等元信息) all_estimators(as_dataframe=True) # 2. 返回所有预测器 all_estimators("forecaster") # 3. 返回支持缺失值处理的预测器(等价于 Web 页勾选 capability:missing_values) all_estimators("forecaster", filter_tags={"capability:missing_values": True}) # 4. 额外取回每个预测器的概率预测能力标签 all_estimators("forecaster", return_tags=["capability:pred_int"])

需要说明的是:all_estimators会实际导入所有被扫描到的类,因此在大型仓库上首次调用可能耗时,这是该 API 与 Web 端"预生成 JSON + 前端过滤"在设计上的不同取舍——Web 端把同一份遍历结果提前烘焙成静态资源,从而换取页面加载的即时性。

六、关于页面实现的几点说明

从源码看,docs/source/estimator_overview.md 是一个内嵌了样式与脚本的交互式页面:

  • 页面顶部的<style>块将文章容器宽度放宽至100em、隐藏次级侧边栏,为宽表格腾出空间;
  • 表格列宽设置为15vw并启用word-break,以容纳标签列;
  • 脚本中的filterTablerenderTablepopulateCheckboxes等函数共同实现筛选、渲染与复选框填充逻辑;
  • 文件末尾有一段被注释掉的{include}指令,说明历史上曾考虑过用include方式嵌入预渲染 HTML,最终改为当前"JSON 数据库 + 前端渲染"的方案。

另外,仓库根目录还有一个 ESTIMATOR_OVERVIEW.md,它仅是旧版链接的兼容占位页(内容为指向 API 参考与表格页的跳转说明),真正承载检索功能的页面是本文所讲的docs/source/estimator_overview.md

七、使用建议与总结

  • 找算法时先查表:当你需要一个"支持外生变量的多变量预测器"或"可逆变换的变换器"时,直接在 Estimator Overview 页面选择类型、勾选能力标签,即可获得与filter_tags语义一致的候选清单,且每条记录的类名都带有跳转到对应 API 文档的链接;
  • Web 端与 Python 端配合:页面适合快速浏览与分享(URL hash 可保存筛选状态),编程式检索适合在脚本中批量筛选、批量实验;
  • 理解其自动更新机制:检索表数据随 Sphinx 构建自动重生成,由all_estimators注册表驱动,因此它始终与仓库当前版本保持一致,无需人工维护表格内容。

总而言之,Estimator Overview 页面是进入 sktime 数百个估计器的"结构化门户":向上承接统一的 scitype 分类与标签规范,向下对接sktime.registry.all_estimators注册表,是理解整个 sktime 算法生态组织方式的最佳起点。

【免费下载链接】sktimeA unified framework for machine learning with time series项目地址: https://gitcode.com/GitHub_Trending/sk/sktime

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询