ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Kats GetMetaData 模块详解:为时间序列生成特征、最优超参数与最佳模型元数据

Kats GetMetaData 模块详解:为时间序列生成特征、最优超参数与最佳模型元数据 数据分析机器学习数据科学【免费下载链接】KatsKats, a kit to analyze time series data, a lightweight, easy-to-use, generalizable, and extendable framework to perform time series analysis, from understanding the key statistics and characteristics, detecting change points and anomalies, to forecasting future trends.项目地址https://gitcode.com/gh_mirrors/ka/Kats点击查看免费下载导读GetMetaData是 Kats 元学习meta-learning体系的核心数据生成模块位于 get_metadata.py。它把任意一条单变量时间序列转换为元数据——包括时间序列特征向量、各候选模型的最优超参数与对应误差、以及该序列上的最佳预测模型——为后续的元学习模型选择MetaLearnModelSelect与可预测性评估MetaLearnPredictability提供标准化的训练样本。读完本文你将掌握GetMetaData的完整参数体系、元数据的五字段结构、底层超参数调优与并行执行原理并能独立为任何时间序列生成可直接用于元学习训练的元数据。1. 什么是时序元数据Kats 将一条时间序列的元数据定义为以下三部分见 get_metadata.py 的模块 docstring时间序列特征features由TsFeatures计算的特征向量如熵、季节性特征、基于 ACF/PACF 的特征等最优超参数与误差hpt_res每个候选模型在该序列上的最优超参数组合及对应预测误差最佳模型best_model在给定误差指标下表现最好的候选模型名称。这条元数据描述了什么样的时间序列适合什么样的模型是元学习框架赖以训练分类器的原始素材。2. 模块结构与核心数据结构2.1 候选模型与参数注册表模块顶层定义了两个全局字典分别注册默认候选模型类与其对应的参数类get_metadata.pycandidate_models { arima: ARIMAModel, holtwinters: HoltWintersModel, prophet: ProphetModel, theta: ThetaModel, stlf: STLFModel, sarima: SARIMAModel, } candidate_params { arima: ARIMAParams, holtwinters: HoltWintersParams, prophet: ProphetParams, theta: ThetaParams, stlf: STLFParams, sarima: SARIMAParams, }其中candidate_models的键是字符串模型名值是模型类继承自抽象类kats.models.Modelcandidate_params的键与前者一致值是对应的参数类继承自kats.consts.Params。两者的键集合必须严格一致否则初始化会抛出ValueError见_validate_models。2.2 误差指标白名单ALLOWED_ERRORS [mape, smape, mae, mase, mse, rmse]error_method参数只能取这六个值之一其他值会在初始化时被_validate_others拒绝。2.3 返回结构 GetMetaDataValget_meta_data()返回一个dataclass类型GetMetaDataValget_metadata.py包含五个字段字段类型含义hpt_resDict[str, Any]每个候选模型的最优超参数与对应误差featuresDict[str, float]时间序列特征向量best_modelstr最佳候选模型名称search_methodstr使用的超参数搜索方法GridSearch/RandomSearch/BayesOptimalSearch/Otherserror_methodstr模型评估使用的误差指标测试用例通过set(vars(res).keys())断言这五个字段见 test_metalearner.py因此可通过res.hpt_res、res.best_model等属性方式访问。3. GetMetaData 构造参数详解构造函数签名如下get_metadata.pyGetMetaData( data: TimeSeriesData, all_models: Dict[str, Any] candidate_models, all_params: Dict[str, Any] candidate_params, min_length: int 30, scale: bool True, method: SearchMethodEnum SearchMethodEnum.RANDOM_SEARCH_UNIFORM, executor: Any None, error_method: str mae, num_trials: int 5, num_arms: int 4, **kwargs, )参数类型默认值说明dataTimeSeriesData必填输入时间序列必须是kats.consts.TimeSeriesData对象且为单变量序列all_modelsDict[str, Model]candidate_models候选模型类字典键为模型名值为模型类all_paramsDict[str, Params]candidate_params与all_models键一一对应的参数类字典min_lengthint30时间序列最小长度短于此长度的序列直接报错scaleboolTrue是否将序列按最大值缩放每个值除以序列最大值methodSearchMethodEnumRANDOM_SEARCH_UNIFORM超参数搜索方法默认在默认参数空间内随机搜索executorCallableNone并行执行器默认使用 Python 原生multiprocessing实现error_methodstrmae模型评估误差指标可选mape、smape、mae、mase、mse、rmsenum_trialsint5超参数搜索的试验轮数num_armsint4每轮搜索生成的参数组合arm数量executor参数比较特殊如果传入一个包含tune_executor键的字典会使用自定义调优执行器否则使用默认执行器get_metadata.py。4. 快速上手为一条时间序列生成元数据官方教程 kats_204_metalearning.ipynb 以air_passengers数据为例演示了完整用法。首先加载数据并构造TimeSeriesDataimport pandas as pd from kats.consts import TimeSeriesData air_passengers_df pd.read_csv(kats/data/air_passengers.csv) air_passengers_df.columns [time, value] air_passengers_ts TimeSeriesData(air_passengers_df)然后构造GetMetaData对象这里除了将误差指标改为mape外全部使用默认设置from kats.models.metalearner.get_metadata import GetMetaData # 创建对象 MD误差指标使用 MAPE默认是 MAE MD GetMetaData(dataair_passengers_ts, error_methodmape)检查默认候选模型与参数字典MD.all_models # {arima: kats.models.arima.ARIMAModel, # holtwinters: kats.models.holtwinters.HoltWintersModel, # prophet: kats.models.prophet.ProphetModel, # theta: kats.models.theta.ThetaModel, # stlf: kats.models.stlf.STLFModel, # sarima: kats.models.sarima.SARIMAModel} MD.all_params # 键与 all_models 一致值分别为 ARIMAParams、HoltWintersParams、ProphetParams、 # ThetaParams、STLFParams、SARIMAParams调用get_meta_data()生成元数据内部会自动完成各模型的超参数调优无需手动调用tune_executorair_passengers_metadata MD.get_meta_data()返回结果包含五个字段其中search_method与error_method记录本次实验的搜索方法与误差指标air_passengers_metadata.search_method # RandomSearch默认 RANDOM_SEARCH_UNIFORM 的对外名称 air_passengers_metadata.error_method # mapehpt_res的键与all_models/all_params的键完全一致每个键对应的值形如(最优参数 dict, 该参数下的误差值)best_model则是按误差值排序后选出的最优模型名。你也可以分两步执行先调tune_executor()得到各模型的最优超参数与误差再调get_meta_data()汇总全部元数据hpt_res MD.tune_executor() # 各候选模型的最优超参数与误差 my_meta_data MD.get_meta_data() # 完整元数据特征 超参数 最佳模型 搜索方法与误差指标5. 底层执行流程剖析GetMetaData从初始化到产出元数据共经历五个阶段均在 get_metadata.py 中实现。5.1 输入校验_validate_data / _validate_models / _validate_others输入必须是TimeSeriesData且data.value必须是pd.Series单变量否则抛ValueError序列长度必须 ≥min_length默认 30序列不能是常数序列nunique() 1时报错序列不能包含NaN、inf或-infall_models与all_params的键集合必须一致error_method必须在ALLOWED_ERRORS白名单内。这些边界条件都被 test_metalearner.py 逐一覆盖非TimeSeriesData输入、多元序列、过短序列、常数序列、含NaN/inf的序列都会在初始化时抛出ValueError。5.2 缩放与数据划分若scaleTrue序列的每个值都会除以序列最大值使数值落在[0, 1]附近从而让特征与误差在不同量纲的序列间可比_scaleget_metadata.py。随后按 8:2 比例划分为训练集与测试集get_metadata.pysplit_idx int(len(self.data) * 0.8) self.train_series ... # 前 80% 用于拟合候选模型 self.test_series ... # 后 20% 用于评估预测误差5.3 并行超参数调优tune_executortune_executor()使用ThreadPool并行地对每个候选模型独立调参get_metadata.pynum_process min(len(self.all_models), (cpu_count() - 1) // 2) if num_process 1: num_process 1 pool ThreadPool(processesnum_process)进程数取模型数量与(CPU 核数 - 1) / 2的较小值且至少为 1。每个模型通过pool.apply_async提交给_tune_single最后汇总为{模型名: (最优参数, 误差)}的字典。5.4 单个模型的评估逻辑_tune_single_tune_singleget_metadata.py内部定义_evaluation_function对每组候选参数执行构造参数 → 建模型 → 拟合 → 预测测试集 → 计算误差的完整链路若参数中包含seasonal_order且为字符串SARIMA 场景先通过ast.literal_eval解析为元组用single_params(**params)构造参数对象single_model(train_series, local_params)构造模型并fit()predict(stepstest_series 长度)得到预测值与真实值一起交给core_metric(error_method)计算误差任何异常模型不收敛、参数非法等都会返回np.inf保证调优过程不中断。调优搜索由SearchMethodFactory.create_search_method基于各模型自带的get_parameter_search_space()构建parameter_tuner tpt.SearchMethodFactory.create_search_method( parameterssingle_model.get_parameter_search_space(), selected_search_methodself.method, )当method GRID_SEARCH时用arm_count-1穷举全部参数组合其余方法随机搜索 / 贝叶斯搜索执行num_trials轮每轮生成num_arms组参数最终过滤掉NaN、±inf的误差取误差最小的参数组合作为该模型的最优结果。5.5 汇总元数据get_meta_dataget_meta_data()get_metadata.py依次完成调用TsFeatures(**tsfeatures_kwargs).transform(self.data)计算特征向量若特征含NaN会记录 warning调用tune_executor()完成全部候选模型的调优按hpt_res中各模型的误差值排序取误差最小的模型作为best_model将搜索方法映射为对外名称GRID_SEARCH → GridSearchRANDOM_SEARCH_UNIFORM / RANDOM_SEARCH_SOBOL → RandomSearchBAYES_OPT → BayesOptimalSearch其他 →Others封装为GetMetaDataVal返回。6. 超参数搜索方法SearchMethodEnum 与 SearchMethodFactorymethod参数的类型是kats.consts.SearchMethodEnum枚举定义见 consts.py枚举值含义GRID_SEARCH网格搜索穷举参数空间全部组合RANDOM_SEARCH_UNIFORM随机搜索均匀采样GetMetaData默认值RANDOM_SEARCH_SOBOL基于 Sobol 序列的随机搜索BAYES_OPT贝叶斯优化搜索NEVERGRAD基于 nevergrad 的进化式优化搜索对象的实例化统一走SearchMethodFactory.create_search_methodtime_series_parameter_tuning.pyGRID_SEARCH创建GridSearchRANDOM_SEARCH_UNIFORM/RANDOM_SEARCH_SOBOL创建RandomSearchBAYES_OPT创建BayesianOptSearchNEVERGRAD创建NevergradOptSearch。注意BAYES_OPT在创建时必须提供evaluation_function。GetMetaData内部统一以_evaluation_function作为评估函数传入。需要注意GetMetaData内部仅在GRID_SEARCH时使用arm_count-1一次性穷举随机与贝叶斯搜索则通过num_trials × num_arms次评估控制搜索预算因此在GetMetaData语境下num_trials5、num_arms4意味着每个候选模型默认最多被评估 20 次。7. 误差指标体系error_method 与 core_metricerror_method支持的六种指标与kats.metrics中的函数一一对应实际计算通过core_metric(error_method)(truth, predictions)完成get_metadata.py取值指标全称说明mae平均绝对误差默认值对异常值不敏感mape平均绝对百分比误差相对误差教程示例中使用smape对称平均绝对百分比误差对称化处理避免 MAPE 在真值为 0 时发散mase平均绝对缩放误差以朴素预测为基准的缩放误差mse均方误差对大误差惩罚更重rmse均方根误差MSE 的平方根与原序列同量纲指标查找函数core_metric定义于 metrics.py其支持的别名远不止六种如ae、ape、bias、mdae、rmsle等但GetMetaData出于超参数调优可比性的考虑只开放白名单内的六个核心指标。8. 元数据如何被下游模块消费8.1 元学习模型选择 MetaLearnModelSelectMetaLearnModelSelectmetalearner_modelselect.py把元数据当作监督学习数据集以features为输入、best_model为标签训练随机森林 / GBDT / SVM / KNN / 朴素贝叶斯分类器。训练好的模型可以对新时间序列直接推荐最适合的预测模型mlms MetaLearnModelSelect(metadata_list) # metadata_list 由 GetMetaData 逐条生成 mlms.train(methodRandomForest, test_size0.1) mlms.pred(new_ts) # 返回推荐模型名 mlms.pred(new_ts, n_top3) # 返回前 3 名候选它要求每条元数据字典至少包含hpt_res、features、best_model三个键metalearner_modelselect.py正好对应GetMetaDataVal中的字段。8.2 官方样本数据 m3_meta_data.csv仓库自带的 m3_meta_data.csv 是 78 条 M3 序列的元数据样本教程指出 78 条远不足以训练高精度元学习模型仅用于熟悉框架。每行包含五列hpt_res、features、best_model、search_method、error_method。从样本内容可以看到各字段的实际形态hpt_res形如{arima: ({p: 3, d: 1, q: 2}, 0.0641...), holtwinters: ({seasonal_periods: 4, ...}, 0.0619...), ...}即每个模型名对应(最优参数, 误差)二元组features形如{length: 69, mean: 0.6436, var: 0.0354, entropy: 0.6046, ..., hw_gamma: 0.2631}包含 40 余项TsFeatures输出best_model该序列误差最小的模型名如stlf、prophet、arimasearch_methodRandomSearcherror_methodmape。由于 CSV 中以字符串形式存储字典加载后需用eval还原为真正的字典结构教程中的处理方式为import pandas as pd metadata_df pd.read_csv(kats/data/m3_meta_data.csv) def change_format(tmp): tmp[hpt_res] eval(tmp[hpt_res]) tmp[hpt_res][sarima][0][seasonal_order] eval( tmp[hpt_res][sarima][0][seasonal_order] ) tmp[features] eval(tmp[features]) return tmp metadata_df metadata_df.apply(change_format, axis1)8.3 依赖与导入说明get_metadata模块依赖ax-platform提供的贝叶斯优化与搜索空间能力因此 metalearner/init.py 用try/except ImportError包裹导入若未安装ax-platform会打印 warning 而非直接崩溃但这意味着超参数调优功能不可用。使用前请确保按仓库 requirements.txt 安装完整依赖。9. 测试验证行为契约一览kats/tests/models/test_metalearner.py 中的testMetaLearner类为本模块建立了明确的行为契约test_get_meta_data第 214-235 行用num_trials1、num_arms1以及缩减后的候选模型集合验证返回对象恰好包含hpt_res、features、best_model、search_method、error_method五个字段且hpt_res的键与候选模型集合一致test_inputdata_errors第 237-254 行非TimeSeriesData、多元序列、过短序列、常数序列、含NaN或inf的序列均在初始化阶段抛出ValueError。这些测试可作为你自定义all_models/all_params或接入新数据时的行为参考。10. 使用建议与注意事项数据前置条件序列必须是单变量TimeSeriesData、长度 ≥ 30、非常数、无NaN/inf。若序列太短可先降低min_length但过短序列的特征与误差估计都不可靠建议优先补充数据误差指标选择默认mae对量纲敏感若序列间量纲差异大mape/smape更适合作为元学习训练的统一评估口径官方教程即使用mape演示自定义模型字典all_models的键必须与all_params的键完全一致模型类需提供get_parameter_search_space()静态方法_tune_single依赖它构建搜索空间搜索预算随机/贝叶斯搜索下每个模型的评估次数约为num_trials × num_arms调大二者能提升调优质量但会线性增加耗时网格搜索会穷举全部组合慎用于参数空间较大的模型如 SARIMA元数据规模化get_meta_data()每次处理一条序列要构建元学习训练集需对多条序列循环调用并收集结果官方以m3_meta_data.csv的形式提供了该管线的产物样例安装前提确保ax-platform已安装否则模块导入时会告警且调优无法执行。总结GetMetaData把特征提取 超参数调优 模型选择三大耗时环节封装成一行调用是 Kats 元学习体系的数据入口。其输出的GetMetaDataVal五字段元数据既是MetaLearnModelSelect与MetaLearnPredictability的训练语料也可直接作为单条时间序列的模型选型结论独立使用。理解它的参数语义与执行流程是进一步掌握 kats_204_metalearning.ipynb 中端到端元学习建模的前提。赞分享数据分析机器学习数据科学【免费下载链接】KatsKats, a kit to analyze time series data, a lightweight, easy-to-use, generalizable, and extendable framework to perform time series analysis, from understanding the key statistics and characteristics, detecting change points and anomalies, to forecasting future trends.项目地址https://gitcode.com/gh_mirrors/ka/Kats点击查看免费下载相关推荐Kats 时间序列合成数据生成器Simulator 模块全解析Kats 时间序列合成数据生成器Simulator 模块全解析 导读 KatsKit to Analyze Time Series在 kats/utils数据分析机器学习数据科学tsfresh 时间序列特征全量清单feature_calculators 模块 76 个特征计算器详解与默认参数指南tsfresh 时间序列特征全量清单feature_calculators 模块 76 个特征计算器详解与默认参数指南 导读 本文以 tsfresh 官方文特征工程机器学习数据分析Kats时间序列特征提取指南TsFeatures模块的20个实用技巧想要 快速 掌握 时间序列特征提取 的核心技能吗Kats框架中的 TsFeatures模块 为你提供了完整的解决方案 作为Meta开源的轻量级时间序列分数据分析机器学习数据科学上一篇RuView WiFi 传感从零到实战onboard 三条路径选择指南与诚实度量原则下一篇AIRI DevLog 2025.03.10全新设置界面、主题色自定义与仓库组织拆分实战记录创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表