scikit-learn 开发者 API 重构:引入稳定中间层与测试基础设施升级

ADK Scikit-learn官方 / ADK编译 2024-12-12 5 分钟 51 次浏览
速览导读 / Summary

scikit-learn 官方宣布重构开发者 API,旨在解决第三方开发者依赖内部私有 API 导致的兼容性问题。新版本在公共 API 的严格向后兼容与内部 API 的高频变动之间,建立了一个新的稳定中间层。此次更新重点优化了测试基础设施,引入了更清晰的标签系统(Tags)和测试跳过机制,并发布了 `sklearn_compat` 包以辅助多版本适配。

API 层级 Developer API 新增稳定中间层,兼容公共与私有 API 特性
测试标签变更 废弃_xfail_checks 私有测试标签正式移除,统一至公开标签系统
兼容性工具 sklearn_compat 新增辅助包,支持多版本平滑迁移

Key Insights / 核心看点

  • 1 引入稳定的开发者 API 中间层,填补公共 API 与内部私有 API 之间的功能空白,降低第三方开发者的维护成本。
  • 2 重构测试基础设施,废弃 `_xfail_checks` 私有标签,采用标准化的 `__sklearn_tags__` 方法定义模型属性。
  • 3 发布 `sklearn_compat` 包,提供自动化的向后兼容性补丁,帮助开发者轻松应对 API 变更。
  • 4 优化测试流程,允许开发者通过 `expected_failed_checks` 参数直接指定预期失败的检查项,提升测试精准度。

scikit-learn 开发者 API 重构:构建稳定的第三方开发生态

在机器学习开源生态中,第三方开发者依赖 scikit-learn 构建自定义 Estimator 是常态。然而,scikit-learn 长期以来存在一个痛点:其公共 API (Public API) 对向后兼容性有着近乎苛刻的标准(通常需提前一年通知),而私有 API (Private API) 则因内部迭代频繁变动,导致基于私有 API 开发的第三方工具极易断裂。

为了解决这一矛盾,scikit-learn 团队决定在公共 API 与私有 API 之间,构建一个全新的开发者 API (Developer API)。这一中间层旨在提供比公共 API 更丰富的功能,同时保持比私有 API 更高的稳定性,通常只需一个发布周期(Release Cycle)的警告即可进行变更。

核心突破:测试基础设施与标签系统升级

在 1.6 版本中,团队重点重构了测试基础设施和 Estimator 标签系统,使开发者能更清晰地定义模型行为。

1. 新的标签系统 (__sklearn_tags__)

旧式的私有标签(如 _more_tags)已被标准化为公开的 __sklearn_tags__ 方法。开发者现在可以通过继承 BaseEstimator 和 ClassifierMixin,并实现 __sklearn_tags__ 来动态定义模型属性。

from sklearn.base import BaseEstimator, ClassifierMixin

class MyEstimator(ClassifierMixin, BaseEstimator):
    def __sklearn_tags__(self):
        tags = super().__sklearn_tags__()
        # 设置模型为非确定性
        tags.non_deterministic = True
        return tags

2. 测试跳过机制的现代化

原有的 _xfail_checks 标签已被废弃。现在,开发者需要直接通过 check_estimator 或 parametrize_with_checks 函数传递 expected_failed_checks 参数,以明确告知测试框架哪些检查预期会失败。

from sklearn.utils.estimator_checks import check_estimator, parametrize_with_checks

CHECKS_EXPECTED_TO_FAIL = {
    "check_to_skip_name": "this check is known to fail"
}

def test_with_check_estimator():
    check_estimator(MyEstimator(), expected_failed_checks=CHECKS_EXPECTED_TO_FAIL)

实用工具:sklearn_compat 包

由于测试规则的变更,部分旧代码可能需要调整。为了平滑过渡,团队推出了 sklearn_compat 包。开发者可以选择将其作为依赖项安装,或将单文件 vendoring 到自己的项目中,以自动处理 API 变更带来的兼容性冲突。

开发者价值总结

此次更新不仅解决了 API 稳定性问题,还显著提升了测试效率。通过标准化的标签系统,开发者可以更精确地控制模型的测试行为,减少因版本升级导致的代码重构成本。

“我们一直在努力创建一个介于公共 API 和私有 API 之间的开发者 API,旨在保持其稳定性,并在必要时引入一个发布周期的警告。” —— scikit-learn 开发团队

“We've been working on creating a developer API which would sit somewhere between our public and private API in terms of backward compatibility.”

— scikit-learn 开发团队

同主题深度资讯

查看更多 →
AI 工具 2026-10-15

GitHub 发布 AI Scan for Pull Requests:填补 CodeQL 代码安全盲区

GitHub 正式将 AI Scan for Pull Requests 功能推向一般可用(GA)状态。该工具作为 CodeQL 的强力补充,利用大模型技术自动检测 PHP、Shell、Terraform、Dockerfile 等 CodeQL 尚未覆盖的语言框架中的漏洞。AI Scan 提供风险解释与自动修复建议,但不影响 PR 合并流程,旨在为开发者提供无感知的安全增强体验。

ChatLaw官方 / ADK编译 3 分钟
AI 工具 2026-10-15

GitHub 新增 Code Quality 许可使用量 CSV 导出功能,助力企业优化成本

GitHub 于 2026 年 10 月 15 日更新,为团队和企业用户新增了一项关键功能:可下载 GitHub Code Quality 许可使用量的 CSV 报告。该报告详细列出了消耗许可证的活跃提交者、过去 90 天内的仓库以及提交者的唯一性。此功能旨在帮助开发者精确核算 License 消耗,识别闲置资源,从而在不影响当前计费的情况下,为下一账单周期释放更多 License 额度,实现成本优化。

ChatLaw官方 / ADK编译 3 分钟
AI 工具 2026-10-15

Warp 发布软件工厂落地指南:从自动化琐事到组织级效能跃迁

Warp 官方发布深度指南,阐述如何在企业内部成功部署“软件工厂”(Software Factories)。文章强调目标并非全自动化,而是通过云端智能体循环(Agentic Loops)提升软件交付质量与效率。核心策略包括:从工程师视为“琐事”的低风险任务入手,将工厂定位为基础设施而非独立产品,并实现与 Slack、GitHub 等现有工具的无缝集成,降低开发者使用摩擦。

Warp官方 / ADK编译 5 分钟
AI 工具 2026-10-15

WatermarkRemover 发布 Kinemaster 水印去除指南:免费方案解析

WatermarkRemover 官方发布针对 Kinemaster 用户的水印去除专项指南。文章详细阐述了免费账户在视频剪辑中面临的水印困扰,并介绍了利用 WatermarkRemover 平台进行去水印的高效方法。内容涵盖水印类型、去除必要性及实操建议,旨在帮助创作者在不付费的情况下获得无水印成品。

WatermarkRemover官方 / ADK编译 3 分钟
code · 免费
★ 5.0 · 120评测
S

Scikit-learn

Python机器学习库

Scikit-Learn 是 Python 机器学习库,广泛应用在数据挖掘和数据分析。Scikit-Learn提供简单高效的工具,支持多种机器学习算法,包括分类、回归、聚类和降维等。Scikit-Learn设计简洁、易用,且与 NumPy 和 SciPy 等科学计算库无缝集成。Scikit-Learn 以其实用性、高性能和丰富的算法实现而闻名,适合从初学者到专家的各个层次的用户。Scikit-Learn提供详尽的文档和示例,帮助用户快速上手并解决实际问题。

查看 Scikit-learn 使用教程与功能