【AI with ML】第 9 章 :了解序列和时间序列数据

news2024/11/18 12:37:59

       🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

​​

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

时间序列的共同属性

趋势

季节性

自相关

噪音

预测时间序列的技术

创建基线的朴素预测

衡量预测准确性

不那么天真:使用移动平均线进行预测

改进移动平均线分析

概括


时间系列无处不在。您可能在天气预报、股票价格和摩尔定律(图 9-1)等历史趋势中看到过它们。如果您不熟悉摩尔定律,它预测微芯片上的晶体管数量大约每两年翻一番。近 50 年来,它已被证明是未来计算能力和成本的准确预测指标。

图 9-1。摩尔定律

时间序列数据是一组随时间间隔的值。绘制时,x 轴通常是时间性的。通常在时间轴上绘制多个值,例如在这个例子中,晶体管的数量是一个图,摩尔定律的预测值是另一个图。这个称为多元时间序列。如果只有一个值(例如,一段时间内的降雨量),则称为单变量时间序列。

有了摩尔定律,预测就变得简单了,因为有一个固定而简单的规则可以让我们粗略地预测未来——这个规则已经存在了大约 50 年。

但是像图 9-2那样的时间序列呢?

图 9-2。真实世界的时间序列

虽然这个时间序列是人为创建的(您将在本章后面看到如何创建),但它具有复杂的现实世界时间序列的所有属性,如股票图表或季节性降雨。尽管看似随机,但时间序列具有一些共同属性,这些属性有助于设计可以预测它们的 ML 模型,如下一节所述。

时间序列的共同属性

虽然时间序列可能看起来随机且嘈杂,但通常有一些可预测的共同属性。在本节中,我们将探讨其中的一些。

预测时间序列的技术

在我们进入基于 ML 的预测(接下来几章的主题)之前,我们将探索一些更朴素的预测方法。这些将使您能够建立一个基线,您可以使用该基线来衡量 ML 预测的准确性。

创建基线的朴素预测

预测时间序列的最基本方法是说时间t + 1 的预测值与时间t的值相同,有效地将时间序列移动一个周期。

让我们开始创建具有趋势、季节性和噪声的时间序列:

def plot_series(time, series, format="-", start=0, end=None):
    plt.plot(time[start:end], series[start:end], format)
    plt.xlabel("Time")
    plt.ylabel("Value")
    plt.grid(True)

def trend(time, slope=0):
    return slope * time

def seasonal_pattern(season_time):
    """Just an arbitrary pattern, you can change it if you wish"""
    return np.where(season_time < 0.4,
                    np.cos(season_time * 2 * np.pi),
                    1 / np.exp(3 * season_time))

def seasonality(time, period, amplitude=1, phase=0):
    """Repeats the same pattern at each period"""
    season_time = ((time + phase) % period) / period
    return amplitude * seasonal_pattern(season_time)

def noise(time, noise_level=1, seed=None):
    rnd = np.random.RandomState(seed)
    return rnd.randn(len(time)) * noise_level

time = np.arange(4 * 365 + 1, dtype="float32")
baseline = 10
series = trend(time, .05)  
baseline = 10
amplitude = 15
slope = 0.09
noise_level = 6

# Create the series
series = baseline + trend(time, slope) 
                  + seasonality(time, period=365, amplitude=amplitude)
# Update with noise
series += noise(time, noise_level, seed=42)

绘制此图后,您会看到类似图 9-6的内容。

图 9-6。显示趋势、季节性和噪声的时间序列

现在您有了数据,您可以像任何数据源一样将其拆分为训练集、验证集和测试集。当数据中存在一些季节性时,如您在本例中所见,拆分系列时最好确保每个拆分中都有整个季节。因此,举例来说,如果您想将图 9-6中的数据拆分为训练集和验证集,那么执行此操作的好地方可能是时间步长 1,000,为您提供直到步长 1,000 的训练数据和步长 1,000 之后的验证数据.

您实际上不需要在此处进行拆分,因为您只是在进行简单的预测,其中每个值t只是步骤t – 1 的值,但为了在接下来的几幅图中进行说明,我们将放大从时间步长 1,000 开始的数据。

要从分割时间段开始预测序列,您要分割的时间段在变量split_time中,您可以使用如下代码:

naive_forecast = series[split_time - 1:-1]

图 9-7显示了覆盖朴素预测的验证集(从时间步长 1,000 开始,您可以将其设置split_time1000)。

图 9-7。时间序列的朴素预测

它看起来非常好——值之间存在关系——而且,随着时间的推移绘制图表时,预测似乎与原始值非常接近。但是您将如何衡量准确性?

衡量预测准确性

那里衡量预测准确性的方法有很多种,但我们将集中讨论其中两种: 均方误差(MSE) 和 平均绝对误差(MAE)。

使用 MSE,您只需计算时间t的预测值与实际值之间的差值,将其平方(以去除负值),然后求出所有这些值的平均值。

使用 MAE,您可以计算时间t的预测值与实际值之间的差值,取其绝对值以去除负值(而不是平方),然后找到所有这些值的平均值。

对于您刚刚基于我们的合成时间序列创建的朴素预测,您可以像这样获得 MSE 和 MAE:

print(keras.metrics.mean_squared_error(x_valid, naive_forecast).numpy())
print(keras.metrics.mean_absolute_error(x_valid, naive_forecast).numpy())

我得到了 76.47 的 MSE 和 6.89 的 MAE。与任何预测一样,如果可以减少误差,就可以提高预测的准确性。接下来我们将看看如何做到这一点。

概括

本章介绍了时间序列数据和时间序列的一些常见属性。您创建了一个综合时间序列,并了解了如何开始对其进行朴素预测。根据这些预测,您使用均方误差和平均误差建立了基线测量。这是对 TensorFlow 的一个很好的突破,但在下一章中,您将返回使用 TensorFlow 和 ML,看看是否可以改进您的预测!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【linux】linux环境变量初始化与对应文件的生效顺序

1.认识环境变量&#xff08;PATH) 环境变量&#xff08;PATH&#xff09;是一个列表&#xff0c;里面是有序的一些程序的地址&#xff08;一般是xxx/bin&#xff09;&#xff0c;添加环境变量后&#xff0c;系统在任何目录输入命令&#xff0c;都可以识别命令并执行命令对应程…

一个工程师的自我修养!

Datawhale干货 Tw93&#xff0c;前端工程师&#xff0c;Datawhale邀约作者对计算机科学的掌握程度&#xff0c;决定了一个计算机行业从业者能走多远。吴军博士在《浪潮之巅&#xff08;第四版&#xff09;》对工程师做了五个级别的划分&#xff1a;一级&#xff1a;能够开创一个…

询问ChatGPT来了解什么是边缘计算,有哪些特点,有哪些关键技术,和云计算的关系是什么?

什么是云计算 云计算是一种计算架构&#xff0c;它使用互联网作为基础设施&#xff0c;允许用户通过网络访问共享的计算资源&#xff0c;而不需要拥有专门的本地计算机硬件和软件。云计算提供了计算能力、存储空间、应用程序和服务等&#xff0c;并使用计费模型收取使用费用。…

springboot基于ssm框架实现的家具商城管理系统

一、项目简介 本项目是一套基于springboot框架实现的家具商城管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#…

为什么在SPI通信中提供不同的模式?

SPI传输模式 因为SPI是全双工也就是说&#xff08;MOSI和MISO&#xff09;上同时发送和接收数据 时钟极性&#xff08;CPOL&#xff09; 时钟相位&#xff08;CPHA&#xff09;是定义SPI总线使用的时钟格式得主要参数&#xff0c;根据SPOL参数&#xff0c;SPI时钟可以是反向或…

寻找两个正序数组的中位数K个一组翻转链表

文章目录1. [寻找两个正序数组的中位数](https://leetcode.cn/problems/median-of-two-sorted-arrays/)2. [K个一组翻转链表](https://leetcode.cn/problems/reverse-nodes-in-k-group/)1. 寻找两个正序数组的中位数 首先&#xff0c; 中位数的作用就是将正序数组的两端进行分…

[内网渗透]—权限维持

Skeleton Key(万能密码) 原理 当拿到域控权限后,使用mimikatz可以注入Skeleon Key,将 Skeleton Key 注入域控制器的 lsass.exe 进程,这样会在域内的所有账号中添加一个 Skeleton Key,而这个key是自己设定的所以可以随时共享访问。 PS:由于注入到lsass.exe进程中,所以每…

JS图解 | Java程序员的JS | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘JS 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出并回答了…

跟腾讯架构大师学网络框架与后台架构

目录 跟腾讯架构大师学网络框架与后台架构 单机服务 1、单机服务&#xff1a;基本概念 2、单机服务&#xff1a;同步阻塞​编辑 3、单机服务&#xff1a;异步非阻塞框架 4、单机服务&#xff1a;典型框架&#xff1a; 5、单机服务&#xff1a;协程框架 6、单机服务&…

Spring之自定义Bean何时被扫描注册?

1. 前言 在AnnotationConfigApplicationContext的构造函数里&#xff0c;Spring会创建AnnotatedBeanDefinitionReader对象&#xff0c;它的基本作用是将基于注解的BeanClass封装成BeanDefinition&#xff0c;并注册到BeanFactory中。同时AnnotatedBeanDefinitionReader的构造函…

计算机毕业设计springboot+vue景区疫情预警系统

项目介绍 本景区疫情预警系统是针对目前景区疫情预警的实际需求,从实际工作出发,对过去的景区疫情预警系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结…

垃圾回收器

文章目录1. 垃圾回收器分类2. 不同垃圾回收器概述3. Serial与Serial Old垃圾回收器&#xff1a;串行回收4. ParNew垃圾回收器&#xff1a;并行回收5. Parallel与Parallel Old垃圾回收器&#xff1a;吞吐量优先6. CMS回收器&#xff1a;低延迟7. G1回收器&#xff1a;区域分代式…

web前端-javascript-初识Array数组(说明,初步创建,添加元素和读取元素,获取和修改数组的 length 长度,最后一个位置添加元素)

初识 Array 数组 1. 说明 数组也是一个对象它和普通的对象功能类似&#xff0c;也是用来存储一些值的不同的是普通对象是使用字符串作为属性名的 而数组是使用数字来作为索引来操作元素 索引&#xff1a; 从 0 开始的整数就是索引 数组的存储性能比普通对象要好&#xff0c;在…

【记录】Ubuntu20.04安装CUDA和cuDNN

本文记录下如何在Ubuntu20.04系统中安装CUDA和cuDNN。 这里简要介绍下CUDA和cuDNN分别是什么。CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型。它通过利用图形处理器 (GPU) 的处理能力&#xff0c;可大幅提升计算性能&#xff1b;cuDNN(深度神经网络库)是GPU加速的用于深度…

《西西弗神话》笔记——不期待人生可以过得很顺利,但我希望碰到人生难关的时候,自己可以是它的对手

目录 一、作者生平 二、经典摘录 1、悲剧从本质上讲是对苦难的反抗 2、自杀实质上是一种逃避&#xff0c;它是反抗的对立面 3、不是否认生活本身 4、书的宗旨就是要讨论荒谬与自杀的关系 5、真正严肃的哲学问题只有一个&#xff1a;自杀 6、了解人是否能够义无反顾地生…

【2022.12.16】备战春招Day11——每日一题 + 142. 环形链表 II + 93. 复原 IP 地址

【每日一题】 1785. 构成特定和需要添加的最少元素 题目描述 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的最少元素数量 &#xff0c;添…

SQL语句练习05

目录 一、建表并插入数据 二、查询语句练习 一、建表并插入数据 一、建立如下 &#x1d446; 表(命名格式“姓名拼音_三位学号_week7s”&#xff0c;如LBJ_023_week7s&#xff09;&#xff0c;并插入数据 create table LYL_116_week7s(SNO varchar(3),SNAME varchar(10), CI…

【数据结构Java版】Stack栈的妙用

目录 一、栈的概念 二、栈的使用 &#xff08;1&#xff09;主要方法 &#xff08;2&#xff09;实例演示 三、栈的模拟实现 四、栈相关练习题 &#xff08;1&#xff09;有效的括号 &#xff08;2&#xff09;栈的压入、弹出序列 &#xff08;3&#xff09;逆波兰表达…

SpringBoot中mapper-locations配置多个mapper包路径

1 问题描述 大家都知道mapper-locations是配置mapper路径的&#xff0c;但是有时候mapper路径可能不止一个 比如说有两个包A和B&#xff0c;A和B里面的业务模块不同就需要写各自的mapper&#xff0c;这时候如果只配置A的mapper路径&#xff0c;那么B的mapper路径肯定扫码不到…

无法打开jupyter notebook

无法打开jupyter notebook遇到的问题问题分析tornado什么是tornado?如何更新tornado问题解决解决方法一解决方法二参考资料遇到的问题 今天打开anaconda prompt的时候想要打开jupyter notebook,但是遇到的了如下报错: Traceback (most recent call last): File “C:\ProgramD…