几行 Python 代码就可以提取数百个时间序列特征

时间序列数据是随着时间的推移反复捕获的变量值,随着时间的推移可以产生一系列的按时间顺序索引的数据点。在时间序列中,数据具有自然的时间顺序,即一个变量在特定时间的值依赖于过去的值。

在这里插入图片描述

传统的机器学习算法不能捕捉时间序列数据的时间顺序。数据科学家需要执行相关的特征工程,将数据的重要特征捕获到几个指标中。生成大量的时间序列特征并从中提取相关特征是一项耗时且繁琐的工作。

python的tsfresh包可以为时间序列数据生成标准的数百个通用特性。在本文中,我们将深入讨论tsfresh包的使用。

tsfresh 是一个可以生成数百个相关的时间序列特征的开源包。从 tsfresh 生成的特征可用于解决分类、预测和异常值检测用例。

tsfresh 包提供了对时间序列数据执行特征工程的各种功能,包括:

  • 特征生成
  • 特征选择
  • 与大数据的兼容性

安装tsfresh 也非常的简单,官方提供了pip和conda的安装方式:

 pip install -U tsfresh 
 # or 
 conda install -c conda-forge tsfresh

1、特征生成

tsfresh 包提供了一个自动特征生成 API,可以从 1 个时间序列变量中生成 750 多个相关特征。生成的特征广泛,包括:

  • 描述性统计(平均值、最大值、相关性等)
  • 基于物理的非线性和复杂性指标
  • 数字信号处理相关功能
  • 历史压缩特征

使用 tsfresh.extract_features() 函数可以为 1 个时间序列变量从多个域生成 789 个特征。

 import pandas as pd 
 from tsfresh import select_features
 
 # Read the time-series data 
 df = pd.read_excel("train.xlsx", parse_dates=['date']).set_index('date')
 
 # automated feature generation
 features = tsfresh.extract_features(df, column_id="date", column_sort="date")

因为特征太多,所以具体的所有特征的介绍请查看官方文档。

2、特征选择

tsfresh 包还提供了一个基于假设检验的特征选择实现,可以用于识别目标变量的相关特征。为了限制不相关特征的数量,tsfresh 包含了fresh算法(fresh 代表基于可扩展假设测试的特征提取)。

tsfresh.select_features() 函数用户可以实现特征选择。

3、兼容大数据

当我们有大量的时间序列数据时。tsfresh还提供api来扩展特征的生成/提取,以及针对大量数据的特征选择实现:

  • 多线程处理:默认tsfresh包可以将特征生成/提取和特征选择在多核上并行执行。
  • 分布式框架:tsfresh还实现了一个自己的分布式框架,将特征计算分布在多台机器上加快计算速度。
  • Spark兼容:tsfresh还可以使用spark或Dask来处理非常大的数据。

最后总结,tsfresh可以通过几行Python代码中为时间序列特性生成和选择相关特性。

它会自动从基于时间的数据样本的多个域中提取和选择 750 +个经过实际测试的特征。它减少了数据科学家浪费在特征工程上的大量工作时间。

并且时间序列数据是相当大的,tsfresh 也通过多线程、支持dask和spark来处理单机处理不了的大数据样本。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,需要安装pywt库来进行小波变换,可以使用pip安装: ```python pip install pywt ``` 然后,可以使用pywt库中的wavedec函数进行小波分解,并使用approx和details等函数提取小波系数,代码示例如下: ```python import pywt # 输入时间序列 data = [1, 2, 3, 4, 5, 6, 7, 8] # 选择小波基 wavelet = 'db4' # 小波分解 coeffs = pywt.wavedec(data, wavelet) # 提取小波系数 approx = coeffs[0] details = coeffs[1:] ``` 其中,approx为近似系数,details为细节系数。可以根据需要调整小波基类型和分解层数来提取不同的特征。 ### 回答2: 小波散射(Wavelet scattering)是一种基于小波变换的特征提取方法,适用于时间序列信号的分析与分类。下面是使用Python实现小波散射提取时间序列特征代码: 首先,需要导入相应的库和模块,比如numpy、pywt和scipy: ```python import numpy as np import pywt from scipy.fftpack import fft ``` 接下来,定义一个函数用于计算小波散射系数: ```python def calc_wavelet_scattering_coefficients(signal): # 定义小波基和小波滤波器 wavelet = 'db4' wavelet_level1 = 'db1' wavelet_level2 = 'db2' # 对信号进行小波变换 signal = np.asarray(signal) coeffs = pywt.wavedec(signal, wavelet, level=2) # 计算小波能量 energy = np.sum(np.square(coeffs[0])) # 计算一阶小波散射系数 level1 = np.abs(np.sum(pywt.wavedec(signal, wavelet_level1)[1])) # 计算二阶小波散射系数 level2 = np.abs(np.sum(pywt.wavedec(signal, wavelet_level2)[1])) return energy, level1, level2 ``` 最后,使用上述函数提取时间序列的小波散射特征: ```python # 定义一个示例时间序列 signal = [0.5, 1.2, 3.6, 2.1, 4.3, 6.2, 7.9, 5.6, 2.8, 1.4] # 调用函数计算小波散射特征 energy, level1, level2 = calc_wavelet_scattering_coefficients(signal) # 打印结果 print("能量特征:", energy) print("一阶小波散射特征:", level1) print("二阶小波散射特征:", level2) ``` 上述代码中,我们首先定义了需要使用的小波基和小波滤波器的类型(可以根据实际需求进行修改)。然后,通过使用pywt.wavedec函数进行小波变换,并计算每个级别的小波散射系数。最后,将计算得到的小波散射特征打印出来。 这里只是一个简单的示例代码,实际使用时,可以根据需求进行修改和优化,比如添加更多的小波滤波器和计算更多级别的小波散射系数。 ### 回答3: 小波散射是一种用于时间序列特征提取的方法,可以提取时间序列中的局部和全局特征。下面是一个用Python实现小波散射提取时间序列特征代码示例。 ```python import numpy as np from scipy import signal import pywt def wavelet_scattering_extraction(time_series): # 输入时间序列 x = np.array(time_series) # 第一层小波变换 wavelet_coeffs = pywt.swt(x, 'db1', level=1) approx_coeffs, detail_coeffs = wavelet_coeffs[0][0], wavelet_coeffs[0][1] # 计算第二层小波变换的低频部分的局部和全局特征 wavelet_coeffs = pywt.swt(approx_coeffs, 'db1', level=1) second_level_approx_coeffs, second_level_detail_coeffs = wavelet_coeffs[0][0], wavelet_coeffs[0][1] local_features = [] global_features = [] # 提取局部特征 for coeff in second_level_detail_coeffs: local_features.append(np.mean(coeff)) local_features.append(np.std(coeff)) # 提取全局特征 global_features.append(np.mean(second_level_approx_coeffs)) global_features.append(np.std(second_level_approx_coeffs)) return local_features + global_features # 示例用法 time_series = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] features = wavelet_scattering_extraction(time_series) print("局部特征:", features[:len(features)//2]) print("全局特征:", features[len(features)//2:]) ``` 这段代码中,我们使用了`numpy`、`scipy`和`pywt`三个库。首先,我们使用`pywt.swt`函数对时间序列进行小波变换,得到一阶小波系数,其中低频部分为`approx_coeffs`,细节部分为`detail_coeffs`。然后,我们再次使用`pywt.swt`函数对低频部分`approx_coeffs`进行二阶小波变换,得到二阶小波系数,其中低频部分为`second_level_approx_coeffs`,细节部分为`second_level_detail_coeffs`。 最后,我们分别计算细节系数的均值和标准差作为局部特征,计算低频系数的均值和标准差作为全局特征,并将它们存储在`local_features`和`global_features`列表中。 在示例用法中,我们对一个简单的时间序列进行特征提取,并打印输出局部特征和全局特征

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值