基于tsfresh包的单类时间序列特征提取

news2024/9/27 7:22:13

前言

时间序列特征提取包中tsfresh较为流行,但是其官方教程给出的例子是机器人故障的数据集,其中的id列为各组不同的实验。然后我就一直在想能否做单类的,比如电力预测,或者是某一条街道的交通预测,但是翻遍了文档都没找到,后来在github项目文件中找到了做单类预测的示例文件

我当时有这个想法的时候查过CSDN上的其他有关tsfresh包的教程,大多都是搬运的官方文档的例子,没有单类预测的示例,下面我将结合代码,说明如何提取该类型的时间序列特征。

时序特征提取

导入必要包

import numpy as np
import pandas as pd
import matplotlib.pylab as plt

from tsfresh import extract_features, select_features
from tsfresh.utilities.dataframe_functions import roll_time_series, make_forecasting_frame
from tsfresh.utilities.dataframe_functions import impute

import pandas_datareader.data as web
from sklearn.linear_model import LinearRegression

准备数据集

  • 我们将使用苹果公司的股票价格来展示如何同时处理一个时间序列(一只股票)。
  • 我们从 "stooq "下载数据,只存储高值。
df = web.DataReader("AAPL", 'stooq')["High"]
print(df.shape)
df.head()

输出:

(1257,)
Date
2023-03-01    147.2285
2023-02-28    149.0800
2023-02-27    149.1700
2023-02-24    147.1900
2023-02-23    150.3400
Name: High, dtype: float64
  • 绘制图形观察
plt.figure(figsize=(15, 6))
df.plot(ax=plt.gca())
plt.show()

请添加图片描述

  • 整理数据集,添加标识符:
df_melted = pd.DataFrame({"high": df.copy()})
df_melted["date"] = df_melted.index
df_melted["Symbols"] = "AAPL"

df_melted.head()

输出:

	high	date	Symbols
Date			
2023-03-01	147.2285	2023-03-01	AAPL
2023-02-28	149.0800	2023-02-28	AAPL
2023-02-27	149.1700	2023-02-27	AAPL
2023-02-24	147.1900	2023-02-24	AAPL
2023-02-23	150.3400	2023-02-23	AAPL

创建训练数据样本

  • 预测通常包括以下步骤:
    • 收集到今天为止的的数据
    • 进行特征提取(例如,使用extract_features函数)
    • 训练一个预测模型
  • 然而在训练中,我们需要多个例子来训练。如果我们只使用到今天为止的时间序列,我们将只有一个训练实例。因此,我们使用了一个技巧:滑动历史窗口。
  • 想象一下有一个滑动的时间窗口在你的数据集上,在每个时间步长 t t t,你把窗口中的数据当作今天(包括 t t t)的数据来提取特征。直到时间 t t t的特征的目标是时间 t + 1 t+1 t+1的时间值。
  • 窗口滑动的过程是在函数roll_time_series中实现的。我们的窗口大小为20(即看的是过去最多20天的情况),我们不考虑所有短于5天的窗口。
df_rolled = roll_time_series(df_melted, column_id="Symbols", column_sort="date",max_timeshift=20, min_timeshift=5)
df_rolled.head()

输出:

Rolling: 100%|██████████| 10/10 [00:02<00:00,  3.71it/s]
high	date	Symbols	id
0	42.4266	2018-03-05	AAPL	(AAPL, 2018-03-12 00:00:00)
1	42.5512	2018-03-06	AAPL	(AAPL, 2018-03-12 00:00:00)
2	41.9750	2018-03-07	AAPL	(AAPL, 2018-03-12 00:00:00)
3	42.2771	2018-03-08	AAPL	(AAPL, 2018-03-12 00:00:00)
4	42.9639	2018-03-09	AAPL	(AAPL, 2018-03-12 00:00:00)
  • 上面的数据框架由这些 "窗口 "组成,从原始数据框架中印出来。例如,id = (AAPL,2020-07-14 00:00:00)的数据都来自股票AAPL的原始数据,包括直到2020-07-14的最后20天。
  • 挑选出窗口2020-07-14的数据
df_rolled[df_rolled["id"] == ("AAPL", pd.to_datetime("2020-07-14"))]

输出:

	high	date	Symbols	id
12249	85.0954	2020-06-15	AAPL	(AAPL, 2020-07-14 00:00:00)
12250	86.9448	2020-06-16	AAPL	(AAPL, 2020-07-14 00:00:00)
12251	87.4872	2020-06-17	AAPL	(AAPL, 2020-07-14 00:00:00)
12252	87.0066	2020-06-18	AAPL	(AAPL, 2020-07-14 00:00:00)
12253	87.7743	2020-06-19	AAPL	(AAPL, 2020-07-14 00:00:00)
12254	88.4851	2020-06-22	AAPL	(AAPL, 2020-07-14 00:00:00)
12255	91.6684	2020-06-23	AAPL	(AAPL, 2020-07-14 00:00:00)
12256	90.7831	2020-06-24	AAPL	(AAPL, 2020-07-14 00:00:00)
12257	89.8490	2020-06-25	AAPL	(AAPL, 2020-07-14 00:00:00)
12258	89.9277	2020-06-26	AAPL	(AAPL, 2020-07-14 00:00:00)
12259	89.1531	2020-06-29	AAPL	(AAPL, 2020-07-14 00:00:00)
12260	90.0922	2020-06-30	AAPL	(AAPL, 2020-07-14 00:00:00)
12261	90.4312	2020-07-01	AAPL	(AAPL, 2020-07-14 00:00:00)
12262	91.1958	2020-07-02	AAPL	(AAPL, 2020-07-14 00:00:00)
12263	92.5019	2020-07-06	AAPL	(AAPL, 2020-07-14 00:00:00)
12264	93.2027	2020-07-07	AAPL	(AAPL, 2020-07-14 00:00:00)
12265	93.9105	2020-07-08	AAPL	(AAPL, 2020-07-14 00:00:00)
12266	94.8407	2020-07-09	AAPL	(AAPL, 2020-07-14 00:00:00)
12267	94.5077	2020-07-10	AAPL	(AAPL, 2020-07-14 00:00:00)
12268	98.4278	2020-07-13	AAPL	(AAPL, 2020-07-14 00:00:00)
12269	95.7619	2020-07-14	AAPL	(AAPL, 2020-07-14 00:00:00)

提取特征

请添加图片描述

  • 窗口化的数据样本是正确的格式,可以用于tsfreshs的特征提取。像往常一样,特征提取将使用一个给定ID的所有数据,在我们的例子中,就是一个给定窗口和一个给定ID的所有数据(上图中的一个彩色方框)。
X = extract_features(df_rolled.drop("Symbols", axis=1), 
                     column_id="id", column_sort="date", column_value="high", 
                     impute_function=impute, show_warnings=False)
  • 重置索引
X = X.set_index(X.index.map(lambda x: x[1]), drop=True)
X.index.name = "last_date"
X.head()

输出:

	high__variance_larger_than_standard_deviation	high__has_duplicate_max	high__has_duplicate_min	high__has_duplicate	high__sum_values	high__abs_energy	high__mean_abs_change	high__mean_change	high__mean_second_derivative_central	high__median	...	high__permutation_entropy__dimension_6__tau_1	high__permutation_entropy__dimension_7__tau_1	high__query_similarity_count__query_None__threshold_0.0	high__matrix_profile__feature_"min"__threshold_0.98	high__matrix_profile__feature_"max"__threshold_0.98	high__matrix_profile__feature_"mean"__threshold_0.98	high__matrix_profile__feature_"median"__threshold_0.98	high__matrix_profile__feature_"25"__threshold_0.98	high__matrix_profile__feature_"75"__threshold_0.98	high__mean_n_absolute_max__number_of_maxima_7
last_date																					
2018-03-12	0.0	0.0	0.0	0.0	255.7290	10901.085161	0.452200	0.221720	0.055837	42.48890	...	-0.000000	2.708050	0.0	1.315285	4.197435	2.196965	1.763936	1.3618	2.470387	118.804714
2018-03-13	0.0	0.0	0.0	0.0	299.5324	12819.823012	0.421533	0.229467	0.014360	42.55120	...	0.693147	-0.000000	0.0	1.315285	4.197435	2.196965	1.763936	1.3618	2.470387	118.804714
2018-03-14	0.0	0.0	0.0	0.0	342.6219	14676.528022	0.463300	0.094700	-0.069875	42.75755	...	1.098612	0.693147	0.0	1.315285	4.197435	2.196965	1.763936	1.3618	2.470387	42.949557
2018-03-15	0.0	0.0	0.0	0.0	385.6456	16527.566784	0.413613	0.074637	-0.013600	42.96390	...	1.386294	1.098612	0.0	1.315285	4.197435	2.196965	1.763936	1.3618	2.470387	43.056214
2018-03-16	0.0	0.0	0.0	0.0	428.3982	18355.351591	0.397778	0.036222	-0.024731	42.85825	...	1.609438	1.386294	0.0	1.315285	4.197435	2.196965	1.763936	1.3618	2.470387	43.102786
5 rows × 789 columns

预测

  • 我们现在可以使用提取的特征来训练一个模型。但是我们的目标是什么呢?2020-07-13行的目标是下一个时间步长的时间值(在本例中是2020-07-14)。

  • 因此,我们需要做的是回到我们的原始数据框架,并使用明天的股票价格做目标值。这是用shift函数完成的。

y = df_melted.set_index("date").sort_index().high.shift(-1)

输出:

date
2018-03-05     42.5512
2018-03-06     41.9750
2018-03-07     42.2771
2018-03-08     42.9639
2018-03-09     43.5352
                ...   
2023-02-23    147.1900
2023-02-24    149.1700
2023-02-27    149.0800
2023-02-28    147.2285
2023-03-01         NaN
Name: high, Length: 1257, dtype: float64
  • 然而,我们在这里需要小心一点。X缺少前5个日期(因为我们的最小窗口大小是5),Y缺少最后一个日期(因为今天没有什么可预测的)。所以让我们确保我们对数据有一个一致的看法。
  • 使用isin函数将索引对应起来
y = y[y.index.isin(X.index)]
X = X[X.index.isin(y.index)]
  • 我们现在可以训练正常的模型来预测下一个时间步骤。让我们把数据分成训练和测试样本(但要确保保持时间上的一致性)。我们把2019年之前的所有数据作为训练数据,其余的作为测试数据。
X_train = X[:"2018"]
X_test = X["2019":]

y_train = y[:"2018"]
y_test = y["2019":]
  • 特征选择
X_train_selected = select_features(X_train, y_train)

后记

  • 后面的特征选择和模型预测环节我就不写了,因为示例代码采用的非常简单的模型,得到的结果也不算很理想。
  • 官方的示例代码地址在这里,感兴趣的可以看看

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

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

相关文章

Linux安装nginx详细步骤

1.安装依赖包//一键安装上面四个依赖yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2.下载并解压安装包//创建一个文件夹 mkdir /usr/local/nginx cd /usr/local/nginx //下载tar包 wget http://nginx.org/download/nginx-1.18.0.tar.gz tar -xvf nginx…

蓝牙调试工具集合汇总

BLE 该部分主要分享一下常用的蓝牙调试工具&#xff0c;方便后续蓝牙抓包及分析。 目录 1 hciconfig 2 hcitool 3 hcidump 4 hciattach 5 btmon 6 bluetoothd 7 bluetoothctl 1 hciconfig 工具介绍&#xff1a;hciconfig&#xff0c;HCI 设备配置工具 命令格式&…

金融行业数据模型

一、Teradata FS-LDM Teradata 公司基于金融业务发布的FS-LDM&#xff08;Financial Servies Logical Data Model&#xff09; 十大主题&#xff1a;当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道。 1、当事人&#xff08;Party&#xff09; 银行所服务的任…

学习.NET MAUI Blazor(七)、实现一个真正的ChatGPT聊天应用

今天在新闻上看到一条消息&#xff0c;OpenAI已经开放了ChatGPT的接口&#xff0c;也就是GPT-3.5&#xff0c;对比原来的GPT-3&#xff0c;增加了gpt-3.5-turbo、gpt-3.5-turbo-0301两个模型。 gpt-3.5-turbo&#xff1a;使用最新的GPT-3.5模型&#xff0c;并针对聊天进行了优…

和风SDK查询城市ID(保姆级教程)

android studio版本&#xff1a;2021.2.1例程名&#xff1a;hfserachcityid这几天没什么事做&#xff0c;而且我原来那个“项目”因为免费api不能用了&#xff0c;只能改为和风的免费api,但需要申请&#xff0c;而且还要城市ID&#xff0c;玩天气的基本都知道城市ID这个东西&am…

公司章程包括了哪些内容

一、公司章程包括了哪些内容 《中华人民共和国公司法》第11条规定&#xff1a;“设立公司必须依法制定公司章程。公司章程对公司、股东、董事、监事、高级管理人员具有约束力。”明确地强调了公司章程对于公司的重要性&#xff0c;公司章程对于公司而言不但是股东合意达成的协…

葵花8号卫星数据简介与下载笔记

1、葵花8号卫星数据简介JMA于2015年7月7日开始运营Himawari-8&#xff0c;以取代MTSAT-2&#xff08;也称为Himawari-7&#xff09;。 Himawari-9号卫星于2017年3月10日开始后备运行。两颗卫星都位于向东约140.7度的轨道上&#xff0c;并将观测东亚和西太平洋区域15年。 源自Hi…

【项目实战】IDEA常用快捷键汇总

一、修改为Eclipse的快捷键 相信很多朋友跟我一样&#xff0c; 都是习惯了eclipse的快捷键&#xff0c;没错&#xff0c;习惯这东西真的很难改&#xff01;IDEA非常强大&#xff0c;支持我们修改IDEA中的keymap为Eclipse的快捷键&#xff01;友好又贴心&#xff0c;有没有&…

大数据框架之Hadoop:MapReduce(四)Hadoop数据压缩

4.1概述 1、压缩概述 压缩技术能够有效减少底层存储系统&#xff08;HDFS&#xff09;读写字节数。压缩提高了网络带宽和磁盘空间的效率。在运行MR程序时&#xff0c;IO操作、网络数据传输、shuffle和Merge要花大量的时间&#xff0c;尤其是数据规模很大和工作负载密集的情况…

3月2日第壹简报,星期四,农历二月十一

3月2日第壹简报&#xff0c;星期四&#xff0c;农历二月十一坚持阅读&#xff0c;静待花开1. 第三次延期&#xff01;财政部&#xff1a;对于购置期在2023年的新能源汽车继续免征车辆购置税。2. 我国2月份制造业PMI为52.6% &#xff0c;创2012年4月以来新高。3. 全国地级市财力…

深入浅出消息队列MSMQ

消息队列MSMQ&#xff0c;相信稍有开发经验的小伙伴都了解一些。开始讲解之前&#xff0c;我们先弄清楚一件事&#xff0c;为什么我们要使用MSMQ&#xff1a; 您可能认为您能够通过一个简单的数据库表(一个应用程序往其中写入数据&#xff0c;另一个应用程序从中读取数据)来应用…

采编式AIGC视频生产流程编排实践

作者 | 百度人工智能创作团队 导读 本文从业务出发&#xff0c;系统介绍了采编式 TTV的实现逻辑和实现路径。结合业务拆解&#xff0c;实现了一个轻量级服务编排引擎&#xff0c;有效实现业务诉求、高效支持业务扩展。 全文6451字&#xff0c;预计阅读时间17分钟。 01 背景 近…

WebRTC之RTP封装与解封装

1 前言rtp_rtcp模块作为Webrtc组件中非常重要的组成部分&#xff0c;首先是对应rtp和rtcp的封装与解封装&#xff0c;第二部分是对QOS各种策略的支持都离不开rtcp的控制协议。这里首先进行协议封装的探讨。2 RTP协议解析各个音视频的大佬对下面这张RTP协议图应该并不陌生&#…

ChatGPT到底是个啥?简析ChatGPT!

目录 ​编辑 1. ChatGPT到底是个啥&#xff1f; 1.1. 简介 1.2 玩法 1.2.1.生成公司理念、生成广告标语 1.2.2.写小说写故事写情书 1.2.3.生成自媒体文案 1.2.4.写代码 2.简析ChatGPT 2.1.ChatGPT核心能力 2.2.ChatGPT进化史 2.2.1.历史沿革 2.2.2.算法 2.3.ChatGPT特…

k8s学习之路 | Pod 基础

文章目录Pod 基础认知什么是 PodPod 的示例 yamlPod 的形式Pod 的多容器协同Pod 的生命周期容器的类型应用容器初始化容器临时容器静态 Pod什么是静态 Pod静态 Pod 位置Pod 探针机制探针类型Probe 配置项探针案例Pod 基础认知 什么是 Pod https://kubernetes.io/zh-cn/docs/c…

Word处理控件Aspose.Words功能演示:使用 Java 合并 MS Word 文档

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

Overlay网络技术

大家好&#xff0c;我是技福的小咖老师。 Overlay网络是通过网络虚拟化技术&#xff0c;在同一张Underlay网络上构建出的一张或者多张虚拟的逻辑网络。不同的Overlay网络虽然共享Underlay网络中的设备和线路&#xff0c;但是Overlay网络中的业务与Underlay网络中的物理组网和互…

aardio - 【库】简单信息框

昨晚得知aardio作者一鹤的妻子病情严重&#xff0c;深感悲痛。今日给一鹤捐赠少许&#xff0c;望其妻能挺过难关&#xff0c;早日康复。 aardio是一个很好的编程工具&#xff0c;我非常喜欢&#xff0c;这两年也一直在用。虽然未曾用其获利&#xff0c;但其灵活的语法&#xff…

操作系统真相还原——第7章 中断

中断&#xff1a;CPU 暂停正在执行的程序&#xff0c;转而去执行处理该事件的程序&#xff0c;当这段程序执行完毕后&#xff0c; CPU 继续执行刚才的程序。 通常&#xff0c;中断牺牲的是个体的时间&#xff0c;但可以实现多设备的并发&#xff0c;从而提高系统效率 操作系统…

评估Jupyter环境的安全性

评估Jupyter环境的安全性 如何判断您的 Jupyter 实例是否安全&#xff1f; NVIDIA AI 红队开发了一个 JupyterLab 扩展来自动评估 Jupyter 环境的安全性。 jupysec 是一种根据近 100 条规则评估用户环境的工具&#xff0c;这些规则检测配置和工件&#xff0c;这些配置和工件已被…