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__ 方法。开发者现在可以通过继承 BaseEstimatorClassifierMixin,并实现 __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_estimatorparametrize_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 开发团队

同主题深度资讯

查看更多 →
产品动态 2026-09-15

Topview 发布 Codex 插件工作流:在 ChatGPT 生态内实现 AI 视频生成

Topview 正式宣布其插件工作流集成至 OpenAI 的 Codex 代理系统,支持在本地桌面端或 CLI 中直接调用生成式模型创建 AI 视频。文章详细区分了 ChatGPT 网页版插件目录与 Codex 本地代理的架构差异,明确了安装路径、OAuth 认证流程及 Canvas 画布工作流。该更新旨在解决开发者在 ChatGPT 生态内调用视频生成模型(如 Seedance, Wan 3.0 等)的碎片化问题,强调 Pro 及以上订阅计划对自动化工作流的必要性。

Topview官方 / ADK编译 5 分钟
产品动态 2026-09-06

Adobe Photoshop 2025 图像分辨率优化指南:超分辨率与智能放大技巧

Adobe Photoshop 2025 在图像分辨率处理上带来了显著优化,重点介绍了如何利用内置的“超分辨率”功能无损放大 JPEG 图像。本文详细解析了从基础图像尺寸调整到高级 Camera Raw 滤镜应用的完整流程,帮助设计师和摄影师在保持画质的前提下提升输出质量。

Upscale.media官方 / ADK编译 4 分钟
产品动态 2026-09-06

Upscale.media 发布企业级图像放大新方案:AI 驱动 4X 无损画质升级

Upscale.media 正式推出针对企业场景的图像放大解决方案,利用先进 AI 技术实现最高 4X 倍无损画质增强。该工具支持 PNG、JPEG、WebP 等多种格式,具备批量处理与 API 集成能力,旨在帮助企业在营销物料、产品摄影及社交媒体内容中提升视觉专业度,强化品牌信任感。

Upscale.media官方 / ADK编译 3 分钟
产品动态 2026-09-06

2026 高尔夫电动滑板车七大设计趋势:从便携通勤到智能生态的全面革新

Accio Work 发布 2026 年高尔夫电动滑板车七大设计趋势报告,涵盖城市通勤便携化、复古美学融合、全集成智能控制、全地形越野能力、极简主义设计、可持续生态材料以及模块化定制功能。这些设计不仅提升了高尔夫运动的效率与体验,更重新定义了现代高尔夫玩家的移动生活方式。

Accio Work官方 / 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 使用教程与功能