96SEO 2026-02-23 12:11 6
。

尽管这听起来微不足道#xff0c;但几乎任何东西都可以被认为是时间序列。
一个月里你每小时的平均心率#xff0c;一年里一只股票的日收盘价#xff0c;一年里某个城市每周发生的交通事故数。
在任何一段时间段内记…时间序列是指在一段时间内发生的任何可量化的度量或事件。
尽管这听起来微不足道但几乎任何东西都可以被认为是时间序列。
一个月里你每小时的平均心率一年里一只股票的日收盘价一年里某个城市每周发生的交通事故数。
在任何一段时间段内记录这些信息都被认为是一个时间序列。
对于这些例子中的每一个都有事件发生的频率(每天、每周、每小时等)和事件发生的时间长度(一个月、一年、一天等)。
我们的目标是接收一个值序列预测该序列中的下一个值。
最简单的方法是使用自回归模型我们将专注于使用LSTM来解决这个问题。
让我们看一个时间序列样本。
下图显示了2013年至2018年石油价格的一些数据。
技术要学会分享、交流不建议闭门造车。
一个人走的很快、一堆人可以走的更远。
均可加交流群获取群友已超过2000人添加时切记的备注方式为来源兴趣方向方便找到志同道合的朋友。
这只是一个日期轴上单个数字序列的图。
下表显示了这个时间序列的前10个条目。
每天都有价格数据。
94.27许多机器学习模型在标准化数据上的表现要好得多。
标准化数据的标准方法是对数据进行转换使得每一列的均值为0标准差为1。
下面的代码scikit-learn进行标准化
StandardScaler().fit(df[x].values.reshape(-1,
scalers[key].transform(norm_df.iloc[:,
norm我们还希望数据具有统一的频率——在这个例子中有这5年里每天的石油价格如果你的数据情况并非如此Pandas有几种不同的方法来重新采样数据以适应统一的频率请参考我们公众号以前的文章
对于训练数据我们需要将完整的时间序列数据截取成固定长度的序列。
假设我们有一个序列[1,
或者说我们定义了为了预测下一个值需要回溯多少步。
我们将这个值称为训练窗口而要预测的值的数量称为预测窗口。
在这个例子中它们分别是3和1。
下面的函数详细说明了这是如何完成的。
df[itw:itwpw][target_columns].values
data这样我们就可以在PyTorch中使用Dataset类自定义数据集
torch.Tensor(sample[sequence]),
DataLoader来遍历数据。
使用DataLoader的好处是它在内部自动进行批处理和数据的打乱所以我们不必自己实现它代码如下:
generate_sequences(norm_df.dcoilwtico.to_frame(),
根据拆分比例拆分数据并将每个子集加载到单独的DataLoader对象中
drop_lastTrue)在每次迭代中DataLoader将产生16个(批量大小)序列及其相关目标我们将这些目标传递到模型中。
我们将使用一个单独的LSTM层然后是模型的回归部分的一些线性层当然在它们之间还有dropout层。
该模型将为每个训练输入输出单个值。
dnn_layers.append(nn.Linear(nhid,
dnn_layers.append(nn.Linear(nhid,
dnn_layers.append(nn.Dropout(pdropout))
torch.zeros(self.n_lstm_layers,
torch.zeros(self.n_lstm_layers,
self.dropout(x.contiguous().view(x.shape[0],
DNN.我们设置了2个可以自由地调优的参数n_hidden和n_deep_players。
更大的参数意味着模型更复杂和更长的训练时间所以这里我们可以使用这两个参数灵活调整。
剩下的参数如下sequence_len指的是训练窗口nout定义了要预测多少步;将sequence_len设置为180,nout设置为1意味着模型将查看180天(半年)后的情况以预测明天将发生什么。
use_cudaUSE_CUDA).to(device)模型训练
定义好模型后我们可以选择损失函数和优化器设置学习率和周期数并开始我们的训练循环。
由于这是一个回归问题(即我们试图预测一个连续值)最简单也是最安全的损失函数是均方误差。
这提供了一种稳健的方法来计算实际值和模型预测值之间的误差。
torch.optim.AdamW(model.parameters(),
lrlr)下面就是训练循环的代码在每次训练迭代中我们将计算之前创建的训练集和验证集的损失:
我们调用训练过的模型来预测未打乱的数据并比较预测与真实观察有多大不同。
make_predictions_from_dataloader(model,
我们的预测看起来还不错!预测的效果还可以表明我们没有过度拟合模型让我们看看能否用它来预测未来。
这里需要注意的是根据训练模型时选择的参数你预测的越长远模型就越容易表现出它自己的偏差开始预测平均值。
因此如果没有必要我们不希望总是预测得太超前因为这会影响预测的准确性。
torch.Tensor(history).unsqueeze(0)
pred.detach().numpy().reshape(-1)
list(history[self.target])[-tw:]
np.array(pre[-tw:]).reshape(-1,
self.one_step_forecast(pre_).squeeze()
我们在这个时间序列的中间从不同的地方进行预测这样我们就可以将预测与实际发生的情况进行比较。
我们的预测程序可以从任何地方对任何合理数量的步骤进行预测红线表示预测。
这些图表显示的是y轴上的标准化后的价格
我们这个模型表现的还算一般!但是我们通过这个示例完整的介绍了时间序列预测的全部过程我们可以通过尝试架构和参数的调整使模型变得得更好预测得更准确。
本文只处理单变量时间序列其中只有一个值序列。
还有一些方法可以使用多个系列来进行预测。
这被称为多元时间序列预测我将在以后的文章中介绍。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback