tsfresh.transformers 包

子模块

tsfresh.transformers.feature_augmenter 模块

class tsfresh.transformers.feature_augmenter.FeatureAugmenter(default_fc_parameters=None, kind_to_fc_parameters=None, column_id=None, column_sort=None, column_kind=None, column_value=None, timeseries_container=None, chunksize=None, n_jobs=1, show_warnings=False, disable_progressbar=False, impute_function=None, profile=False, profiling_filename='profile.txt', profiling_sorting='cumulative')[source]

基类:BaseEstimator, TransformerMixin

与 Sklearn 兼容的估计器,用于计算从给定时间序列中提取的许多特征并将其添加到数据中。它本质上是 extract_features() 的一个包装器。

这些特征包括最小值、最大值或中位数等基本特征,以及傅里叶变换或统计检验等高级特征。有关所有可能特征的列表,请参阅模块 feature_calculators。每个添加特征的列名包含用于计算该特征的模块函数的名称。

对于此估计器,两个数据集起着关键作用

  1. 包含时间序列数据的时间序列容器。此容器(格式见 数据格式)包含用于计算特征的数据。它必须能够按 ID 分组,这些 ID 用于识别哪个特征应附加到第二个数据框中的哪一行。

  2. 输入数据 X,特征将添加到其中。其行由索引标识,X 中的每个索引必须作为 ID 存在于时间序列容器中。

设想以下情景:您想对 10 种不同的金融股票进行分类,并且您拥有它们去年作为时间序列的发展情况。然后,您可以首先从股票的元信息(例如它们上市多久等)创建特征,并填写一个表格 - 每只股票的特征占一行。这就是输入数组 X,其中每行由例如股票名称作为索引标识。

>>> df = pandas.DataFrame(index=["AAA", "BBB", ...])
>>> # Fill in the information of the stocks
>>> df["started_since_days"] = ... # add a feature

然后,您可以使用此估计器从股票的时间发展中提取所有特征。时间序列容器必须包含一个 ID 列,该列与 X 的索引相同。

>>> time_series = read_in_timeseries() # get the development of the shares
>>> from tsfresh.transformers import FeatureAugmenter
>>> augmenter = FeatureAugmenter(column_id="id")
>>> augmenter.set_timeseries_container(time_series)
>>> df_with_time_series_features = augmenter.transform(df)

特征计算的设置可以通过设置对象控制。如果您传递 None,则使用默认设置。请参阅 ComprehensiveFCParameters 获取更多信息。

此估计器不选择相关特征,而是计算所有特征并将其添加到 DataFrame。有关计算和选择特征的信息,请参阅 RelevantFeatureAugmenter

有关参数 column_id、column_sort、column_kind 和 column_value 的含义描述,请参阅 extraction

fit(X=None, y=None)[source]

此估计器不需要 fit 函数。它只是什么都不做,存在是为了兼容性原因。

参数:
  • X (Any) – 不需要。

  • y (Any) – 不需要。

返回值:

估计器实例本身

返回类型:

FeatureAugmenter

set_timeseries_container(timeseries_container)[source]

设置用于计算特征的时间序列。有关时间序列容器的格式,请参阅 extraction。时间序列必须包含与稍后添加特征的 DataFrame(您将传递给 transform() 的那个)相同的索引。您可以随意多次调用此函数以稍后更改时间序列(例如,如果您想提取不同 ID 的时间序列)。

参数:

timeseries_container (pandas.DataFrame or dict) – 作为 pandas.DataFrame 或 dict 的时间序列。有关格式,请参阅 extraction

返回值:

None

返回类型:

None

transform(X)[source]

将使用 timeseries_container 计算的特征添加到输入 pandas.DataFrame X 中对应的行。

为了节省计算时间,您应该只在容器中包含您需要的时间序列。您可以使用方法 set_timeseries_container() 设置时间序列容器。

参数:

X (pandas.DataFrame) – 将添加计算的时间序列特征的 DataFrame。这*不是*包含时间序列本身的数据框。

返回值:

输入 DataFrame,但已添加特征。

返回类型:

pandas.DataFrame

tsfresh.transformers.feature_selector 模块

class tsfresh.transformers.feature_selector.FeatureSelector(test_for_binary_target_binary_feature='fisher', test_for_binary_target_real_feature='mann', test_for_real_target_binary_feature='mann', test_for_real_target_real_feature='kendall', fdr_level=0.05, hypotheses_independent=False, n_jobs=1, chunksize=None, ml_task='auto', multiclass=False, n_significant=1, multiclass_p_values='min')[source]

基类:BaseEstimator, TransformerMixin

与 Sklearn 兼容的估计器,用于将数据集中的特征数量减少到仅与给定目标相关且重要的特征。它本质上是 check_fs_sig_bh() 的一个包装器。

检查通过检验以下假设进行

H_0 = 该特征不相关且不能添加

对抗

H_1 = 该特征相关且应保留

使用几种统计检验(取决于特征和/或目标是否为二元)。使用 Benjamini Hochberg 过程,只拒绝 H_0 中的特征。

此估计器 - 与大多数 sklearn 估计器一样 - 采用两步过程。首先,在已知目标的训练数据上进行拟合

>>> import pandas as pd
>>> X_train, y_train = pd.DataFrame(), pd.Series() # fill in with your features and target
>>> from tsfresh.transformers import FeatureSelector
>>> selector = FeatureSelector()
>>> selector.fit(X_train, y_train)

在此示例中,相关特征列表为空

>>> selector.relevant_features
>>> []

特征重要性也是如此

>>> selector.feature_importances_
>>> array([], dtype=float64)

估计器会跟踪在训练步骤中相关的那些特征。如果您在训练后应用估计器,它将删除测试数据样本中的所有其他特征

>>> X_test = pd.DataFrame()
>>> X_selected = selector.transform(X_test)

之后,X_selected 将只包含训练期间相关的特征。

如果您对特征有更多信息感兴趣,可以在拟合后查看成员 relevant_features

fit(X, y)[source]

提取哪些特征使用给定目标相关的信息。

有关更多信息,请参阅 check_fs_sig_bh() 函数。输入数据样本中的所有列都视为特征。X 中所有行的索引必须存在于 y 中。

参数:
  • X (pandas.DataFrame or numpy.array) – 包含特征的数据样本,这些特征将被分类为相关或不相关

  • y (pandas.Series or numpy.array) – 用于对特征进行分类的目标向量

返回值:

已拟合的估计器,包含哪些特征相关的信息

返回类型:

FeatureSelector

transform(X)[source]

删除在拟合阶段不相关的所有特征。

参数:

X (pandas.DataSeries or numpy.array) – 包含所有特征的数据样本,将只保留相关的那些特征

返回值:

与 X 相同的数据样本,但只包含相关特征

返回类型:

pandas.DataFrame 或 numpy.array

tsfresh.transformers.per_column_imputer 模块

class tsfresh.transformers.per_column_imputer.PerColumnImputer(col_to_NINF_repl_preset=None, col_to_PINF_repl_preset=None, col_to_NAN_repl_preset=None)[source]

基类:BaseEstimator, TransformerMixin

与 Sklearn 兼容的估计器,用于按列对 DataFrames 进行填充(impute),方法是将所有 NaNsinfs 替换为同一列的平均值/极端值。它本质上是 impute() 的一个包装器。

DataFrame 中出现的每个 infNaN 都将被替换为

  • -inf -> min

  • +inf -> max

  • NaN -> median

此估计器 - 与大多数 sklearn 估计器一样 - 采用两步过程。首先,调用 .fit 函数,计算每列的最小值、最大值和中位数。其次,调用 .transform 函数,使用按列计算的最小值、最大值和中位数来替换出现的 NaNsinfs

fit(X, y=None)[source]

计算 DataFrame 中所有列的最小值、最大值和中位数。有关更多信息,请参阅 get_range_values_per_column() 函数。

参数:
  • X (pandas.DataFrame) – 用于计算最小值、最大值和中位数的 DataFrame

  • y (Any) – 不需要。

返回值:

包含计算出的最小值、最大值和中位数的估计器

返回类型:

Imputer

transform(X)[source]

按列替换 DataFrame X 中所有的 NaNs-inf+inf 为提供的字典中的平均值/极端值。

参数:

X (pandas.DataFrame) – 要填充(impute)的 DataFrame

返回值:

填充后的 DataFrame

返回类型:

pandas.DataFrame

引发:

RuntimeError – 如果替换字典仍为 None 类型。这可能发生在转换器未拟合时。

tsfresh.transformers.relevant_feature_augmenter 模块

class tsfresh.transformers.relevant_feature_augmenter.RelevantFeatureAugmenter(filter_only_tsfresh_features=True, default_fc_parameters=None, kind_to_fc_parameters=None, column_id=None, column_sort=None, column_kind=None, column_value=None, timeseries_container=None, chunksize=None, n_jobs=1, show_warnings=False, disable_progressbar=False, profile=False, profiling_filename='profile.txt', profiling_sorting='cumulative', test_for_binary_target_binary_feature='fisher', test_for_binary_target_real_feature='mann', test_for_real_target_binary_feature='mann', test_for_real_target_real_feature='kendall', fdr_level=0.05, hypotheses_independent=False, ml_task='auto', multiclass=False, n_significant=1, multiclass_p_values='min')[source]

基类:BaseEstimator, TransformerMixin

与 Sklearn 兼容的估计器,用于从时间序列中计算相关特征并将其添加到数据样本中。

与许多其他 sklearn 估计器一样,此估计器分两步工作

在拟合阶段,使用由 set_timeseries_container 函数设置的时间序列计算所有可能的时间序列特征(如果特征未通过传入 feature_extraction_settings 对象手动更改)。然后,使用统计方法计算它们与目标的显著性和相关性,并仅使用 Benjamini Hochberg 过程选择相关的特征。这些特征在内部存储。

在转换步骤中,使用拟合步骤中哪些特征相关的信息,并从时间序列中提取这些特征。然后将这些提取的特征添加到输入数据样本中。

此估计器是 tsfresh 包中大部分功能的包装器。有关子任务的更多信息,请参阅以下单个模块和函数:

此估计器与 FeatureAugmenter 的工作原理类似,不同之处在于此估计器只输出和计算相关特征,而另一个输出所有特征。

对于此估计器,也有两个数据集起着关键作用

  1. 包含时间序列数据的时间序列容器。此容器(格式见 extraction)包含用于计算特征的数据。它必须能够按 ID 分组,这些 ID 用于识别哪个特征应附加到第二个数据框中的哪一行

  2. 输入数据,特征将添加到其中。

设想以下情景:您想对 10 种不同的金融股票进行分类,并且您拥有它们去年作为时间序列的发展情况。然后,您可以首先从股票的元信息(例如它们上市多久等)创建特征,并填写一个表格 - 每只股票的特征占一行。

>>> # Fill in the information of the stocks and the target
>>> X_train, X_test, y_train = pd.DataFrame(), pd.DataFrame(), pd.Series()

然后,您可以使用此估计器从股票的时间发展中提取所有相关特征

>>> train_time_series, test_time_series = read_in_timeseries() # get the development of the shares
>>> from tsfresh.transformers import RelevantFeatureAugmenter
>>> augmenter = RelevantFeatureAugmenter()
>>> augmenter.set_timeseries_container(train_time_series)
>>> augmenter.fit(X_train, y_train)
>>> augmenter.set_timeseries_container(test_time_series)
>>> X_test_with_features = augmenter.transform(X_test)

然后,X_test_with_features 将包含与 X_test 相同的信息(包含您可能添加的所有元信息),以及根据您提供的时间序列计算的一些相关时间序列特征。

请记住,您在 fit 或 transform 之前提供的时间序列必须包含 X 中存在的行的数据。

如果您的 set filter_only_tsfresh_features 设置为 True,则在使用此估计器之前在 X_train(或 X_test)中存在的手动创建的特征不会被触及。否则,这些特征也会被评估,并且可能因为不相关而被从数据样本中删除。

有关参数 column_id、column_sort、column_kind 和 column_value 的含义描述,请参阅 extraction

您可以通过传入设置来控制拟合步骤中的特征提取(转换步骤中的特征提取是自动完成的)以及拟合步骤中的特征选择。然而,如果您不传递任何标志,使用的默认设置通常是相当合理的。

fit(X, y)[source]

使用来自 set_timeseries_container() 的给定时间序列,并从中计算特征,然后将它们添加到数据样本 X 中(数据样本 X 可以包含其他手动设计的特征)。

然后确定 X 中的哪些特征与给定的目标 y 相关。在内部存储这些相关特征,以便在转换步骤中只提取它们。

如果 filter_only_tsfresh_features 为 True,则只拒绝新自动添加的特征。如果为 False,则也会考虑 DataFrame 中已有的特征。

参数:
  • X (pandas.DataFrame or numpy.array) – 不含时间序列特征的数据框。索引行应存在于时间序列和目标向量中。

  • y (pandas.Series or numpy.array) – 用于定义哪些特征相关的目标向量。

返回值:

已拟合的估计器,包含哪些特征相关的信息。

返回类型:

RelevantFeatureAugmenter

fit_transform(X, y)[source]

等同于先调用 fit() 再调用 transform();然而,这比分开执行这些步骤更快,因为它避免了对训练数据重新提取相关特征。

参数:
  • X (pandas.DataFrame or numpy.array) – 不含时间序列特征的数据框。索引行应存在于时间序列和目标向量中。

  • y (pandas.Series or numpy.array) – 用于定义哪些特征相关的目标向量。

返回值:

一个数据样本,包含与 X 相同的信息,但已添加相关时间序列特征并删除了不相关信息(仅当 filter_only_tsfresh_features 为 False 时)。

返回类型:

pandas.DataFrame

set_timeseries_container(timeseries_container)[source]

设置用于计算特征的时间序列。有关时间序列容器的格式,请参阅 extraction。时间序列必须包含与稍后添加特征的 DataFrame(您将传递给 transform()fit() 的那个)相同的索引。您可以随意多次调用此函数以稍后更改时间序列(例如,如果您想提取不同 ID 的时间序列)。

参数:

timeseries_container (pandas.DataFrame or dict) – 作为 pandas.DataFrame 或 dict 的时间序列。有关格式,请参阅 extraction

返回值:

None

返回类型:

None

transform(X)[source]

在拟合步骤后,已知哪些特征是相关的,只从通过 set_timeseries_container() 函数提供的时间序列中提取这些特征。

如果 filter_only_tsfresh_features 为 False,则也删除数据框中不相关的、已有的特征。

参数:

X (pandas.DataFrame or numpy.array) – 要添加相关(并删除不相关)特征的数据样本。

返回值:

一个数据样本,包含与 X 相同的信息,但已添加相关时间序列特征并删除了不相关信息(仅当 filter_only_tsfresh_features 为 False 时)。

返回类型:

pandas.DataFrame

模块内容

模块 transformers 包含几个可在 sklearn pipeline 中使用的转换器。