ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

auto-sklearn 元数据(Metadata)更新完整实战指南:从 OpenML 数据集到 ASLib 基准文件的七步流水线

auto-sklearn 元数据(Metadata)更新完整实战指南:从 OpenML 数据集到 ASLib 基准文件的七步流水线 人工智能AutoML机器学习【免费下载链接】auto-sklearnAutomated Machine Learning with scikit-learn项目地址https://gitcode.com/gh_mirrors/au/auto-sklearn点击查看免费下载导读本文基于 auto-sklearn 仓库中 scripts/readme.md 这一内部运维文档系统讲解如何从零构建一套全新的 auto-sklearn 元数据metadata基准数据包括在 OpenML 上选取大量分类/回归任务、批量运行自动机器学习配置搜索、提取每个数据集上的最优配置、计算数据集元特征metafeatures最终产出符合 ASLib 1.0 规范的一组文件。读完本文你将掌握仓库 scripts/ 目录下整套元数据生成流水线的每条命令、每个参数的含义与底层实现并理解这些元数据后续如何被 auto-sklearn 的元学习metalearning机制用于加速新任务的初始配置选择。一、为什么要更新元数据auto-sklearn 的元学习依赖auto-sklearn 的核心设计之一是利用历史任务的经验加速新任务当面对一个全新数据集时它会先计算该数据集的元特征再从预计算的元数据库中找到最相似的历史数据集用它们的历史最优配置作为 SMAC 贝叶斯优化的初始配置参见 autosklearn/smbo.py 中_calculate_metafeatures、_calculate_metafeatures_encoded的实现以及 autosklearn/metalearning/metalearning/kNearestDatasets 下的最近邻数据集检索逻辑。这份经验库就是仓库中 autosklearn/metalearning/files/ 目录下按指标_任务类型_稠密/稀疏例如accuracy_binary.classification_dense、r2_regression_dense组织的元数据目录每个目录内包含algorithm_runs.arff每个数据集上各算法配置的运行结果与状态configurations.csv各配置的超参数取值feature_values.arff各数据集的元特征值feature_runstatus.arff元特征计算状态feature_costs.arff元特征计算耗时description.txt、readme.txt场景与文件描述。因此当需要扩充数据集覆盖、更换性能指标或调整配置空间时就必须按本文的流水线重新生成这套元数据。原文档开头的注释 to be moved to the documentation 也说明它是一份长期维护的内部操作手册。二、七步流水线总览整个更新流程由 scripts/ 目录下的 5 个脚本串联而成步骤脚本作用1手工命令创建工作目录、设定任务类型2手工操作安装 OpenML Python 包并注册账号3scripts/01_create_commands.py生成所有配置运行命令并写入metadata_commands.txt4scripts/run_auto-sklearn_for_metadata_generation.py逐任务运行 auto-sklearn 配置搜索并验证配置5scripts/02_retrieve_metadata.py汇总每个任务的最优配置及其测试性能6scripts/03_calculate_metafeatures.py计算所有数据集的元特征7scripts/04_create_aslib_files.py组装 ASLib 1.0 格式的元数据文件整个流水线的输入是一批 OpenML 任务 ID输出则是若干ASLib 场景目录最终可被放入autosklearn/metalearning/files/供元学习使用。三、步骤 1创建工作目录并设定任务类型工作目录用于存放流水线全部中间产物与最终输出建议为每次更新单独建一个目录working_directory~/auto-sklearn-metadata/001 mkdir -p $working_directory任务类型决定本次更新的是分类还是回归元数据task_typeclassification或task_typeregression需要说明的是虽然脚本参数名为task-type但在脚本实现中它实际控制的是后续运行与汇总时按分类/回归分流如配置输出目录configuration/classification与configuration/regression的区分见 scripts/02_retrieve_metadata.py 与 scripts/03_calculate_metafeatures.py。任务清单本身则硬编码在 scripts/update_metadata_util.py 顶部的classification_tasks与regression_tasks两个列表中其中分类任务涵盖 OpenML 上的二分类与多分类任务如 232、236、258、146574、167202、211724 等回归任务以 OpenML 回归任务为主如 359997、360029、360033 等。如需更换数据集直接修改该文件即可。四、步骤 2安装 OpenML Python 包并注册账号本流水线依赖 OpenML 提供的任务托管平台。需要先安装 OpenML 官方 Python 包pip install openml并按照其手册完成账号注册与配置用于访问任务数据、数据集元数据及上传运行记录。原文档明确指出可参考 OpenML Python 包官方手册完成此步骤。由于流水线脚本大量调用openml.tasks.get_task、openml.datasets.get_dataset等 API见 scripts/update_metadata_util.py 中的load_task函数因此本步骤是后续命令能够执行的前提。五、步骤 3生成配置运行命令在步骤 1 的终端环境中执行python3 01_create_commands.py --working-directory $working_directory --task-type $task_type该脚本scripts/01_create_commands.py会遍历update_metadata_util.py中的任务 ID 列表对每个任务按指标列表生成一条run_auto-sklearn_for_metadata_generation.py的运行命令将所有命令逐行写入working_directory/metadata_commands.txt。以分类任务为例生成的一条典型命令形如python3 /path/to/scripts/run_auto-sklearn_for_metadata_generation.py \ --working-directory ~/auto-sklearn-metadata/001 \ --time-limit 86400 --per-run-time-limit 1800 \ --task-id 146574 -s 1 --metric accuracy其中硬编码的参数含义如下参数默认值脚本内说明--time-limit86400秒每个任务整个配置搜索的总时间预算即一天--per-run-time-limit1800秒单个配置评估单次运行的时间上限即 30 分钟--task-id来自任务列表OpenML 任务 ID-s / --seed1随机种子--metric按任务类型分类accuracy、balanced_accuracy、roc_auc、logloss回归r2、root_mean_squared_error、mean_absolute_error脚本内部还包含两个值得注意的逻辑roc_auc的跳过规则当任务的类别数大于 2多分类时roc_auc指标对应的命令会被跳过len(openml.tasks.get_task(task_id, download_dataFalse).class_labels) 2 and metric roc_auc因为该指标仅适用于二分类--test冒烟测试模式01_create_commands.py支持--test参数此时仅对 3 个分类任务233、245、258与 2 个回归任务360029、360033生成命令用于快速验证流水线连通性避免在真正的大规模运行前浪费资源。按原文档说明如需调整单次配置的搜索时长可以直接编辑写入磁盘的metadata_commands.txt文件。六、步骤 4运行全部配置搜索建议并行生成的命令可部署到任意计算资源上运行。由于每个任务彼此独立强烈建议并行执行所有命令否则完成全部任务的耗时将不可接受。每条命令的执行入口是 scripts/run_auto-sklearn_for_metadata_generation.py其内部工作流为调用update_metadata_util.load_task(task_id)从 OpenML 拉取训练/测试划分、特征类型与数据集名称按任务类型实例化AutoSklearnClassifier或AutoSklearnRegressorautosklearn/classification.py、autosklearn/regression.py并配置以下关键参数resampling_strategypartial-cv正式运行时folds1010 折交叉验证评估--unittest测试模式下降为 2 折并限制算法子集分类仅用libsvm_svc回归仅用extra_trees且均禁用预处理用于快速验证initial_configurations_via_metalearning0元数据生成过程刻意禁用元学习初始配置以保证采样的配置独立、无偏ensemble_classNone、ensemble_nbest0不构建集成聚焦于单个配置的性能memory_limit3072MB、disable_evaluator_outputTrue、delete_tmp_folder_after_terminateFalse等执行automl.fit(...)完成配置搜索并从automl.trajectory_取出优化轨迹SMAC 记录的每个 incumbent 配置逐配置回放验证test 重采样对轨迹中的每个 incumbent使用fit_pipeline(resampling_strategytest)在完整训练集上重新训练并在测试集上评估同时计算CLASSIFICATION_METRICS/REGRESSION_METRICS全部指标将结果含任务 ID 与全部指标得分追加到validated_trajectory将验证轨迹写入working_directory/configuration/task_type/task_id/metric/validation_trajectory_seed.json并把 auto-sklearn 输出目录复制到同目录下的auto-sklearn-output最后清理临时目录。这里的validation_trajectoryJSON 是整条流水线的核心中间产物——它记录了每个配置在测试集上的完整表现供步骤 5 汇总使用。七、步骤 5提取每个任务的最优配置及测试性能当所有配置运行结束后执行python3 02_retrieve_metadata.py --working-directory $working_directory --task-type $task_type该脚本scripts/02_retrieve_metadata.py会遍历configuration/task_type/*/*/validation_trajectory_*.json对每个任务执行以下处理过滤默认配置跳过与默认配置相同的条目注释说明默认配置无论如何都会在元学习时被运行无需保留选取最优配置按指定指标entry[-1].get(str(metric), np.inf)缺失时视为无穷大追踪最小化/最优得分仅保留优于默认配置且可合法构建的配置配置补全与去激活利用ConfigSpace为缺失超参数填入默认值再通过deactivate_inactive_hyperparameters去激活条件超参数不适用该配置分支的超参数保证配置在后续元学习中可被完整复用配置去重与编号相同配置跨任务共享同一config_id从 0 开始计数写入文件时1按(sparse, task, metric)三个维度遍历分类{0,1} × {二分类, 多分类} × CLASSIFICATION_METRICS回归{0,1} × {回归} × REGRESSION_METRICS为每个组合生成一组输出。每个组合输出到working_directory/configuration_results/metric_task_sparse|dense/下的三个文件algorithm_runs.arffASLib 的算法运行表属性为instance_id、repetition、algorithm、指标名、runstatusok/timeout/memout/not_applicable/crash/other非有限得分标记为not_applicableconfigurations.csv各配置 ID 对应的超参数取值idx列 按配置空间排序的超参数列仅保留实际被采用的配置description.results.txt记录algorithms_deterministic本场景中所有配置均视为确定性算法、algorithms_stochastic、performance_measures即所用指标与performance_typesolution_quality。说明脚本中retrieve_matadata的cutoff与only_best参数目前仅支持only_bestTrue、cutoff0的路径其余分支抛出NotImplementedError即当前实现刻意只保留每任务最优配置以避免原始数据中的冗余信息。八、步骤 6计算数据集元特征执行python3 03_calculate_metafeatures.py --working-directory $working_directory --task-type $task_type该脚本scripts/03_calculate_metafeatures.py对任务列表中的每个数据集计算元特征输出到working_directory/metafeatures/task_type/。其实现要点两套元特征计算分别调用autosklearn.smbo中的_calculate_metafeatures基于原始特征与_calculate_metafeatures_encoded基于类别编码后的特征并将两套结果合并mf.metafeature_values.update(...)。元特征本身定义在 autosklearn/metalearning/metafeatures/metafeatures.py涵盖数据集统计、信息论、landmarking 等类别任务类型判定分类任务按y_train的唯一类别数判定为二分类或多分类len(np.unique(y_train)) 2随后依据 autosklearn/smbo.py 中EXCLUDE_META_FEATURES_CLASSIFICATION/EXCLUDE_META_FEATURES_REGRESSION排除不适用于该任务类型的元特征例如分类的NumberOfClasses、ClassOccurences在回归中被排除而 landmarking 与 PCA 相关特征在两类中均被排除joblib 磁盘缓存使用joblib.Memory缓存每个任务的计算结果重复运行可复用输出目录为系统临时目录下的joblib文件夹ASLib 三件套输出feature_values.arffinstance_idrepetition 各元特征数值列feature_runstatus.arff按元特征依赖关系metafeatures.metafeatures.get_dependency组织的特征步骤计算状态feature_costs.arff各特征步骤的计算耗时汇总另附calculation_times.csv每个元特征逐任务耗时可直接用表格软件查看与description.features.txt包含features_cutoff_time3600、features_cutoff_memory、特征步骤列表、features_deterministic等描述。脚本还支持--memory-limit默认 3072 MB与--test-mode仅计算任务列表中第一个任务两个可选参数。九、步骤 7生成 ASLib 元数据文件最后一步执行python3 04_create_aslib_files.py --working-directory $working_directory --task-type $task_type该脚本scripts/04_create_aslib_files.py把步骤 5 与步骤 6 的产物组装为最终 ASLib 场景输出到working_directory/metadata/下目录命名为metric_task_sparse|dense与仓库 autosklearn/metalearning/files/ 中的组织方式一一对应。组装过程包括合并description.features.txt与description.results.txt并追加scenario_id、maximize: false、algorithm_cutoff_time、algorithm_cutoff_memory等场景级描述复制feature_values.arff、feature_runstatus.arff、feature_costs.arff、algorithm_runs.arff与configurations.csv并为各 ARFF 文件的relation加上scenario_id前缀对feature_costs.arff的数值保留 5 位小数生成空的readme.txt占位文件。该脚本支持三个可调参数参数默认值说明--scenario_idauto-sklearn场景标识会写入description.txt并作为 ARFF relation 前缀--algorithm_cutoff_time1800秒场景声明的算法运行截止时间与步骤 3 的per-run-time-limit一致--algorithm_cutoff_memory3072MB场景声明的内存截止上限与运行脚本中的memory_limit一致十、元数据更新后的验证与落地完成第 7 步后working_directory/metadata/下的每个场景目录即可视为一份完整的 ASLib 1.0 基准可与仓库autosklearn/metalearning/files/中既有目录如accuracy_binary.classification_dense、log_loss_multiclass.classification_dense、mean_squared_error_regression_dense等比对检查格式一致性。为降低风险正式大规模运行前建议先做一次冒烟测试使用01_create_commands.py --test生成少量命令用run_auto-sklearn_for_metadata_generation.py --unittest快速跑通单个任务并用03_calculate_metafeatures.py --test-mode验证元特征计算链路确认全部产出文件合法后再放开完整任务列表。这些元数据最终被 auto-sklearn 的元学习组件消费在 autosklearn/smbo.py 中新任务到来时计算其元特征再经 autosklearn/metalearning/metalearning/kNearestDatasets 选出最相似的既有数据集以其历史最优配置作为 SMAC 的初始候选initial_configurations_via_metalearning从而显著减少新任务上的无效搜索。这也正是本文整套流水线的价值所在——更新的元数据越丰富、越准确auto-sklearn 在新数据集上的启动表现就越有保障。结语一次元数据更新的最小行动清单总结下来一次完整的元数据更新只需要记住五条命令# 1. 准备 working_directory~/auto-sklearn-metadata/001 mkdir -p $working_directory task_typeclassification # 或 regression # 2. 生成命令 python3 01_create_commands.py --working-directory $working_directory --task-type $task_type # 3. 并行执行 metadata_commands.txt 中的全部命令 # 4. 汇总配置性能 python3 02_retrieve_metadata.py --working-directory $working_directory --task-type $task_type # 5. 计算元特征 python3 03_calculate_metafeatures.py --working-directory $working_directory --task-type $task_type # 6. 组装 ASLib 文件 python3 04_create_aslib_files.py --working-directory $working_directory --task-type $task_type每一条命令的输入、输出与关键参数都已在上文逐条拆解配合仓库 scripts/ 目录下的完整实现你可以按需扩展任务列表、更换指标或调整时间预算构建属于自己的 auto-sklearn 元数据库。赞分享人工智能AutoML机器学习【免费下载链接】auto-sklearnAutomated Machine Learning with scikit-learn项目地址https://gitcode.com/gh_mirrors/au/auto-sklearn点击查看免费下载相关推荐ParadeDB 基准测试数据集制备指南从 S3 源数据到 pgBackRest 快照的完整流水线ParadeDB 基准测试数据集制备指南从 S3 源数据到 pgBackRest 快照的完整流水线 本文是 ParadeDB 基准测试框架 benchmar数据库搜索引擎全文检索向量数据库后端PaddleNLP 数据集与数据处理完整指南从 load_dataset 到 DataLoader 的四步流水线PaddleNLP 数据集与数据处理完整指南从 load_dataset 到 DataLoader 的四步流水线 数据集与数据处理是 NLP 任务中最重要也最人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPnnU-Net 新数据集实战指南从数据准备、自动配置、五折训练到推理部署的完整流水线nnU Net 新数据集实战指南从数据准备、自动配置、五折训练到推理部署的完整流水线 导读 本文以 nnUNet 仓库中的 how_to_use_nnunet人工智能深度学习计算机视觉医疗健康上一篇Unleash 后端开发指南Node.js/TypeScript 下的 CSR 架构、开发环境与数据库迁移实战下一篇VictoriaMetrics 2020 年度版本演进全解析从 v1.42 到 v1.51 的关键特性、性能优化与修复创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进