当前位置: 首页 > article >正文

6、基于机器学习的预测

应用机器学习的任何预测任务与这四个策略。

文章目录

  • 1、简介
  • 1.1定义预测任务
  • 1.2准备预测数据
  • 1.3多步预测策略
      • 1.3.1多输出模型
      • 1.3.2直接策略
      • 1.3.3递归策略
      • 1.3.4DirRec 策略
  • 2、流感趋势示例
      • 2.1多输出模型
      • 2.2直接策略

1、简介

在第二课和第三课中,我们将预测视为一个简单的回归问题,所有的特征都是从一个输入,即时间索引,衍生出来的。我们可以通过生成我们想要的趋势和季节性特征,轻松地对未来的任何时间进行预测。

但是,当我们在第四课中添加了滞后特征时,问题的性质就发生了变化。滞后特征要求在进行预测时,滞后的目标值是已知的。滞后 1 的特征将时间序列向前移动 1 步,这意味着你可以预测未来的 1 步,但不能预测 2 步。

在第四课中,我们只是假设我们可以一直生成滞后特征,直到我们想要预测的期间(换句话说,每个预测都是向前一步)。然而,现实世界的预测通常需要更多的信息,所以在这一课中,我们将学习如何针对各种情况进行预测。

1.1定义预测任务

在设计预测模型之前,有两件事情需要确定:

  • 在进行预测时,有哪些信息是可用的(特征),以及,
  • 你需要预测值的时间段(目标)。

预测起点是你进行预测的时间。实际上,你可以将预测起点视为你有训练数据的最后一个时间,用于预测正在预测的时间。起点之前的所有内容都可以用来创建特征。

预测范围是你进行预测的时间。我们通常用预测范围内的时间步数来描述一个预测:例如,“1 步”预测或“5 步”预测。预测范围描述了目标。
在这里插入图片描述
一个三步预测范围,有两步的提前时间,使用四个滞后特征。该图表示了一行训练数据的内容,也就是一个预测的数据。

起点和范围之间的时间是预测的提前时间(或有时称为延迟)。预测的提前时间由起点到范围的步数来描述:例如,“1 步前”或“3 步前”的预测。在实践中,由于数据获取或处理的延迟,可能需要一个预测从起点开始多步前进行。

1.2准备预测数据

为了用机器学习算法进行时间序列预测,我们需要将序列转换为一个可以用于这些算法的数据框。(当然,除非你只使用确定性的特征,如趋势和季节性。)

我们在第四课中看到了这个过程的前半部分,当时我们用滞后值创建了一个特征集。后半部分是准备目标值。我们如何做这个取决于预测任务的不同。

数据框中的每一行代表一个单独的预测。行的时间索引是预测范围内的第一个时间,但我们将整个范围内的值都安排在同一行中。对于多步预测,这意味着我们需要一个模型能够产生多个输出,每一步一个。

In [1]:

import numpy as np
import pandas as pd

N = 20
ts = pd.Series(
    np.arange(N),
    index=pd.period_range(start='2010', freq='A', periods=N, name='Year'),
    dtype=pd.Int8Dtype,
)

# Lag features
X = pd.DataFrame({
   
    'y_lag_2': ts.shift(2),
    'y_lag_3': ts.shift(3),
    'y_lag_4': ts.shift(4),
    'y_lag_5': ts.shift(5),
    'y_lag_6': ts.shift(6),    
})

# Multistep targets
y = pd.DataFrame({
   
    'y_step_3': ts.shift(-2),
    'y_step_2': ts.shift(-1),
    'y_step_1': ts,
})

data = pd.concat({
   'Targets': y, 'Features': X}, axis=1)

data.head(10).style.set_properties(['Targets'], **{
   'background-color': 'LavenderBlush'}) \
                   .set_properties(['Features'], **{
   'background-color': 

http://www.kler.cn/a/229461.html

相关文章:

  • linux删除用户
  • 前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
  • 【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发二
  • 浅谈云计算01 | 云计算服务的特点
  • 73.矩阵置零 python
  • 高级java每日一道面试题-2025年01月13日-框架篇[Spring篇]-Spring 是怎么解决循环依赖的?
  • 4. 树(二叉树、二叉查找树/二叉排序树/二叉搜索树、平衡二叉树、平衡二叉B树/红黑树)
  • 【JavaScript】Js中一些数组常用API总结
  • 面试数据结构与算法总结分类+leetcode目录【基础版】
  • 流量控制原理
  • SSRF漏洞给云服务元数据带来的安全威胁
  • k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(二)
  • 基于最新koa的Node.js后端API架构与MVC模式
  • (附源码)基于springboot 毕业生去向统计设计系统-计算机毕设 25559
  • Web 站点的欢迎页面
  • MYSQL performance schema详解
  • zk集群--集群同步
  • 麒麟V10系统下离线安装docker-compose
  • 书客/霍尼韦尔/柏曼大路灯哪款好?多维度真实测评!买对不买贵!
  • c#string方法对比
  • c++之说_10|自定义类型 union 联合体
  • 艺术创作和生活的关系
  • 基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性
  • Qt 字符串类应用与常用基本数据类型
  • MySQL知识点总结(四)——MVCC
  • 【力扣】罗马数字转整数,哈希集合+模拟