尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
使用全新数据构建 SVR 时间序列预测模型:ML-For-Beginners 支撑向量回归扩展任务完整实战指南
使用全新数据构建 SVR 时间序列预测模型ML-For-Beginners 支撑向量回归扩展任务完整实战指南【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners本指南围绕 ML-For-Beginners 课程《7-TimeSeries / 3-SVR》的课后扩展任务assignment.md本仓库随附孟加拉语翻译版展开在已经掌握 SVR 建模流程的基础上用一套全新的时间序列数据重新构建 SVR 模型并在 notebook 中完成数据可视化、模型评估MAPE与超参数kernel、gamma、C、epsilon和 timesteps 的调优实验。读完本文你将掌握一套可直接复用的 SVR 时序建模工作流包括滑动时间窗构造、Min-Max 归一化、模型拟合与反归一化评估以及如何用网格试探法系统性寻找更优配置。任务是什么一节换个数据集再做一遍的巩固性作业这份 assignment 是整个课程第 7 单元第 3 课SVRSupport Vector Regressor的收官练习。它位于 7-TimeSeries/3-SVR/assignment.md原文在文本注解中明确说明其任务模板源于本单元第 2 课 ARIMA 的 assignment。该作业的本质是前提你已经跟随 3-SVR 课程正文 用 GEFCom 2014 能源负荷数据构建过一个 SVR 模型目标不要复用示例数据而是挑选一套新的时间序列数据集独立走完 数据加载 → 训练/测试划分 → 归一化 → 时间窗切分 → SVR 建模 → 反归一化 → 可视化 MAPE 评估 的完整链路附加实验分别调整 SVR 的关键超参数gamma、C、epsilon并尝试不同的timesteps取值观察并记录它们对预测精度的影响产出一份带注释的 notebook其中模型、可视化与精度结论并存作为可评分的交付物。因此这篇作业检验的不是会不会调包而是对 SVR 时序预测整个流程的独立理解数据为什么要这么切、窗口为什么要这么滑、归一化为什么在预测后要逆回去、MAPE 高低的含义是什么。下面先从课程参考实现入手把基线流程拆清楚再给出在新数据集上完成任务的行动清单。先回顾基线SVR 为什么适合时序预测从回归、SVM 到 SVR课程正文 README.md 用三个递进概念解释 SVR 的定位回归Regression监督学习的一种从一组输入预测连续值本质是在特征空间中拟合一条经过最多数据点的曲线或直线支持向量机SVM用于分类、回归和异常检测的监督模型在特征空间中表现为一个超平面——分类时它是决策边界回归时它是最佳拟合线。SVM 通常借助核函数将数据映射到更高维空间使其更容易被线性分离支持向量回归SVRSVM 家族中用于回归的成员目标是找到包含最多数据点的最佳拟合线超平面。何时该用 SVR 而不是 ARIMA同一课程单元中第 2 课介绍了 ARIMA 这一经典统计线性方法。课程指出很多时序数据天然存在非线性特征线性模型无法刻画而 SVM/SVR 由于能在回归中考虑数据非线性通过核函数因此在时序预测场景中往往表现更佳。这就是本节作业假设你已经理解的技术背景——当面对带明显周期与非线性波动的新数据集时SVR 是一个值得优先尝试的回归器。基线参考实现全拆解直接继承课程代码新作业要求你独立复现的流程正是 working/notebook.ipynb 中演示过的内容同目录 solution/notebook.ipynb 为完整参考答案。逐段拆解如下。第 0 步导入依赖与工具函数import sys sys.path.append(../../)import os import warnings import matplotlib.pyplot as plt import numpy as np import pandas as pd import datetime as dt import math from sklearn.svm import SVR from sklearn.preprocessing import MinMaxScaler from common.utils import load_data, mape注意最后一行from common.utils import load_data, mape——课程把公共函数收敛在 7-TimeSeries/common/utils.py。其中load_data(data_dir)utils.py读取energy.csv把timestamp列解析为日期并设为索引再以freqH逐小时对最小到最大时间戳做reindex用于暴露缺失时间段返回以时间为索引、只含load/temp等特征列的数据框。mape(predictions, actuals)utils.py实现平均绝对百分比误差其定义为(|predictions - actuals| / actuals).mean()。后续所有精度表述均出自该函数。第 1 步加载并整体可视化数据示例使用课程数据 7-TimeSeries/data/energy.csv约 2.6 万行逐小时记录含timestamp, load, temp三列load为待预测的能源负荷energy load_data(../../data)[[load]]energy.plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()这一步对应作业要求中的可视化你的数据在新数据集上第一件事永远是画出完整序列观察趋势、季节性、异常点与缺失情况。第 2 步按时间先后划分训练集与测试集课程特别强调了一个易被忽略的原则测试集在时间上必须晚于训练集。否则模型相当于偷看了未来属于数据泄漏/过拟合。参考实现的划分如下train_start_dt 2014-11-01 00:00:00 test_start_dt 2014-12-30 00:00:00energy[(energy.index test_start_dt) (energy.index train_start_dt)][[load]].rename(columns{load:train}) \ .join(energy[test_start_dt:][[load]].rename(columns{load:test}), howouter) \ .plot(y[train, test], figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()随后按时间段过滤出各自的load列train energy.copy()[(energy.index train_start_dt) (energy.index test_start_dt)][[load]] test energy.copy()[energy.index test_start_dt][[load]] print(Training data shape: , train.shape) print(Test data shape: , test.shape)输出为Training data shape: (1416, 1)、Test data shape: (48, 1)即训练集含约 59 天逐小时样本测试集含最后 48 个逐小时样本。第 3 步归一化到 (0,1) 区间SVR 对特征尺度敏感必须统一量纲。参考实现使用MinMaxScaler默认将数据映射到 [0,1]scaler MinMaxScaler() train[load] scaler.fit_transform(train)test[load] scaler.transform(test)关键细节fit_transform只在训练集上执行一次fit测试集只用transform。原因是归一化的统计量min/max来自训练集分布若把测试集也纳入fit等于测试信息提前泄漏进预处理环节——这与时间先后划分遵循的是同一原则。完成评估、做逆变换时二者共用同一个scaler才能还原出真实量纲的预测值。第 4 步用滑动时间窗构造[样本, 时间步]张量SVR 的输入是二维张量形式为[batch, timesteps]。为了让模型看到历史序列而不是单个点需把一维序列重排成滑动窗口样本。课程取timesteps 5语义是用前 4 个时刻的值预测第 5 个时刻的值。# Converting to numpy arrays train_data train.values test_data test.valuestimesteps 5用嵌套列表推导构造窗口train_data_timesteps np.array([[j for j in train_data[i:itimesteps]] for i in range(0, len(train_data)-timesteps1)])[:,:,0] train_data_timesteps.shape # 输出 (1412, 5)1416 - 5 1 1412 个窗口test_data_timesteps np.array([[j for j in test_data[i:itimesteps]] for i in range(0, len(test_data)-timesteps1)])[:,:,0] test_data_timesteps.shape # 输出 (44, 5)48 - 5 1 44 个窗口随后把每个窗口的前timesteps-1列作为特征X、最后一列作为标签yx_train, y_train train_data_timesteps[:, :timesteps-1], train_data_timesteps[:, [timesteps-1]] x_test, y_test test_data_timesteps[:, :timesteps-1], test_data_timesteps[:, [timesteps-1]] print(x_train.shape, y_train.shape) # (1412, 4) (1412, 1) print(x_test.shape, y_test.shape) # (44, 4) (44, 1)体会这个形状变化原始 1416 个点被切成 1412 个长度为 5 的窗口每个窗口又拆成 4 个输入 1 个输出。timesteps就是你让模型回看多长历史的超参数这正是作业要求你反复调整它的原因——窗口太短看不到周期性太长则浪费数据并加剧边缘截断。第 5 步实例化 SVR 并拟合课程采用 RBF径向基核设置gamma0.5, C10, epsilon0.05model SVR(kernelrbf, gamma0.5, C10, epsilon0.05)model.fit(x_train, y_train[:, 0])拟合后打印出的完整参数集为SVR(C10, cache_size200, coef00.0, degree3, epsilon0.05, gamma0.5, kernelrbf, max_iter-1, shrinkingTrue, tol0.001, verboseFalse)流程上遵循三步定义模型传超参数→fit()拟合训练数据 →predict()预测。第 6 步预测并反归一化y_train_pred model.predict(x_train).reshape(-1,1) y_test_pred model.predict(x_test).reshape(-1,1) print(y_train_pred.shape, y_test_pred.shape) # (1412, 1) (44, 1)评估前先把预测值和真实值从 [0,1] 还原回原始量纲# Scaling the predictions y_train_pred scaler.inverse_transform(y_train_pred) y_test_pred scaler.inverse_transform(y_test_pred) # Scaling the original values y_train scaler.inverse_transform(y_train) y_test scaler.inverse_transform(y_test)还原时间戳时注意第一个输出的时间对应窗口末尾因此取原始时间轴的第timesteps-1个索引之后的部分train_timestamps energy[(energy.index test_start_dt) (energy.index train_start_dt)].index[timesteps-1:] test_timestamps energy[test_start_dt:].index[timesteps-1:] print(len(train_timestamps), len(test_timestamps)) # 1412 44第 7 步可视化 MAPE 评估训练集上绘制实际 vs 预测曲线并计算 MAPEplt.figure(figsize(25,6)) plt.plot(train_timestamps, y_train, colorred, linewidth2.0, alpha0.6) plt.plot(train_timestamps, y_train_pred, colorblue, linewidth0.8) plt.legend([Actual,Predicted]) plt.xlabel(Timestamp) plt.title(Training data prediction) plt.show()print(MAPE for training data: , mape(y_train_pred, y_train)*100, %) # MAPE for training data: 1.7195710200875551 %测试集上同样操作plt.figure(figsize(10,3)) plt.plot(test_timestamps, y_test, colorred, linewidth2.0, alpha0.6) plt.plot(test_timestamps, y_test_pred, colorblue, linewidth0.8) plt.legend([Actual,Predicted]) plt.xlabel(Timestamp) plt.show()print(MAPE for testing data: , mape(y_test_pred, y_test)*100, %) # MAPE for testing data: 1.2623790187854018 %参考实现还额外用全量数据回测整体表现对整个序列构造窗口26300 个→ 预测 → 反归一化 → 绘图 → 打印 MAPE约 2.057%。基线实验的结论是训练集 MAPE ≈ 1.72%、测试集 MAPE ≈ 1.26%、全量回测 ≈ 2.06%说明该配置下 SVR 预测精度相当不错。注意 MAPE 计算发生在反归一化之后量纲一致才是有效百分比。在新数据集上独立完成任务可执行的行动清单拿到作业后按下面五步推进即可覆盖全部要求。1. 选数据单变量、连续、长度适中的时序assignment 建议试试新的数据集。选型时把握三个可自检的条件单变量可预测目标SVR 基线流程只对单一连续列如负荷、销量、温度、水位做回归多列数据需自行扩展特征不建议作为首次作业时间等间隔连续参考流程基于逐小时索引若新数据按天/月采样需相应调整重采样口径load_data中的freqH是 energy 专属设定新数据要按自身频率处理见 utils.py样本量充足时间窗会截掉头尾timesteps-1个点数据过短会导致窗口样本稀少评估不稳定。2. 写清数据说明 划分理由作业评分看重解释性。在 notebook 中至少写清三件事数据来源与含义、采样频率、时间跨度训练/测试的时间切点是什么、为什么测试段在时间上晚于训练段防止未来信息泄漏为什么要归一化、为什么只对训练集fit缩放器、为什么要反归一化再算 MAPE。3. 完成可视化 建模 评估三段式把上文第 17 步完整迁移到新数据原始序列图 → 训练/测试分割图 → 训练/测试预测对比图红线实际、蓝线预测并分别在训练集与测试集上打印mape(...)*100得到的百分比。只有当预测曲线与真实曲线在图上肉眼可对齐、且 MAPE 数值合理时模型有效这一结论才成立。4. 做超参数实验kernel / gamma / C / epsilon课程的 Challenge 与作业的tweak the hyperparameters直接对应。推荐用固定控制变量的方式逐组试验每组都记录测试集 MAPE超参数含义与影响标准 SVR 语义试参建议kernel核函数类型决定非线性映射方式可选linear/poly/rbf/sigmoid至少对比rbf与linear观察非线性核是否有收益gamma影响单个训练样本的作用半径对 RBF 核尤为关键越大拟合越紧、越易过拟合越小曲线越平缓在0.01 / 0.1 / 0.5 / 1 / 10量级间扫C误差惩罚系数越大越不容忍训练误差易过拟合越小越强调模型平滑在1 / 10 / 100 / 1000量级间扫epsilonε-不敏感管的宽度管内的点不计误差越大对噪声越宽容、预测越平滑在0.01 / 0.05 / 0.1 / 0.5间扫参考实现的起点gamma0.5, C10, epsilon0.05在 energy 上表现良好换数据后最优组合大概率不同需要重扫。注意 C 与 epsilon 对 SVR 的训练时间也有影响数据集较大时可用小规模子集先快速探查再全量训练。5. 做timesteps实验改变回看历史的长度把窗口长度从 5 换成其他值例如 3、7、12、24需要同步注意三点窗口样本数变化n_windows n_samples - timesteps 1timesteps越大可用窗口越少输入/输出维度变化每个窗口被拆为timesteps-1个输入 1 个输出x的列数随之改变时间戳对齐变化输出时间从原时间轴的timesteps-1处开始对齐代码见上文第 6 步。对日/周周期明显的数据通常把timesteps设为接近一个周期如 24 小时或 7 天能显著提升精度这正是作业希望你通过实验发现的经验规律。逐组比较时请把结果整理成表例如timesteps12 时测试集 MAPE 从 x% 降到 y%。如何自查对照评分标准验收作业自带一份 Rubric 表原文翻译如下是唯一的验收标准标准优秀Exemplary合格Adequate需改进Needs Improvement综合提交的 notebook 完成了 SVR 模型的构建、测试与解释并配有可视化且注明了精度提交的 notebook 没有解释或存在错误bug提交的 notebook 不完整据此自查清单构建了代码能从头跑到尾fit与predict无报错测试了在训练集、测试集建议再补全量回测上都算了 MAPE 并给出结论性语句解释了每个关键代码块上方有注释/文字说明为什么这么做尤其是时间划分与归一化理由可视化了数据曲线与实际 vs 预测对比曲线齐全注明精度了MAPE 结果以百分比形式明确写出而非只有晦涩的输出。一句话验收标准随便拉一个没上过这课的人打开你的 notebook也能只凭文字与图表复述出整个建模逻辑——能就是 Exemplary。小结本次作业真正的技术要点可浓缩为一条完整链路原始序列 → 时间上严格后置的测试集划分 → 只对训练集拟合的 Min-Max 归一化 → 按timesteps滑窗构造[batch, timesteps]→ SVR(kernel/gamma/C/epsilon) 拟合与预测 → 反归一化 → 对齐时间戳绘图 → 用mape()量化精度 → 以测试集 MAPE 为准则系统性调参。仓库为你提供了三份可直接对照的参照物课程正文含全部代码、working 手写练习版 notebook、solution 参考答案 notebook公共实现load_data与mape在 7-TimeSeries/common/utils.py示例数据在 7-TimeSeries/data/energy.csv。照此把同一套方法论迁移到你的新数据集上并用上面的自查清单验收即可高质量完成本作业——同时真正掌握SVR 时间窗 网格调参这一可复用到大量单变量预测场景的通用技能。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

rustc 错误码 E0505 全解:在值仍被借用(borrowed)时将其移动(move)的成因、修复与编译器实现

rustc 错误码 E0505 全解:在值仍被借用(borrowed)时将其移动(move)的成因、修复与编译器实现

rustc 错误码 E0505 全解:在值仍被借用(borrowed)时将其移动(move)的成因、修复与编译器实现 【免费下载链接】rust Empowering everyone to build reliable and efficient software. 项目地址: https://gitcode.com…

📅 2026/9/8 18:38:15
T+转U8+工具V2.0:用友ERP数据迁移实战指南

T+转U8+工具V2.0:用友ERP数据迁移实战指南

简介:一款面向用友T与U8财务软件用户的数据转换工具,适用于T12.0以上版本向U812.0及以上版本升级迁移场景,可支持基础档案、总账期初、总账凭证明细、应收应付期初、库存期初等核心数据结转,解决跨系统迁移时数据结构不一致与手工…

📅 2026/9/8 18:38:15
CodeGraph 安装部署指南:给 AI 编码助手装上本地代码知识图谱

CodeGraph 安装部署指南:给 AI 编码助手装上本地代码知识图谱

CodeGraph 安装部署指南:给 AI 编码助手装上本地代码知识图谱 【免费下载链接】codegraph Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, CoPilot, and Hermes Agent — f…

📅 2026/9/8 18:38:15
MORE NEWS

更多资讯

📰

铁轨缺陷检测数据集详解:VOC+YOLO格式4020张4类别训练实践

简介:面向铁轨表面缺陷检测的目标检测数据集,包含4020张jpg原图,并同时提供Pascal VOC格式的xml与YOLO格式的txt标注文件,覆盖波纹、剥落、鞍型、轮轨烧伤4个类别,共7155个矩形框,可直接用于YOLO等主流模型…

📰

低成本具身RL实践:Apple Silicon上microduck-lab静态评测

1. 静态评测到底评什么:不跑硬件也能看清一个具身RL项目 这两年具身智能的热度不用我多说,但真正动手做过机器人强化学习的人心里都清楚,这个领域有个让新人非常头疼的现状——钱和门槛把一大批想干活的人拦在了外面。一套标准四足机器人真机…

📰

81-6S落地最难的不是标准,是人心!拆解钣金、机械工厂“四类”员工抵触破冰方法|杨逢昌

《6S管理实战专栏》 三环实战篇(第81篇) 杨逢昌使命: 用6S的力量,让10万名朋友实现高效愉悦的生活与工作。前言本文依托杨逢昌独创《6S 诊断・治疗・执行 三环体系》核心执行层逻辑,聚焦工厂6S落地最大卡点——员工心理…

📰

wecom-cli 能否实现企业微信普通用户(非智能机器人)访问?

1. 核心结论可以,但需要区分场景。 wecom-cli 是一个命令行工具,主要用于与企业微信的 API 交互。其核心能力是模拟一个“应用”或“机器人”的身份去调用 API。因此,它无法直接模拟一个普通用户登录企业微信客户端进行操作(如收发…

📰

MATLAB隐马尔科夫模型实战:从HMM原理到工具箱应用

简介:面向自然语言处理、语音识别及生物信息学等序列建模场景的HMM完整MATLAB实现与工具箱资源,适合需要快速上手隐马尔科夫模型理论并落地实验的研究生、工程师与算法学习者。压缩包内共320个文件,主体是264个m脚本和函数文件,覆…

📰

thinkphp6搭配elementui搭建可商用二开商城系统的工程实践

简介:SparkShop(星火商城)是一套基于 ThinkPHP6 和 ElementUI 构建的开源免费可商用商城系统,适合有 PHP 开发基础、需要快速搭建多端商城或进行二次开发的团队与个人。资源包含 2000 个文件,核心为 899 个 PHP 业务代…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬