时间序列学习 经典案例(2)【tsfresh】基于datetime索引的特征提取

本文介绍如何使用Datetime索引从时间序列数据中提取特征,并通过tsfresh库实现分类任务。特别关注了利用时间间隔信息的重要性,展示了如何构建带有Datetime索引的时间序列容器并计算基于时间的特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用Datetime索引从数据帧(某一个事物的多个时间点组成集合)中提取特征的案例背景

在许多情况下,假设定时进行时变测量就足够了。然而,对于大量的任务,在进行测量时考虑到这一点是很重要的。例如医疗保健,生命体征测量的间隔时间包含重要信息。

注意:这种提取是针对分类的情况对时间进行提取的,提取之后不再存在显性的时间。一般用于分类聚类,少用于预测,且一般用于不固定的时间间隔。

此外,本质上来说这是一种抽取特征的方法,比如本案例中,id 代表了某一个事物,这里有事物a、b,然后事物a 有多个时间点,事物b有多个时间点;拿a来说,a的多个时间点组成了一个集合,对这个集合进行抽取特征,那么这些特征可代表a用来把a和b区分开来。

Tsfresh现在支持使用timeseries容器的索引来计算特性的计算器函数。这些函数的唯一要求是输入数据帧的索引是pd.DatetimeIndex类型。这些函数包含在新类TimeBasedFCParameters中。

注意,所有其他函数的行为都不受影响。extract_features()的设置参数既可以包含依赖索引的函数,也可以包含“常规”函数。

2.获取数据

import pandas as pd
from tsfresh.feature_extraction import extract_features
# TimeBasedFCParameters contains all functions that use the Datetime index of the timeseries container
from tsfresh.feature_extraction.settings import TimeBasedFCParameters  
df = pd.DataFrame({"id": ["a", "a", "a", "a", "b", "b", "b", "b"], 
                   "value": [1, 2, 3, 1, 3, 1, 0, 8],
                   "kind": ["temperature", "temperature", "pressure", "pressure",
                            "temperature", "temperature", "pressure", "pressure"]},
                   index=pd.DatetimeIndex(
                       ['2019-03-01 10:04:00', '2019-03-01 10:50:00', '2019-03-02 00:00:00', '2019-03-02 09:04:59',
                        '2019-03-02 23:54:12', '2019-03-03 08:13:04', '2019-03-04 08:00:00', '2019-03-04 08:01:00']
                   ))
df = df.sort_index()
df

在这里插入图片描述

3.构建一个带有Datetime索引的时间序列容器

构建一个带有datetime索引的数据帧。格式必须包含一个value和一个kind列,因为每个度量值都有自己的时间戳——也就是说,不假设度量值是同步的。

现在TimeBasedFCParameters只包含linear_trend_timewise,它执行线性趋势的计算,但为了执行线性回归,使用测量之间的小时时间差。和往常一样,可以在tsfresh/feature_extraction/feature_calculators.py中添加自己的函数。

settings_time = TimeBasedFCParameters()
settings_time

在这里插入图片描述
提取特征,指定列值、类型和id。

X_tsfresh = extract_features(df, column_id="id", column_value='value', column_kind='kind',
                             default_fc_parameters=settings_time)
X_tsfresh.head()

在这里插入图片描述
输出看起来和往常一样。如果将其与“常规”的线性趋势特征计算器进行比较,可以看到截距、p和R值是相同的,正如所期望的那样——只是斜率现在不同了。

settings_regular = {'linear_trend': [
  {'attr': 'pvalue'},
  {'attr': 'rvalue'},
  {'attr': 'intercept'},
  {'attr': 'slope'},
  {'attr': 'stderr'}
]}

X_tsfresh = extract_features(df, column_id="id", column_value='value', column_kind='kind',
                             default_fc_parameters=settings_regular)
X_tsfresh.head()

在这里插入图片描述

4.编写自己的基于时间的功能计算器

编写自己的基于时间的功能计算器与平常没有什么不同。只有两个新属性必须使用@set_property 装饰器设置:

  • @set_property("input", "pd. series ")告诉函数函数的输入是一个pd.Series而不是numpy数组。
  • @set_property("index_type", pd.DatetimeIndex)告诉函数,输入是一个DatetimeIndex,允许它根据时间数据类型执行计算。

例如,如果想要编写一个函数来计算第一次和最后一次测量之间的时间,它可以像这样:

@set_property("input", "pd.Series")
@set_property("index_type", pd.DatetimeIndex)
def timespan(x, param):
    ix = x.index

    # Get differences between the last timestamp and the first timestamp in seconds, then convert to hours.
    times_seconds = (ix[-1] - ix[0]).total_seconds()
    return times_seconds / float(3600)
### 时间序列特征提取库 #### Python 中的时间序列特征提取库 对于时间序列特征提取,在 Python 生态中有多个强大的库可以利用: - **tsfresh**: 这是一个专门用于自动从时间序列中抽取特征的开源 Python 库。它能够计算大量统计特性,如基本统计数据、频率成分以及更复杂的非线性度量[^4]。 ```python from tsfresh import extract_features, select_features from tsfresh.utilities.dataframe_functions import impute # 假设 df 是包含时间序列数据的数据框 extracted_features = extract_features(df, column_id="id", column_sort="time") impute(extracted_features) ``` - **featuretools**: Featuretools 是一个通用框架,支持多种类型的数据集,也适用于时间序列数据分析。通过定义实体及其关系,Featuretools 能够自动生成丰富的特征集合。 ```python import featuretools as ft es = ft.EntitySet(id='timeseries_data') es.entity_from_dataframe(entity_id='data', dataframe=df, index='index_col', time_index='datetime') fm, features = ft.dfs(entityset=es, target_entity='data') ``` #### R 中的时间序列特征提取包 在 R 语言环境中同样存在一些优秀的工具来进行时间序列特征工程: - **feasts**: 提供了一套全面的方法来探索和分析时间序列特征。Feasts 包含了各种函数用来绘制图形、分解季节性和趋势分量并计算不同类型的摘要统计量[^1]。 ```r library(feasts) # 计算时间序列的一些基础特征 features <- tsibble %>% features(value, feat_stl()) ``` - **timsac**: Timsac 是另一个专注于时间序列建模与预测的 R 包,其中包含了若干方法可用于特征构建,比如 ARIMA 参数估计等。 这些库提供了广泛的功能帮助用户有效地完成时间序列预处理工作,并为进一步应用机器学习模型打下良好基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony Einstein

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值