循环编码:时间序列中周期性特征的一种常用编码方式

在深度学习或神经网络中,“循环编码”(Cyclical Encoding)是一种编码技术,其特点是能够捕捉输入或特征中的周期性或循环模式。这种编码方法常用于处理具有周期性行为的任务,比如时间序列预测或理解展示周期性特征的序列。

在这里插入图片描述

循环编码的核心思想是将数据的周期性特征转化为网络能够理解的形式。例如,在处理时间数据时,比如小时、日、月等的循环模式,可以使用循环编码来帮助模型识别和利用这些周期性的变化。

当涉及到训练时间序列模型时,通常会使用以下时间特征:

小时、星期、月、周或年中的一天

将时间戳列转换为这些类型的特性是相当容易的。在确保将时间列转换为datetime对象(使用pd.to_datetime)之后,可以使用.dt提取一系列时间序列特征。

 df['Hour']=df['Datetime'].dt.hourdf['Month']=df['Datetime'].dt.monthdf['Dayofweek']=df['Datetime'].dt.dayofweek

能源消耗数据集通常是时间序列,其最终目标是使用过去的数据预测未来的消耗,因此这是一个很好的用例。虽然其他外部特征,如温度、湿度和风速也会影响能耗,但本文将重点关注时间序列特征的提取和转换。

在能源消耗方面,一天中有一定的高峰时段,更有可能出现更高的消耗。也有一些特定的时间往往消耗较少。从某种意义上说,每个小时都有自己的范畴。

放大该数据集的特定部分就可以展示这一点。全天都有明确的消费模式——使用量在同一时间(下午5 - 6点)达到峰值,在早上5 - 7点达到最低。

这些模式与其他特征有复杂的交互,例如一年中的时间/月份和一周中的一天,这就是为什么我们希望在模型中包含尽可能多的信息的原因。

传统编码的问题

那么我们怎么做呢?如果你像大多数人一样,你早就知道分类特征需要以其他格式编码,以便模型正确地理解它们是什么。最著名的方法是one-hot编码。

One-hot编码简单且易于实现。对于一天(或一个月、一天等)中的任何一个小时,“它是小时/天/月n吗?”然后用二进制0或1来回答这个问题。它对每种类别都这样做。因此,对于1 day_of_week原始特征,您将有7个编码特征(表示一周中的7天):

  • is_day_1
  • is_day_2
  • is_day_3
  • is_day_4
  • is_day_5
  • is_day_6
  • is_day_7

在Python中,最简单的方法是使用pd.get_dummies:

 columns_to_encode = ['Hour', 'Month', 'Dayofweek']df = pd.get_dummies(df, columns=columns_to_encode)

这将产生新的特性集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们从3个特征(小时、月、日)得到了40多个特征。随着添加越来越多需要编码的时间序列特征,这会变得越来越混乱。

循环编码

这时候就可以到我们提到的循环编码,因为时间序列特征本质上是周期性的。以时间为例当时钟敲响24:00(凌晨12点),新的一天开始,下一个小时是1:00(凌晨1点)。虽然数字1和24实际上是距离最远的数字,但1和23一样接近24,因为它们在一个循环中。

另一种用数字表示时间序列特征的方法是将时间戳转换成正弦和余弦变换。这种方式会告诉你一天中的时间,一周中的时间,或者一年中的时间。

我们需要的编码不是将日期时间值转换为分类特征(就像我们使用one-hot编码一样),而是将它们转换为数值特征,其中一些值更接近(例如12AM和1AM),而其他值则更远(例如12AM和12PM)。但当我们用One-hot编码时,这种信息就丢失了。

正弦和余弦来自单位圆,可以映射时间戳在这个圆上的位置,用正弦和余弦坐标表示。将圆圈的右侧视为起点(在下面的图表中以0表示)或真正的24小时时间刻度上的00:00 (12AM),我们将其划分为4个6小时的地标,以便能够将小时映射到圆上。

当你在单位圆上逆时针移动时,它增加到/2(或90度),这相当于6:00AM,(180度)或12:00PM, 3 /2或6:00PM,最后在12:00 am回到0。这些时间点都有自己独特的坐标。这样就可以用正弦和余弦表示24小时的每日周期。

其他周期也可以这样做,比如一周或一年的时间,一般的公式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要在Python中完成此操作,需要首先将datetime(在我的示例中是小时时间戳)转换为数值变量。通过将该列转换为pd.Timestamp.timestamp对象,将每个时间戳转换为unix时间(自1970年1月1日以来经过的秒数)。然后把这个数值列变换成正弦和余弦的特征。

 # Convert datetime into a numerical seconds timestamp object # (tells you the date/time in seconds)timestamp_s = df['Datetime'].map(pd.Timestamp.timestamp)# Get the number of seconds for each time periodday = 24*60*60week = day*7year = day*(365.2425)# Transform using sin and cos# Time of daydf['Day_sin'] = np.sin(timestamp_s * (2 * np.pi / day))df['Day_cos'] = np.cos(timestamp_s * (2 * np.pi / day))# Time of weekdf['Week_sin'] = np.sin(timestamp_s * (2 * np.pi / week))df['Week_cos'] = np.cos(timestamp_s * (2 * np.pi / week))# Time of yeardf['Year_sin'] = np.sin(timestamp_s * (2 * np.pi / year))df['Year_cos'] = np.cos(timestamp_s * (2 * np.pi / year))

上面的代码解释如下:首先将时间戳从秒转换为弧度。2 * np.pi 是因为一个完整的圆/周期有2pi的弧度。转换后除以的周期持续时间(以秒为单位)(日、周或年)。然后就可以将每个时间戳映射到一个唯一的角度,该角度通过乘以弧度数来表示它在周期中的位置。

如果周期是day,那么一天开始的时间戳将被映射到0弧度,一天中间的时间戳将被映射到np.pi,一天结束时的时间戳将被映射为2 * np.pi 。

最后对计算结果进行sin和cos,得到单位圆上实际的x和y坐标值。这些值总是在-1到1之间。

通过这种方法,每个原始时间序列特征(例如一天中的小时,一周中的一天,一年中的月份)现在只映射到2个新特征(原始特征的sin和cos),而不是24,7,12等。

缺点和注意事项

使用这种方法时一定要小心。虽然它非常方便和高效,但也有一些缺点和注意事项:

1、One-hot编码可以更好地用于基于特定时间、月份等具有更一致的不同值的数据集-例如,数据集在中午12点或某个月份达到峰值。而在时间范围更大的数据集(12PM-2PM)中,循环编码等方法一般会更准确。

2、这种类型的编码适用于深度学习/神经网络,但可能不适用于随机森林这样的树分割算法。因为通常表示一个特征的单个时间戳被分割成两个特征,而基于树的算法每次只分割一个特征。这两个特征是对应于一个原始特征的坐标对,而树形模型可能将它们分开处理。

但是这并不是说你永远不能对基于树的算法使用循环编码。我实际上在随机森林模型中使用了这种类型的编码,并取得了很好的效果。还是我们的老生常谈,这将取决于数据集,所以在交叉验证和最终hold out测试集上运行测试是很重要的。

这种编码方式在各种应用中都非常有用,尤其是在预测和分析涉及明确周期或重复模式的数据时。但是在决定使用哪种编码之前,将编码结果进行比较是非常重要的。

本文的数据集:

https://avoid.overfit.cn/post/99a2cd8d7acb46afa36ead49b53b2dd1

作者:Haden P

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

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

相关文章

函数编辑器调研及设计开发

前言:在产品研发中需要一款可嵌入web开发的代码及函数编辑器,本文从功能,扩展,外观/交互,维护/社区,兼容性,开源与否等方面考虑,进行对比筛选 1、编辑器统计数据 市面上编辑器有很…

软考是否存在包过班?

国家考试,虽然有人喊着包过,但你也别轻易相信啊,姐妹,要好好保护好你的钱包啊!这种考试是没有所谓的包过的。 给你一些学习软考需要注意的要点: 1、深入理解考试内容: 在准备软考之前&#xf…

【redis】redis持久化分析

目录 持久化Redis持久化redis持久化的方式持久化策略的设置1. RDB(快照)fork(多进程)RDB配置触发RDB备份自动备份手动执行命令备份(save | bgsave)flushall命令主从同步触发动态停止RDB RDB 文件恢复验证 RDB 文件是否被加载 RDB …

面试中算法(删去n个数字后的最小值)

有一个整数,从该整数中去掉n个数字,要求剩下的数字形成的新整数尽可能小。 分析:使用栈的特性,在遍历原整数的数字时,让所有数字一个一个入栈,当某个数字需要被删除时,(即栈顶数字&g…

期权扫盲贴:基础知识汇总,如何开通低佣期权账户(建议收藏)

一、什么是场内期权? 场内期权,也被称为交易所期权,是指在证券交易所内进行交易的标准化期权合约。 场内期权的交易是由证券交易所发布和监管的,具有统一的合约规格和交易规则,因此方便投资者进行交易。 以中国证券…

智慧公厕建设,打造智慧城市基础设施新亮点

公共厕所是城市基础设施的重要组成部分,而智慧公厕的建设则是现代城市管理的创新之举。为了实现公厕的精细化管理和提供更便捷的服务,推进智慧公厕建设必须要实现技术融合、业务融合、数据融合的目标,跨越层级、地域、系统、部门和业务的限制…

【C语言】——联合体与枚举

【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体   与…

每日OJ题_贪心算法三②_力扣553. 最优除法

目录 力扣553. 最优除法 解析代码 力扣553. 最优除法 553. 最优除法 难度 中等 给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如, [2,3,4] -> 2 / 3 / 4 。 例如,nums [2,3,4],我们将求表达式的值 "…

冲突:故事型游戏的燃料

在故事型游戏中,冲突是推动情节发展的关键因素。没有冲突,故事就会变得平淡无奇,缺乏吸引力。在这篇博客中,我将探讨冲突在故事型游戏中的重要性,以及如何利用冲突为游戏增色添彩。 首先,让我们来了解一下冲…

【Ajax零基础教程】-----第一课 Ajax简介

一、什么是ajax ajax即 Asynchronous javascript And XML (异步 javaScript 和 XML) 是一种创建交互式,快速动态应用的网页开发技术,无需重新加载整个网页的情况下,能够更新页面局部数据的技术。 二、为什么使用Ajax 通过在后台与服务器进行少…

水表集中抄表器是什么?什么叫水表集中抄表器?

1.简述 水表集中抄表器是一种智能化的智能设备,主要运用于高效率、清晰地收集管理方法住户或商业客户的用水数据信息。它摒弃了传统的人工抄表方法,完成了远程控制全自动抄表,大大提高了水务管理的效率和精确性。 2.功能特点 2.1实时数据分…

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码api代开发

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码官方平台api授权代开发 一、短视频矩阵系统源码开发步骤 短视频矩阵系统的源头开发步骤通常包括以下几个关键阶段: 1.需求分析:明确系统的目标用户、功能需求、性能要求等。 2.系统设计&…

网络机顶盒哪个好?2024畅销网络机顶盒排行榜

因买网络机顶盒踩雷的人不在少数,许多不懂网络机顶盒哪个好的消费者在挑选时会参考网络机顶盒排行榜,这次小编带来了业内最新发布的热销网络机顶盒排行榜,想买网络机顶盒可以看看入围的以下品牌,是目前最受消费者欢迎的品牌。 一&…

python菜鸟级安装手册-上篇

python安装教程 电脑-右键-属性,确认系统类型和版本号,比如本案例系统是64位 win10 点击python官网,进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要, 嵌入式程序包是压缩包版本&…

19.删除链表的倒数第N个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3:…

纯血鸿蒙APP实战开发——自定义安全键盘案例

介绍 金融类应用在密码输入时,一般会使用自定义安全键盘。本示例介绍如何使用TextInput组件实现自定义安全键盘场景,主要包括TextInput.customKeyboard绑定自定义键盘、自定义键盘布局和状态更新等知识点。 效果图预览 实现思路 1. 使用TextInput的cu…

借势母亲节h5小游戏的作用是什么

企业商家往往喜欢借势节日开展营销,母亲节作为5月的重要节日自然不可错过,不同行业商家都有自己开展互动想要实现的效果,如品牌宣传曝光、引流及渠道跳转等。 基于微信社交属性,有利于品牌发展,在【雨科】平台拥有多款…

stm32和树莓派的区别?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!Stm32和树莓派是两个不同的领域…

MyCat安装

MyCat安装 官网下载地址打不开说明采用站点的方式进行下载基础包 :程序包: 配置原型库数据源root.user.json 配置文件说明(默认配置) Mycat启动授权启动mycat启动mycat查看mycat日志连接Mycat 官网下载地址打不开说明 官网可能受…

二维码怎么播放视频?视频快速转二维码的方法

现在分享视频时,很多人都会采用视频生成二维码的方式,来让其他人通过扫描二维码查看视频。选择使用这种方式可以让更多人同时扫码查看视频,不需要传输或者下载存储,提升视频传播的速度,而且用户的体验效果更好。 那么…