把实验本身变成链接 — OpenML 开放机器学习平台

6697 个数据集 / 123742 个流 / 800 万次以上运行

来源 https://www.openml.org/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 3
把实验本身变成链接 — OpenML 开放机器学习平台

信息速览

数据集名称把实验本身变成链接 — OpenML 开放机器学习平台
数据类型表格数据,多模态路径引用,REST接口,实验元数据
规模无患者数据,禁止上传涉密或可识别个人信息
接入方式https://www.openml.org/
AI 就绪度

一篇机器学习论文里最难被别人复用的部分,往往不是方法,而是那个方法被如何 evaluated:用了哪份数据、怎么切的训练与测试、哪一列是目标、指标怎么算的、那个看起来很漂亮的分数是在什么依赖版本下跑出来的。这四样东西在论文里通常挤在一段实验设置里,用半句话带过;等到第二年有人想接着做,数据链接失效、切分口径不明、库版本早已升级,同一套代码也跑不回同一个数。算法能被重写,实验不能被重写——这是机器学习长期存在但很少被正面解决的问题。

OpenML 走的不是"把文件传上去"这条路,而是"把实验本身做成一个对象"这条路。它把一次实验拆成四层:数据集(Dataset)、任务(Task)、流程(Flow)、运行(Run)。数据集是数据加元数据;任务是在数据集之上加"IQ: target 列是谁、用什么评估方案(十折交叉验证之类)、用哪些评估指标”;流程是一条可被序列化、能在特定库里重新实例化的模型管线;运行则是某条流程在某个任务上的一次完整执行结果,含逐折逐实例的预测。这四层各自有平台分配的整数 ID,彼此用 ID 互指,于是"A 用 B 的数据在 C 折上跑出了 D 这个分数"这句话第一次有了机器可读、可下载、可比对的形式。

它的取舍同样锋利。它的数据量在今天的数据平台里算小的(本次通过 REST 接口逐页枚举到 6697 个数据集),但它的运行数量是另一个量级(同一方式可枚举到 800 万次以上);它不做统一的内容清洗,也不给全站数据套一个统一许可——每个数据集的 licence 字段由上传者自己填,理论上是可以写"Public"也可以写"BSD (from scikit-learn)"的自由文本。下文按重要程度逐节拆开。一屏速览见下表。

维度 内容
全名 OpenML(文档站在页面标题处写作 Open Machine Learning)
官方主页 https://www.openml.org/
官方文档站 https://docs.openml.org/
一句话定位 开放机器学习平台:共享数据集、算法与实验,并把它们组织成在线可查的网络
创始人 Joaquin Vanschoren(埃因霍温理工大学副教授),站内标注为 Founder of OpenML
联合创始人 Jan N. van Rijn(莱顿大学助理教授),站内标注为 co-founder 与多个组件的main developer
治理结构 贡献者 → 核心贡献者(core members)→ 指导委员会(Steering Committee, SC)→ 开放机器学习基金会(Open Machine Learning Foundation)
代码许可 全部项目代码按 BSD-3 Clause 条款开放(About 页原文)
数据集数量 REST data/list 端点枚举得到 6697 条,末条记录 did 为 47589
任务数量 REST task/list 端点枚举得到 48892 条,边界处 task_id 为 363811
流程数量 REST flow/list 端点枚举得到 123742 条,边界处 flow id 为 126576
运行数量 REST run/list 端点可枚举至 800 万行以上;更深的偏移在核验当次返回网关超时,故只给下界
任务类型 8 类(Supervised Classification、Supervised Regression、Learning Curve、Supervised Data Stream Classification、Clustering、Machine Learning Challenge、Survival Analysis、Subgroup Discovery)
评估指标 evaluationmeasure/list 返回 71 个度量名,含 accuracy、AUC、RMSE 与多种时间/内存开销度量
数据后端 统一转存 Parquet,存放于 S3 对象存储,每个数据集一个桶;单数据集当前上限 200GB
对外文件格式 历史 ARFF 下载直链(/data/v1/download/<did>/<name>.arff)与新的 parquet_url 并列提供
客户端 Python openml 0.15.1(要求 Python ≥ 3.8)、R mlr3oml 0.12.0、Java OpenmlConnector(Maven Central)、Julia OpenML.jl
REST 接口形态 https://www.openml.org/api/v1/json/<实体>/list/limit/<N>/offset/<N>,返回 JSON;旧接口无日落时间表
典型用途 基准评测、跨算法比对、元学习与超参重要性研究、AutoML 搜索、结果可追溯

§1 它要解决的具体麻烦

1.1 麻烦的本体:论文里的数字无法被继承

这就是 OpenML 开放机器学习平台要接的那个缺口:把一句"我们的模型拿了零点九三"换成一份可继承、可比对、可追溯的实验对象。

机器学习的结论高度依赖实验,而实验在传统发表形态里几乎只剩下结果表。一篇 2020 年的论文说"在某某数据上我们的模型取得 0.93",读者拿到的信息是一个浮点数;至于这是十折平均还是留出法、用的是哪一批.csv 还是清洗后的版本、随机种子是多少、.predict_proba 用了哪个 sklearn 版本,全部不在传递范围内。第二年有人想做改进,最现实的做法往往是在自己手里重跑一遍基线——而重跑出来的基线通常比论文低,于是又花一轮争论去确认到底哪里不一样。损耗发生在这里:不是算法不够好,是实验没有可继承的载体。

OpenML 的解法是把四件各自独立的东西分别对象化,并给它们编号。数据集解决"用的是哪份数据"——版本是服务器自动递增的整数字段,不是文件名里的 v2_final_final。任务解决"比的是什么"——它不是数据集的同义词,而是"数据集 + 目标列 + 评估方案 + 评估指标"的容器,因此同一份数据可以同时存在多个不同任务。流程解决"用的是什么算法"——它被定义为特定库中可序列化、可反序列化的模型或管线,记录依赖版本与全部超参。运行解决"结果从哪来"——它把预测、评分、时间戳与前述三者绑在一起。于是"A 在 B 上比 C 好"这句判断第一次有了可下载的物证。

1.2 三条常见的错误期待

第一条,期待它是"一个更大的 UCI"。它不是另一个数据仓库,尽管它确实存数据。区别在于两者的关注点不同:UCI 的价值在于人工把关后的元数据与统一许可;OpenML 的价值在于数据、任务、实验三者之间的链接。如果你的需求只是"找一份干净的表格数据",在它这里会很快撞上"每个数据集质量参差、许可逐个不同"的现实。

第二条,期待它的许可整齐划一。平台上每个数据集的 licence 字段由上传者填写,是长度上限 64 的自由文本;官方的数据结构说明书(XSD)明确写着:该字段缺失时的默认解释是"公有领域,或上传者不知道/不在乎"。也就是说,它不做统一许可担保,只提供记录位置。

第三条,期待"只要 ID 不变,结果就可完全复现"。官方文档在 Runs 概念的 Note 里自己写明:虽然平台尽力提高可复现性,但数值计算库、操作系统与硬件的变化可能让完全相同的重组结果无法复现。重建一条流还需要与之匹配的库版本——文档明示"你可能需要完全相同的库版本才能重建流"。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
一行代码取到某份经典表格数据并连同目标列元数据 get_dataset(61) 即返回 Iris 的数据结构、目标列 class、md5 与 parquet 直链 够,且自带特征字典与属性语义(数值/名义)
与别人在同一切分口径下比 A/B 两个模型 任务携带评估方案与切分,运行随之绑定该任务 够,这是它的核心能力
拿到别人跑过的结果,而不是自己重跑基线 评测结果可整体批量下载;运行含逐折预测与服务端重算的分数 够,且比自己重跑便宜得多
拿来训练大模型、凑语料规模 全站 6697 个数据集,单个上限 200GB,主体仍是中小规模表格 不够,它从来不是为语料规模化设计的
非表格模态(图像、音频、视频)的原始数据本体 支持——但不是在同一份文件里集中存放像素,而是在数据框里放文件路径列,外加一个同结构的媒体文件目录 可做,取文件要按路径自行搬运
一份带 DOI、可被引用的官方背书数据 它有 citation 与 paper_url 字段,但平台不签发 DOI 不够,需回到原始来源自己取持久标识
直接在浏览器里完成全部建模 网页提供检索、下载与分析看板,模型训练在客户端完成 不够,它不是计算平台
上传受控或涉密数据 使用条款明确"不得上传敏感或保密数据" 明确禁止,别绕

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你要给新算法找一组有历史基线的 benechmark OpenML-CC18 给出 72 个筛选过的分类数据集与对应任务 用 get_suite("OpenML-CC18") 取任务清单,先对齐 evaluation 口径再谈提升
你想知道某个超参在不同数据上重不重要 平台上同一任务的大量运行 + 自动提取的超参 元数据,支撑参数重要性分析 用 list_evaluations 按任务批量取评测表,注意尽量同 execution engine 版本的数据
你在做 AutoML,需要搜索空间的先验 官网列出 auto-sklearn、GAMA 等工具使用它的搜索结果做 warm start 先确定你要的是"上一次的最优配置"还是"跨数据集的默认配置"
你要在自己的数据上复刻某个已知流程 运行可被反序列化重建为同类库对象 按 flow 声明的依赖版本锁环境,版本不符时按官方提示处理
你在写综述,需要证明某类方法在若干数据上普遍有效 平台把同一个任务上的全部运行聚合成一处 按 task_id 聚合,别按数据集名聚合——同名数据可能有多个任务
你想公开自己的数据集,但不想自建服务 一行 create_dataset(...).publish() 先确定 licence 字段填什么,这是你唯一能对外声明的权利形态

1.5 一句话判断

它不是"又一处下载数据的地方",而是"把『谁在什么时候用什么配置跑出了多少分』这件事做成了一份可查询、可下载的公共账本"。

1.6 不适合谁:四条边界

不适合当作统一质量的数据源。 只要 account 就能上传,自动化管线只做格式转换与元数据计算,不做内容正确性审查。同一检索结果里相邻两条数据的采集质量可能差两个数量级。

不适合当作许可证担保人。 权利风险落在下载者身上:licence 字段只是上传者的自述,平台不提供签署环节,也不对其真实性负责。

不适合当作 bit-level 可复现的执行环境。 官方文档明确写了浮点库、操作系统与硬件都可能导致重算出不同结果,Java/文档站也未承诺版本冻结。

不适合当作私有数据的落地地点。 使用条款直接写明不得上传敏感或保密数据;目前的共享粒度只有公开与仅自己可见两档,"分享给指定小圈子"仍在建设中。

§2 数据构成与规格

2.1 四层对象与它们的编号体系

平台上所有东西都靠整数 ID 指路:数据集在网页与接口里写作 did,本来这也是 URL 短路径 /d/61 的那一段;任务同理用 /t/59;流程用 /f/18998;运行用 /r/10591758。这种「一物一整数」的设计带来一个直接后果:同一份 iris 数据并不是一个孤立文件,而是被若干任务引用,而这些任务又被若干运行引用——编号让引用关系不必靠文件名匹配。

层级 英文原名 平台上的定义 数量(本次 REST 枚举) 谁负责生成
数据集 Dataset 行(instance)与列(feature)组成的自包含表,附 .csv 式的特征字典与补充说明 6697 上传者上传,服务端做一次自动分析与格式转换
任务 Task 数据集 + 机器学习任务类型 + 评估方案 + 评估指标 + 目标列 48892 可由网页或接口创建,也可随基准套件批量生成
流程 Flow 某库中可序列化/反序列化的模型或管线,含依赖与全部可设超参 123742 多由客户端在发布结果时后台自动提取上传
运行 Run 某条流程在某个任务上、带某一组超参的一次完整评测 800 万以上 客户端 publish() 时提交,服务端随即重算评分
集合 Collection / Study 任务或运行的编组,用于发布基准套件与基准研究 以 OpenML-CC18(id 99)为代表 人工编组后发布

需要注意的角色差异:任务是消除歧义的那一层。同一个 mnist_784 可以有"原始像素十折分类"“降到二维后聚类”“改成学习曲线分析"等多个任务。论文里说"我们在 mnist 上评测”,落到 OpenML 上必须追问是哪一个 task_id;这一句话的差异能让两个 supposedly 可比的结果完全不可比。

2.2 数据集字段字典

以 Iris(did 61)的接口返回为例,data_set_description 里的字段如下。这些字段同时由上载用的 XSD 约束,因此它既是下载时能读到的元数据,也是上传时必须照填的规格。

字段 Iris 的值 含义 使用注意
id 61 数据集整数 ID 服务端生成,上传时忽略;URL 短路径 /d/61 用这个值
name iris 数据集名 必须唯一,长度不超过 128,只允许字母数字与 _ - . ( ) ,
version 1 服务端自动递增的版本号 同名再传自动 +1,不是人工编号
version_label 1 上传者自填的版本标记 可写日期、哈希或任意字符串,与 version 是两套体系
description 一段 Markdown 文本 数据集说明 上限 16384 字符,多数iris级的老数据集把来源与引用写在里面
format ARFF 原始上传格式 XSD 注释写明"目前一律小写 arff,无点号"
creator R.A. Fisher 原始采集者 与上传者可不是一个人,写引用时要分开
contributor — 对本版本有贡献的人 例如负责重新格式化的人
collection_date 1936 原始采集日期,由上传者填写 是字符串,不是标准日期类型
upload_date 2014-04-06T23:23:39 服务端记录的上传时间 现行后端最早的记录集中在这一天附近
language English 数据表示语言 XSD 要求首字母大写
licence Public 数据许可 自由文本,上限 64;缺失的默认解释是"公有领域或不在乎"
url /data/v1/download/61/iris.arff ARFF 下载直链 历史快照入口,新建数据集由服务端补填
parquet_url https://data.openml.org/datasets/0000/0061/dataset_61.pq Parquet 直链 路径按 did 补零分层,可直接按需的部分列读取
file_id 61 服务端文件编号 服务端统一分配的文件编号,一般无需关心
default_target_attribute class 默认目标列 可被任务覆盖;多目标任务可逗号分隔多值
row_id_attribute 无 行标识列 未设置时,工具会生成 0…n-1 的字符串行号,并在切分时复用它
md5_checksum ad484452702105cbf3d30f8deaba39a9 下载完整性校验 机械 ACSII 校验和,下载后应先比对
tag Botany / uci / study_1 等 标签列表 既是主题分类,也是 study_* 形式的基准归属标记
visibility public 可见性 取值包含 Everyone / All my friends / Only me 等
status active 检核状态 in_preparation → active(verified);严重问题者被置为 deactivated
original_data_url UCI 原页 原始出处 对二次搬运的数据集,这是追责与引用的唯一入口
paper_url Adelaide 电子文库链接 原始论文链接 有则建议一并引用;没有时该字段缺席
citation UCI 引用政策页 上传者指定的引用文本 平台不代生成引用格式
processing_date 2020-11-20 19:02:18 服务端处理时间 与该数据集最近一次服务端处理批次有关

2.3 自动计算的质量度量(qualities)

只要数据集被受理,服务端会跑一遍自动分析,把结果写成一组名/值对挂在 quality 数组上。Iris 一次返回十项,正好构成"这份数据能不能用"的第一道判断材料。

quality 名 含义 读它的意义
NumberOfInstances 行数 决定能不能喂给你想用的模型
NumberOfFeatures 列数(不含目标列) 与 NumberOfClasses 一起构成任务规模判断
NumberOfClasses 类别数 分类任务的基本形态
MajorityClassSize / MinorityClassSize 最大/最小类的样本数 判断类别不平衡的粗粒度依据
MaxNominalAttDistinctValues 名义型属性的最大取值数 决定 one-hot 后的列扩张量级
NumberOfNumericFeatures / NumberOfSymbolicFeatures 数值列/符号列计数 决定预处理管线要怎么写
NumberOfMissingValues 缺失值总数 平台只给计数,不给成因
NumberOfInstancesWithMissingValues 含至少一个缺失值的行数 决定删行还是插补的第一手判断

注意这里的纪律:这些数是服务端算好的单值标量,可以直接引用;平台没有提供也无从推断的部分(比如某列与另一列的联合分布)不写。缺什么只能自己去看原始文件。

2.4 一次任务的结构

任务的接口返回不算复杂,含糊的地方全在 input 数组里。以 task 2(anneal 的监督分类任务)为例,task/list 返回 task_id、task_type_id、task_type(Supervised Classification)、did、name、status、format,外加一组 input:

input 名 task 2 的值 含义
estimation_procedure 1 评估方案编号,决定划分方式(十折交叉验证等)与 repeats/folds 参数
evaluation_measures predictive_accuracy 该任务采用的主指标
source_data 2 所引用的 dataset did
target_feature class 目标列

四个字段缺一不可,而它们恰恰是论文里最容易含糊的四个点。把这四項固定下来之后,“同一个 任务上的所有运行才可以用同一把尺子量的”—这是评测可比性的物理基础,也是这个平台最难以替代的能力。

任务的 HTTP GET 形态:

https://www.openml.org/api/v1/json/task/list/limit/2/offset/0
https://www.openml.org/api/v1/json/task/59

2.5 一次运行的解剖

run/list 返回的字段极简,真正的内容在从属文件里:

字段 样例值 含义
run_id 62 运行 ID,短路径 /r/62
task_id 1 引用哪个任务
setup_id 17 流程 + 具体超参组合的编号,同参运行共享同一 setup
flow_id 76 引用哪条流程
uploader 1 上传者
upload_time 2014-04-06 23:57:45 上传时间
error_message 空 服务端处理时是否报错
run_details 空 附加说明

服务端做的那一件关键事是"独立评测":文档写明,对多数任务而言,一次运行包含全部训练/测试划分上、全部实例上的预测与类别置信度;一旦上传,服务端就用一整套评估指标自动重算,并把本地算出的指标与耗时一并存档。这就是为什么同一 task 的运行可以横向比——分数不是按 uploader 各自的脚本算的。更进一步,文档还说新指标可以之后加入评估引擎,再对历史运行补算。

2.6 格式:ARFF 的旧入口与 Parquet 的新主体

老入口是没有退休的。把 did 填进去就能拿到 ARFF 快照:

https://openml.org/data/v1/download/61/iris.arff          #-- ARFF 快照,历史以来的默认直链
https://data.openml.org/datasets/0000/0061/dataset_61.pq   #-- Parquet 主体,按 did 补零分层

文档站的说法是:OpenML 会把数据集转换为基于 Parquet 的统一格式,存放在 S3 兼容的对象存储里,一个数据集一个桶;单数据集当前上限 200GB。用户通常感知不到这件事,因为客户端负责把 Parquet 转成目标语言的原生数据结构。非表格模态(图像、音频)不在表里塞二进制,而是在数据框里放指向同目录媒体文件的路径列。换句话说,Parquet 是存储形态,ARFF 是兼容形态,你的语言里的数据结构是交付形态,三者由客户端串起来。

import openml

#-- 三种入口都能到手:ID、名字、基准套件
ds = openml.datasets.get_dataset(61)
X, y, categorical_indicator, attribute_names = ds.get_data(target="class")
task = openml.tasks.get_task(59)
train_idx, test_idx = task.get_train_test_split_indices(fold=0)

suite = openml.study.get_suite("OpenML-CC18")
print(len(suite.tasks), ds.dataset_id, ds.md5_checksum)

§3 它是谁的成果:谁在往里放东西

3.1 贡献者不是"一群匿名网友",而是绑定了 ID 的上传者

每条记录都带 uploader 字段——一个用户整数 ID。Iris 这样的数据集是团队早期导入的(did 61 的 upload_date 是 2014-04-06),而许多新数据集背后是具体课题组。这一点带来两条有用的推论:其一,同一 uploader 的一批数据往往共享命名风格与说明习惯,检索时按 uploader 过滤比按关键词过滤更稳;其二,credit 是明确的,你要找某份数据的原作者,看 creator 字段而不是 uploader。

角色 字段位置 谁 意味着什么
创始人 About 页署名 Joaquin Vanschoren(埃因霍温理工大学) 项目发起人,兼 superconductor 兼 strategy 责任人
联合创始人 About 页署名 Jan N. van Rijn(莱顿大学) 平台多个自动驾驶组件与插件的main developer
核心贡献者 同上 Bernd Bischl、Matthias Feurer、Giuseppe Casalicchio、Pieter Gijsbers、Andreas Mueller 等 R 接口、Python API、算法设施的主要维护者
creator 元数据字段 原始数据的采集者 可能是几十年前的个人或机构,与上传者无关
contributor 元数据字段 对本版本有贡献的人 重新格式化、修错的人
uploader 元数据字段 把数据传到平台上的账号 ID 你对数据有疑问时的第一联系人

3.2 时间线:一条被论文标记的 Roadmap

时间 事件 出处
1936 Iris 的原始采集年份(这莱 datasets 的 collection_date 可以早于平台本身几十年) did 61 的 collection_date 字段
2013 首篇系统论文《OpenML: Networked Science in Machine Learning》发表于 SIGKDD Explorations 15(2):49-60 官方 Terms 页引用的 doi:10.1145/2641190.2641198
2014-04-06 现行后端里可见的最早记录:Iris 的 upload_date 与最早的 run 记录的 upload_time 都落在这一天 REST data/61、run/list 首条
2017 R 接口论文发表:OpenML: An R Package to Connect to the Machine Learning Platform OpenML,Computational Statistics 官方 Terms 页引用,doi:10.1007/s00180-017-0742-2
2019-02-21T18:47:13 OpenML-CC18 基准套件(study id 99)创建 REST study/99 的 creation_date
2019 / 2021 基准套件论文:arXiv:1708.03731v2 与 NeurIPS 2021 版本 套件描述中的引用段;Terms 页列出 NeurIPS 2021
2021 OpenML-Python 论文发表:JMLR 22(100):1-5 官方 Terms 页与 openml-python 仓库 README
2024-10 新版 Python 服务端 REST API 文档上线,明确"旧接口无计划日落时间" https://docs.openml.org/apiv2/
2025 十年综述《OpenML: Insights from 10 years and more than a thousand papers》,Patterns 6(7):101317 官方 Terms 页引用

3.3 数据从哪里来:三条进料路径

路径 典型样子 元数据留下的痕迹
面向 Rather than 经典数据集的早期批量导入 iris、anneal、kr-vs-kp 等 UCI 常客 tag 里带 uci;original_data_url 指向原始可能一个 UCI 页;creator 是几十年前的原作者
研究者上传自己做的数据 研究者自己采集的实验数据、业务数据 upload_date 较新,description 通常是 drawn Markdown 的亲自写法
机器学习库「顺手」把数据放上来 深度学习 fashion datasets(Fashion-MNIST、SVHN、CIFAR_10 等) 同一批 uploader 集中上传(did 40923 以后的一段连续区块),各自带 opensml 风格标签

这里有一个容易忽略的结论:这些路径混在同一个检索结果里。平台上没有一个字段写着"这是二手数据",只有 original_data_url 与 tag 间接提示。如果你要做跨数据集的元分析,二手与一手混用会在标注习惯上带来系统性偏差。

3.4 层次:不要指望所有数据都在服务器上

data/61 的 url 字段是服务端自己的下载链接,而 XSD 对 url 的定义是"指向实际数据文件的有效 URL,可以在 OpenML 服务器上,也可以在另一个数据集仓库上"。也就是说,登记与托管不是一回事:在平台允许的登记模式下,数据本体可以在别处。配合 CONCEPT texto 层到帐をお願い当做金句用:同一份名字背后至少有"平台托管 / 外部引用 / 二手搬运"三种可能性,url、parquet_url、original_data_url 三个字段就是区分它们的唯一线索。

§4 它最独特的东西

4.1 运行(Run)是一等公民

绝大多数数据平台止步于数据;OpenML 多走一步,把"某次评测"当成可以检索、可以下载、可以引用的对象。一次运行记录的不是一句结论,而是可重放的材料:某条流程在某个任务上的配置是什么、服务端独立重算的分数是多少、逐折逐实例的预测在哪。这让三件事第一次变得可操作:不必自己重跑基线;可以检查自己的实现对不对得上别人公布的逐实例预测;可以在别人的超参分布上做统计分析。

4.2 任务(Task)消掉了"同名不同义"

两个都说"我在 adult 上做了分类"的研究,可能压根不是在回答同一问题:一个用的是留出法,一个用的是十折;一个目标列是收入是否超过 50K,一个是原始收入区间。任务的四元 input(评估方案、评估指标、源数据、目标列)把这些差异显式化。这也是为什么不推荐按数据集名聚合评测结果——聚合键应当是 task_id。

4.3 基准套件:以 OpenML-CC18 为样本看它的策展标准

OpenML-CC18 不是"一堆数据的最小公共倍数",它带着一张写死的入选清单:

属性 数值 / 内容
study id / 别名 99 / OpenML-CC18
名称 OpenML-CC18 Curated Classification benchmark
主实体类型 task
规模 72 个数据集、72 个任务
创建时间 2019-02-21T18:47:13
可见性 / 状态 public / active
技术要求 稠密数据上的分类任务、观测独立
类别约束 类别数 ≥ 2;每类至少 20 个观测;少数类与多数类之比需超过 5%
规模约束 观测数在 500 到 100000 之间;one-hot 编码后特征数小于 5000
排除项 人工合成数据;更大数据集的子集;其他数据集的二值化版本;单特征或简单决策树就能完美预测的数据
其他要求 有来源或参考文献可用
引用要求 套件描述内指定 arXiv:1708.03731v2(NeurIPS 2021 版本见 Terms 页)

这张表值得读完而不是跳过:它说明"策展"在 OpenML 里是可用机器读取的条件清单,而不是编辑的一句话背书。欲想建自己的套件时,可以直接沿用这套标准——这也是这一平台之上能长出大量 AutoML 基准的原因。

4.4 把"别人的实验"变成自己的搜索空间

官网把自己的定位写得很直白:站在巨人的肩上(Stand on the shoulders of giants),并对 AutoML 工具友好——列举包含 auto-sklearn、SageMaker AutoML、Azure AutoML、GAMA。当足够多的运行被结构化地攒在同一个任务空间里,“哪个超参重要”(parameter importance)、“默认情况下该怎么设”(symbolic defaults)这类问题就不再是拍脑袋,而是可以用历史数据回答的统计问题。这是它与普通数据平台的根本分野:普通平台给你训练样本,OpenML 还给你关于算法本身的样本。

4.5 边界条件:复现的极限在哪

这样一套结构有一个明确的失效点,官方把它写在 Runs 概念的 Note 里:即使尽力最大化可复现性,数值计算库、操作系统与硬件的变化也可能让结果无法完全一致;重建 flow 还往往需要完全相同的库版本。把它当成可逐位对齐的执行环境是不行的,当成统一评测口径的公证处才是恰当的。用它比较高下可以,用它逐比特对齐不行。

§5 怎么拿到

5.1 三条入口与其代价

入口 适合谁 能做什么 做不到什么
网页检索(/search?type=data 等) 先看一眼的人 浏览、按属性过滤、看自动生成的分析看板、导出 Croissant/JSON/XML 描述 批量取数、自动化跑实验
REST API 需要脚本的人 按 limit/offset 分页枚举全部数据集/任务/流程/运行,按 ID 取单个对象的完整描述 需要自己解析返回的 JSON 结构;深层分页会触发网关超时
客户端(Python 等) 要跑实验的人 一行取到语言原生数据结构;跑完直接把结果发布到服务端,由服务端统一重算评分 需要装包并配置 API key(上传时)

网页上的数据集页面除了常规信息,还能直接下载 Croissant(ML Commons 的数据集元数据描述规范)版本的元数据 JSON;这一点对要把 OpenML 数据接入外部 ML 流水线的团队很实用——元数据不必再从 HTML 抓。

5.2 REST 接口的 URL 语法

接口沿用了"资源 + 过滤段"的路径式写法,不需要请求体,直接 GET 即可:

https://www.openml.org/api/v1/json/data/list/limit/2/offset/0        #-- 数据集列表,返回含 quality 数组
https://www.openml.org/api/v1/json/data/61                          #-- 单个数据集的完整描述
https://www.openml.org/api/v1/json/data/features/61                 #-- 特征(列)级字典
https://www.openml.org/api/v1/json/data/qualities/61                #-- 该数据集的质量度量
https://www.openml.org/api/v1/json/task/list/limit/2/offset/0        #-- 任务列表
https://www.openml.org/api/v1/json/tasktype/list                    #-- 8 类任务类型的定义
https://www.openml.org/api/v1/json/flow/list/limit/1/offset/0        #-- 流程列表
https://www.openml.org/api/v1/json/run/list/limit/1/offset/0         #-- 运行列表
https://www.openml.org/api/v1/json/evaluationmeasure/list            #-- 71 个可用评估度量名

limit 与 offset 的组合就是分页:把它当作游标用,配合返回体为空(或错误码 “No results”)作为终止条件即可从头到尾枚举。需要注意的是 deep offset 的代价——服务端要跳过前面所有行,偏移到几百万量级时开始出现超时,因此"先按 limit 分批取、别一次拉到穿透",这是实际使用时必须接受的限制。

5.3 Python 客户端的最短路径

安装与第一次取数:

python -m pip install openml     #-- PyPI 当前版本 0.15.1,要求 Python ≥ 3.8
import openml

#-- 1) 按名字或 ID 取数;返回对象自带特征语义与目标列信息
ds = openml.datasets.get_dataset("credit-g")          #-- 也可用 get_dataset(31)
X, y, categorical_indicator, attribute_names = ds.get_data(target="class")

#-- 2) 取任务,拿到与所有人完全一致的切分
task = openml.tasks.get_task(31)
train_idx, test_idx = task.get_train_test_split_indices(fold=0)

#-- 3) 跑模型并发布;服务端会独立重算各项指标
from sklearn import pipeline, impute, tree
clf = pipeline.Pipeline(steps=[("imputer", impute.SimpleImputer()),
                               ("estimator", tree.DecisionTreeClassifier())])
run = openml.runs.run_model_on_task(clf, task)
run.publish()                                        #-- 需要 ~/.openml/config 里配好 apikey

#-- 4) 批量拉 task-level 评测表做横向比较
#-- evaluations 的筛选项支持 function(度量名)与 tasks(任务 ID 列表)
df = openml.evaluations.list_evaluations(function="predictive_accuracy",
                                         task=[31], output_format="dataframe")

5.4 其他语言的客户端

语言 客户端 获取方式 备注
Python OpenML-Python(openml) PyPI,pip install openml 0.15.1;当前仓库 README 标注支持 Python 3.10–3.14
R mlr3oml CRAN 版本 0.12.0;list_oml_data() 可按特征数、行数、类别数筛选
Java OpenML Java API(OpenmlConnector) Maven Central 上的 jar 包 new OpenmlConnector("api_key") 后调用 dataGet / dataUpload 等
Julia OpenML.jl Julia 的包管理器 OpenML.list_datasets(output_format=DataFrame)
网页 站内 /search?type=data 等检索页 直接访问 可导出 Croissant / JSON / XML 描述

5.5 认证、缓存与本地落盘

下载不需要账号,这一点写在 Concepts/Authentication 页的开头:想要公开数据不需要建账号。上传必须注册并取 API key,落到 ~/.openml/config 里一行 apikey=MYKEY,且该文件必须在导入 openml 模块之前就绪。下载的全部对象会在本地做缓存,默认目录是 ~/.openml/cache,可以用 openml.config.cache_directory 改到别处。若要换 CPU/GPU 机器的 scratch 目录或减少重复下载,这是第一个该调的开关。

5.6 五个坑

第一个坑:把数据名当主键。 名字不保证唯一(同名会被后来者抢占或被服务端加后标区分),§5.2 接口返回的 did 才是稳定锚点。

第二个坑:默认搜不到全部数据。 检索默认只返回 active 状态的数据集;in_preparation 与 deactivated 的数据要靠显式指定 status 才能拿到。只扫默认视图的脚本会系统性少掉一部分对象。

第三个坑:把 quality 数当清洗结果。 NumberOfMissingValues 只是计数,既不说明缺失机制,也不说明缺失在哪几列,更不帮你处理。处理策略要自己定。

第四个坑:忽略 row_id_attribute。 若数据集设了行标识列而建模时没排除它,模型会直接学到行号。按 XSD 的写法:未设置该字段时由工具生成 0 到 n-1 的字符串行号并在切分时复用,这意味着同一行的标识在不同任务里是稳定的。

第五个坑:引用别人的 flow 却忘记锁版本。 重建 flow 依赖原始库版本,文档明示"你可能需要完全相同的库版本"。跨环境复现时先按 flow 声明的依赖锁好环境,否则差异来源说不清。

§6 与库内其他资源的关系

6.1 关系图谱

站内资源 与 OpenML 的关系 什么情况下先去找它
UCI 机器学习数据集库 OpenML 早期内容的来源之一;两者是两种治理哲学:UCI 人工把关 + 统一 CC BY 4.0,OpenML 自动化接管 + 逐集自填许可 你需要统一许可与人工整理过的小而稳的数据时
GLUE 同样是"任务集合"形态,但 GLUE 只服务于自然语言理解评测,且不含历史运行结果 你做 NLU 模型评测,且要看排行榜而非历史配置时
COCO 大型图像标注数据的代表;与 OpenML 的非表格模态(路径列引用)形成对照 需要带密集标注的图像数据本体时
Common Voice 大体量语音语料的代表,自有许可版本体系 需要原始音频与说话人 metadata 时
Dryad 论文附录数据的长期保存地,与 CV 领域的 years scale 相反 追某篇论文原始数据包时
HealthData.gov 政府开放数据门户,元数据口径是政务口径 找美国联邦公共卫生统计时
OpenOximetry 领域专库的例子:把一种信号做深做透 明确需要血氧波形与对照测量时
mcPHASES 小而深的多模态生理 longitudinal 数据,与 OpenML 的表格主导形成对照 要逐日逐人的激素与 wearable signal 时
Kepler 单一观测计划的长序列,代表"一大份持续数据"的思路 要长时间基线的光变曲线时
SDSS DR20 巡天光谱档案,数据维度远超这里的常见规模 要 spectroscopic redshift survey 数据时

6.2 检索路径

先在 OpenML 里做两件事才算完成检索:一是用 /data/list 的过滤条件把候选缩到几十条(按 NumberOfInstances、NumberOfFeatures、NumberOfClasses 之类的服务端已算好的标量最有效);二是回到单个候选,核对三个字段——original_data_url、status、licence。第一个告诉你数据的原始出处,第二个说明它有没有被维护者自己标记为停用,第三个决定这条数据能不能进你的产品线。跳过这三步就直接下载的人,往往在第三步才发现问题。

6.3 分工判据

判据只有一句:你要的是"可比的分数",还是"可靠的数据"。 要可比分数,先用 OpenML——它把评估方案、切分、指标服务端化,这是别处买不到的东西;要可靠数据,先去找领域专库或 UCI——它们把人工审查当作主要工序。两者可以同时使用:在 OpenML 里选定任务口径,再回到原始来源取原始数据与正式许可文本。

§7 质量评估与局限性

7.0 前置校正:评估对象不是"一份数据"

把它当成一份数据集来评审会评错方向。它是在数据之上架起来的一层登记与评测设施:单纯托管文件的平台并不稀缺,真正稀缺的是「这四层对象是否完整、评测口径是否可信」。因此下面五维全部针对平台本身,而不是某一个具体数据集。

7.1 五维评分(相对同类开放资源的定性判断)

维度 判断 依据
规模(横向) 中 6697 个数据集远少于单一大语料的体量,却多于多数领域专库的覆盖面
结构(机器可读性) 强 四层对象 + 8 类任务 + 71 个评估度量,全部配套 REST 端点
边界(权利清晰度) 弱 licence 由上传者自填,缺失即默认为"公有领域或不在乎",无统一承诺
元数据一致性 强于人工库、弱于专库 数量/类型/缺失等标量自动算;语义依赖自由文本 description
可持续性 中 有基金会与指导委员会的公开治理结构;全部代码 BSD-3;旧 API 无日落时间表

7.2 元数据有两层,别混为一谈

层 谁写的 可信度 例子
服务端自动算出的 quality 平台的服务端自动分析管线 同口径、可大规模复用 NumberOfInstances、NumberOfClasses、NumberOfMissingValues
上传者填写的 description / licence /creator 人 取决于认真程度 licence = “Public”、“BSD (from scikit-learn)” 这类自述
服务端流水 (upload_date / processing_date / md5) 平台 客观但不评价质量 只说明时间与完整性,不说明内容对错

这一区分决定了用法:能写在方法节里作为筛选依据的,只有第一层;第二层必须回到 original_data_url 找到出处核实后,才能写进对外结论。

7.3 可枚举的偏差来源

第一,任务口径造成的集中:同一个数据集可以有多个任务,但真正被反复使用的往往是创建早、切分默认的那个任务,而晚近新建的任务在运行数上从零开始,数量分布并不均匀。

第二,来源集中:早期内容是 UCI 等来源的批量导入,这些来源本身就是教科书式数据集的集合,因此经典小表被系统性偏重。

第三,模态偏差:虽然支持图像/音频,但非表格数据的本体以文件路径列引用,实际下载链路比纯表格麻烦,因此实际被使用的仍然以表格为主。

第四,状态漏斗:默认只返回 active,大量 in_preparation 与 deactivated 的对象不在默认视野内——凡声称"把平台上全部 N 条都跑了一遍"的说法,都要注明自己用的是默认视图还是全部状态。

7.4 外部验证

平台的外部回应来自两条线:其一是官方引用的十年综述标题所述"超过一千篇论文"量级的外界使用;其二是 AutoML 生态直接使用它——官网列出 auto-sklearn、SageMaker AutoML、Azure AutoML、GAMA 均以它为搜索或评测来源。这证明的是"被广泛当作基础设施使用",不是"其上每一份数据都被第三方验过"。

7.5 它为什么会继续存在

三个结构性的理由。第一,替代品少:把"度量 + 切分 + 预测 + 配置"四件事一起标准化成对象的地方并不多。第二,治理是公开的:贡献者→核心贡献者→指导委员会→开放机器学习基金会的层级写在官网与 Governance 文档里,代码许可也明确。第三,沉淀成本高:十余年积累下来的运行记录一旦迁移,成本高于继续维护,这是最现实也最朴素的理由。

§8 生态位与历史

8.1 沿革:从一篇立意 paper 到一层基础设施

阶段 平台形态 标志
2013 概念与原型 《OpenML: Networked Science in Machine Learning》发表于 SIGKDD Explorations 15(2):49-60
2014 现行后端开始沉淀数据与实验 Iris 的 upload_date 与最早一批 run 记录都落在 2014-04-06
2015 任务类型定型 JMLR Workshop 论文《Taking machine learning research online with OpenML》记录服务端已支持分类、回归、聚类、数据流分类、学习曲线与生存分析
2017 R 语言接口成型 OpenML R 包论文,Computational Statistics
2019 基准套件化 OpenML-CC18 编选成型的任务包;套件论文 arXiv:1708.03731v2
2021 Python 接口成型 OpenML-Python 论文,JMLR 22(100):1-5
2024 存储换轨、服务端重写 文档说明数据统一转 Parquet 并存放 S3 对象存储;新版 Python 服务端 REST 文档上线
2025 十年节点 《Insights from 10 years and more than a thousand papers》,Patterns 6(7):101317

这条时间线有一个清晰的方向:先把词汇表立起来(数据集→任务→流程→运行),再把便利做上去(Parquet、S3、新 API、更多客户端)。 顺序很重要——先有统一的评测口径,才有后来跨人跨任务的运行可比性;如果先做大存储,今天只会是又一个文件服务器。

8.2 与挑战赛的关系

平台上专门有一类任务叫 Machine Learning Challenge,说明它并不回避"竞赛"这种形式,但两者逻辑相反:传统竞赛是一次性、有截止时间、以排行榜为终点的封闭事件;OpenML 的任务没有截止日,别人今天提交的新运行仍然会加到你昨天看过的那条 Leaderboard 上。这也是官方文档把任务称作"实时协作的基准"的原因——同一份任务上的榜单不是终点排名,而是持续累积的证据。

8.3 生态位:夹在三种角色之间

对比对象 它的核心卖点 OpenML 相对位置
通用数据仓库(UCI 等) 人工把关、统一许可、详细的变量表 OpenML 用自动化接管元数据,但把评审判断留给使用者自己
大型 hosting 平台与竞赛站点 体量、算力、社区活跃度 OpenML 不提供计算,也不做虚拟货币扶贫排名,赢在 machine-readable 的实验语义
领域专库(影像/语音/天文等) 采集与标注深度 OpenML 不做采集,只提供一层标准化的交接格式
论文附录仓储(Dryad 等) 与单篇论文的绑定与长期保存 OpenML 与论文是标签式弱关联,不对数据本体作长期保存承诺

8.4 谁在用

四类使用者最为常见:想省掉基线重跑的算法研究者;做 AutoML、需要搜索空间先验的工程团队;做元学习与参数重要性分析、需要大量历史结果作为样本的研究者;以及需要同一份数据配固定任务做可复现作业的教学场景。他们的共同点是:要的不是「再一份数据」,而是「别人做过的实验记录」。

§9 使用指引

9.1 三种角色的最短路径

角色 该做的第一件事 该看的字段 该躲开的坑
算法研究者 找与自己任务同类型的 task_id,直接按任务跑 task_type_id、estimation_procedure、evaluation_measures 按数据集名而非 task_id 聚合,导致评测口径混淆
AutoML / 工具开发者 用 get_suite("OpenML-CC18") 拿到任务清单做批量评测 套件 data_id 与 task_id 清单 忽略 NumberOfInstances 上限与 one-hot 后列数,导致内存爆掉
数据 Owner 用 create_dataset(...).publish() 发布,并认真填 licence 与 citation licence、visibility、original_data_url 上传含敏感字段的数据(条款明令禁止)

9.2 最短流程

第一步,pip install openml;第二步,用 openml.datasets.list_datasets(output_format="dataframe") 或在网页上按服务端已算好的规模标量筛出候选;第三步,取对应 task 并用 get_train_test_split_indices 拿到与别人一致的切分;第四步,跑模型、run.publish();第五步,用 list_evaluations 把自己的分数跟同一任务上的历史结果放在一起看。这五步里最容易省错的是第三步——自己用 sklearn 的 train_test_split 随手切一把,等于放弃了全平台唯一不可替代的那部分价值。

9.3 引用方式

官方 Terms 页把引用拆成三档,写论文时应该照用:

场景 引用对象 文献
用了整个平台或大量其结果 OpenML 整体 Bischl 等,《OpenML: Insights from 10 years and more than a thousand papers》,Patterns 6(7):101317, 2025
用了 OpenML-Python Python 客户端 Feurer 等,《OpenML-Python: an extensible Python API for OpenML》,JMLR 22(100):1-5, 2021
用了 R 接口 R 客户端 Casalicchio 等,《OpenML: An R Package to Connect to the Machine Learning Platform OpenML》,Computational Statistics 32(3):1-15, 2017
用了某个基准套件 OpenML-CC18 Bischl 等,《OpenML Benchmarking Suites》,arXiv:1708.03731v2(NeurIPS 2021 版本见 Terms 页)
用了具体某份数据 该数据集自身 读它的 citation 与 paper_url 字段,按作者要求的格式写

平台上单个数据集不签发 DOI,这是与 UCI 机器学习数据集库 不同的地方:那里每个入库数据集都有 DOI,这里只有作者自填的引用文本。论文里需要引用时,按该数据集的 citation 字段书写,并在必要时回到 original_data_url 核对原始出处。

§10 AI 使用声明

项目 说明
文本生成 全文由 AI 起草,依据公开网页与官方 REST 接口返回整理,未经人工逐句润色
数字来源 规模类数字来自官方 REST 接口在核验时刻(2026-10-29)的分页枚举结果;治理与许可表述来自官网 About / Terms 页与 docs.openml.org 文档原文
文件核验 通过命令行请求 https://www.openml.org/api/v1/json/... 各接口核验;Iris(did 61)的元数据取自 data/61 返回
不一致说明 官网自述为"数以千计的数据集"与"数以百万计的实验",与此处枚举到的 6697 个数据集、800 万次以上运行在量级上一致;前者是官方声称口径,后者是接口分页枚举口径,本文以后者为准
论文信息 所有被引文献见 §9.3,均取自官方 Terms 页与套件描述原文
未核验内容 全部学科覆盖构成、各任务类型的运行数量分布、每条 flow 当前是否仍可在主流版本中重建、deactivated 数据的具体清单
图像 封面图为 AI 生成的示意图,非官方素材,不含任何官方标识
免责声明 本文不构成法律意见;数据再利用的权利边界以每个数据集自身 licence 字段与原始来源的正式声明为准

常见误读

说法 实际 证据
「它是一个 Kaggle 那样的竞赛平台」 任务是协作式基准,没有截止日、没有奖金,也没有托管算力 官方文档把任务描述为实时协作的基准,八类任务类型中有一类名为 Machine Learning Challenge
「它只是一个下载站点」 它有四类客户端与一套 REST 接口,网页只是入口之一 /apis 页列举 Python / R / Java / Julia 客户端
「平台上的数据都被审查过」 自动分析只覆盖格式与标量统计,内容正确性归上传者 数据集 XSD 中 creator、licence 都是自由文本;Terms 页写明提交者自负其责
「所有数据都是 CC BY 4.0」 licence 由上传者自填,常见值含 Public、BSD (from scikit-learn) data/61 返回 licence 为 Public;XSD 注明缺省解释为公有领域或不在乎
「默认检索看到的就是全部」 默认只返回已核验状态;待处理与停用对象要显式指定状态 文档站 Dataset status 小节
「有 ID 就等于结果可完美复现」 数值库、操作系统与硬件的差异仍可能造成偏差 Concepts/Runs 页的 Note
「重建一条 flow 不需要原环境」 文档写明可能需要完全相同的库版本 Concepts/Flows 页的 Note
「每个数据集都有 Parquet 直链」 Parquet 是后端形态,ARFF 直链并存,图像类数据靠路径列引用 data/61 同时返回 url 与 parquet_url
「这里的数据够训练大模型」 单个上限 200GB,主体是中小规模表格 文档站 Technical specifications
「换个 Average precision friendly 语言也能对齐别人的分数」 对齐的前提是复用同一个 task_id 与同一套估计规程 task input 四元组:源数据 / 目标列 / 评估方案 / 评估指标

FAQ

Q1:OpenML 到底是什么,一句话怎么说?
它是把「数据集—任务—流程—运行」四层都做成机器可读对象的开放机器学习平台。论文里一句话带过的那个分数,在这里被拆成四个可下载的对象:数据集 d/61、任务 t/59、流程 f/18998、运行 r/10591758。创办人是埃因霍温理工大学的 Joaquin Vanschoren,联合创始人包括莱顿大学的 Jan N. van Rijn,全部代码按 BSD-3 条款开放。

Q2:为什么接口只枚举出 6697 个数据集,而最大编号是 47589?
did 是单调分配的整数,退役、删除与预留都会留下空号,核验时刻实际存在的记录是 6697 条。结论很简单:数量以 data/list 分页枚举的返回条数为准,不要用编号上界推算存量——两者相差一个数量级并不奇怪。

Q3:能不能商用?
平台层面不存在统一商业许可,每个数据集的 licence 字段才是权利人自己的声明,而且存在填 Public、填 BSD (from scikit-learn)、留空三种情况。因此「平台让我商用」这种推论不成立;要考虑商用,就得逐个数据集读 licence,必要时回到 original_data_url 找正式声明。这与 UCI 那种全库统一 CC BY 4.0 的做法是两种制度。

Q4:怎么省掉「把别人的基线重跑一遍」这件事?
这恰好是它最擅长的场景。取你关心的 task_id,用 openml.evaluations.list_evaluations 一次拉下该任务的历史评测表即可;这些分数由服务端用统一实现重算,比各自在本地跑出来的数字更适合横向比较。前提是接受 FAQ 第一条的前提差异:比较要在同一任务内做,跨图书馆版本的差异仍然可能存在。

Q5:我把自己的数据传上去会发生什么?
服务端做格式转换与自动分析,补上一组 quality 标量,先进入 in_preparation,通过后转为 active;若发现严重问题会被置为 deactivated。上传时要认真填 licence、citation 与 default_target_attribute,后续虽可在网页改,但下游往往已经引用了旧值。另外,条款禁止上传敏感或保密数据。

术语表

术语 解释
OpenML 开放机器学习平台,文档站标题写作 Open Machine Learning
数据集(Dataset) 由行(instance)与列(feature)组成的自包含表,附标准化元数据
实例(instance) 表中的一行,即一个观测单位
任务(Task) 数据集 + 任务类型 + 评估方案 + 评估指标 + 目标列构成的容器
流程(Flow) 可序列化、可在特定库中重建的模型或管线,含依赖版本与全部可设超参
运行(Run) 某流程在某任务上的一次完整评测,含服务端重算的分数与逐预测结果
集合 / 基准套件(Collection / Suite) 一组任务的公开编组,如 OpenML-CC18
基准研究(Study) 一组运行的公开编组,用于一次性发布大规模结果
estimation_procedure 估计规程,决定训练与测试如何划分与重复,例如十折交叉验证
evaluation measure 评估度量,接口返回 71 个可用名称
quality 服务端自动算出的标量特征值,如 NumberOfInstances
ARFF WEKA 生态的传统表格格式,仍是数据集的下载形态之一
Parquet 列式存储格式,平台的后端统一形态,存放于 S3 兼容对象存储
Croissant ML Commons 的数据集元数据描述规范,网页可导出该格式 JSON
apikey 上传所需的身份凭证,写在 ~/.openml/config 中
BSD-3 Clause 平台全部代码采用的开源许可条款
Open Machine Learning Foundation 开放机器学习基金会,项目运行的支撑主体
status 对象状态:待处理 / 已核验 / 已停用

附录 A:核心数字核对表

项 值 出处 层级
官方全称 OpenML / Open Machine Learning 官网首页与文档站 官方页面
创始人 Joaquin Vanschoren(埃因霍温理工大学) About 页署名 官方页面
联合创始人 Jan N. van Rijn(莱顿大学) About 页署名 官方页面
治理结构 贡献者→核心贡献者→指导委员会→开放机器学习基金会 About 页与 Governance 文档 官方页面
代码许可 BSD-3 Clause About 页原文 官方页面
数据集数量 6697(边界 did 为 47589) data/list 分页枚举 官方接口
任务数量 48892(边界 task_id 为 363811) task/list 分页枚举 官方接口
流程数量 123742(边界 id 为 126576) flow/list 分页枚举 官方接口
运行数量 800 万以上(下界,更深处请求超时) run/list 分页枚举 官方接口
任务类型数 8 tasktype/list 返回 官方接口
评估度量数 71 evaluationmeasure/list 返回 官方接口
Iris 的 did 与目标列 61 / class data/61 返回 官方接口
Iris 的规模 150 行、4 个特征列、3 个类别 data/list 中 quality 数组 官方接口
Iris 的上传时间与原始采集年份 2014-04-06T23:23:39 / 1936 data/61 的 upload_date 与 collection_date 官方接口
单个数据集上限 200GB 文档站 Technical specifications 官方页面
OpenML-CC18 编号与别名 99 / OpenML-CC18 study/99 返回 官方接口
OpenML-CC18 规模 72 个数据集、72 个任务 study/99 的 data_id 与 task_id 数组长度 官方接口
OpenML-CC18 创建时间 2019-02-21T18:47:13 study/99 的 creation_date 官方接口
Python 客户端版本 openml 0.15.1,要求 Python ≥ 3.8 PyPI 元数据 官方文件
R 客户端版本 mlr3oml 0.12.0 CRAN 元数据 官方文件
首篇论文 SIGKDD Explorations 15(2):49-60 Terms 页引用的 doi:10.1145/2641190.2641198 官方页面
十年综述 Patterns 6(7):101317 Terms 页引用 官方页面

附录 B:数字的来源分层

第一层:官方接口返回。 6697、48892、123742、800 万以上这四个规模数字,Iris 的全部字段值,以及 OpenML-CC18 的成员清单,都来自 https://www.openml.org/api/v1/json/... 在核验时刻的实际返回;错位分页以「返回体上报告 No results」为终止依据。

第二层:官方页面与文档。 治理结构、代码许可、licence 字段的默认解释、Parquet 存储形态与 200GB 上限,均来自官网 About 页、Terms 页、docs.openml.org 的 Concepts 与 Technical specifications 页面。

第三层:第三方登记。 客户端版本号与 Python 版本要求取自 PyPI 与 CRAN 的权威注册信息。

第四层:未核实。 全站学科构成、各任务类型的运行数量分布、每条 flow 当前能否在主流版本中成功重建、停用对象的具体清单。前三项即使能取到也属于自行聚合的分布性统计,按要求不予给出。

附录 C:参考文献

编号 文献 链接 用途
1 OpenML 首页 https://www.openml.org/ 定位描述、四条取数路径、AutoML 生态名单
2 About 页 https://www.openml.org/about 创始人与核心贡献者、BSD-3 许可、治理结构
3 Terms 页 https://www.openml.org/terms 官方推荐引用文献、荣誉准则与使用条款
4 Concepts 文档 https://docs.openml.org/concepts/ 四层对象定义、服务端独立评测、可复现性限制
5 Technical specifications https://docs.openml.org/data/specs/ Parquet 与对象存储、200GB 上限、版本与状态机制
6 Server API 文档 https://docs.openml.org/apiv2/ 新服务端进展与旧接口无日落时间表
7 数据集列表接口 https://www.openml.org/api/v1/json/data/list 数据集计数与自动质量度量
8 单数据集接口(Iris) https://www.openml.org/api/v1/json/data/61 数据集字段字典
9 任务类型接口 https://www.openml.org/api/v1/json/tasktype/list 八类任务类型
10 评估度量接口 https://www.openml.org/api/v1/json/evaluationmeasure/list 71 个度量名清单
11 基准套件接口 https://www.openml.org/api/v1/json/study/99 成员清单与入选标准
12 openml-python 仓库 https://github.com/openml/openml-python 安装方式、最短示例、引用格式

附录 D:任务代码

任务一:把数据集列表从头翻到尾,只留服务端算好的标量

import json, time, urllib.request

BASE = "https://www.openml.org/api/v1/json"
STEP = 500

def fetch(url):
    req = urllib.request.Request(url, headers={"User-Agent": "qf-checker/1.0"})
    with urllib.request.urlopen(req, timeout=60) as r:
        return json.loads(r.read().decode("utf-8", "replace"))

rows, offset = [], 0
while True:
    batch = fetch(BASE + "/data/list/limit/" + str(STEP) + "/offset/" + str(offset))["data"]["dataset"]
    if not batch:
        break                       #-- 返回空列表即到达末尾
    for it in batch:
        q = {x["name"]: x["value"] for x in it.get("quality", [])}
        rows.append((it["did"], it["name"], it.get("status"), q.get("NumberOfInstances")))
    offset += STEP
    time.sleep(0.3)                 #-- 深分页要给服务端留余量
print(len(rows), rows[0], rows[-1])

任务二:先看元数据,再决定是否下载

import openml

ds = openml.datasets.get_dataset(61)
print(ds.version, ds.dataset_id, ds.md5_checksum)
print(ds.qualities)                 #-- 服务端自动算出的标量,可直接作为方法节依据

X, y, cat, names = ds.get_data(target="class")
print(len(X), len(names), sum(cat))  #-- 最后一项是类别型列的个数

这段想说的不是「怎么加载」,而是「先读什么」。出问题的情形几乎都发生在跳过字段检查就开跑:拿到的是别人的旧版本,或者忘记排除 “row_id_attribute” 所指的列。

附录 E:如果只记五件事

序号 记住什么 为什么
1 数据集 6697、任务 48892、流程 123742、运行 800 万以上 这四个数定义了它的外形:数据不算多,实验记录极多
2 任务才是聚合键 同名数据集可以对应多个任务,按名字比分数等于比两个不同的东西
3 许可逐个看 licence 是上传者自填的自由文本,平台不提供统一担保
4 服务端重算让历史结果可比 同一任务上的分数由统一实现评分,省下重跑基线的成本
5 可复现有上限 数值库、操作系统与硬件的差异仍在,跨环境比较先锁版本

编辑说明

核验时间为 2026 年 10 月 29 日。方式为命令行请求官网与文档站页面,并逐段分页调用 data/list、task/list、flow/list、run/list、tasktype/list、evaluationmeasure/list、data/61、study/99 等 REST 接口。四个规模数字均以「分页到返回体报无结果」为终止条件,其中运行数量因服务端在更深的偏移量上返回网关超时而只给下界。

未覆盖的部分包括:全站学科构成、各任务类型上的运行数量分布、每条 flow 在当前主流版本中能否顺利重建、被停用对象的清单。前三项即使能取得也属于自行聚合的分布性统计,按本文的数字纪律不予给出,此处列出只为标明边界。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • uci-ml-repository — 共享标签:机器学习 / 评测基准
  • alma-archive — 共享标签:评测基准
  • i2b2-n2c2-nlp — 共享标签:评测基准
  • cblue — 共享标签:评测基准
  • blurb — 共享标签:评测基准
  • tus-rec — 共享标签:评测基准
  • biosses — 共享标签:评测基准
  • tg3k — 共享标签:评测基准
  • qmugs — 共享标签:评测基准
  • openpros — 共享标签:评测基准

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集