tsfresh.feature_selection 包

子模块

tsfresh.feature_selection.relevance 模块

包含一个特征选择方法,该方法评估不同提取特征的重要性。为此,对于每个特征,通过单变量测试评估其对目标的影响,并计算p值。计算p值的方法称为特征选择器。

随后,Benjamini Hochberg 程序(一种多重检验程序)决定保留哪些特征以及剔除哪些特征(仅基于 p 值)。

tsfresh.feature_selection.relevance.calculate_relevance_table(X, y, ml_task='auto', multiclass=False, n_significant=1, n_jobs=5, show_warnings=False, chunksize=None, 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)[源代码]

计算特征矩阵 X 中包含的特征相对于目标向量 y 的相关性表。相关性表是针对预期的机器学习任务 ml_task 计算的。

为了实现这一点,对于输入的 pandas.DataFrame 中的每个特征,都会进行单变量特征显著性检验。这些检验生成 p 值,然后通过 Benjamini Hochberg 程序进行评估,以决定保留哪些特征和删除哪些特征。

我们正在测试

= 该功能不相关,不应添加

反对

= 该特征是相关的,应予以保留

或者换句话说

= 目标和特征是独立的 / 特征对目标没有影响

= 目标和特征是相关/依赖的

当目标是二进制时,这变为

其中

是目标的分布。

同样地,我们可以在特征为二元时陈述假设

这里

是目标的分布。

TODO: 对于实数值呢?

参数:
  • X (pandas.DataFrame) – 在前述格式中的特征矩阵将被简化为仅包含相关特征。它可以同时包含二进制或实值特征。

  • y (pandas.Series or numpy.ndarray) – 目标向量,用于测试哪些特征是相关的。可以是二进制或实值。

  • ml_task (str) – 预期的机器学习任务。可以是 ‘分类’’回归’‘自动’。默认为 ‘自动’,表示预期的任务是从 y 推断出来的。如果 y 具有布尔值、整数或对象数据类型,则任务被假定为分类,否则为回归。

  • multiclass (bool) – 问题是否为多类分类。这会改变特征选择的方式。多类分类要求特征对预测 n_significant 类具有统计显著性。

  • n_significant (int) – 特征应被视为’相关’的类的数量,这些特征在统计上应是显著的预测因子

  • test_for_binary_target_binary_feature (str) – 用于二元目标、二元特征(当前未使用)的测试

  • test_for_binary_target_real_feature (str) – 用于二元目标、实特征的测试

  • test_for_real_target_binary_feature (str) – 对于实际目标,应使用哪个测试,二进制特征(当前未使用)

  • test_for_real_target_real_feature (str) – 对于真实目标、真实特征(当前未使用),应使用哪种测试

  • fdr_level (float) – 应遵守的FDR水平,这是在所有创建的特征中,理论上预期的不相关特征的百分比。

  • hypotheses_independent (bool) – 特征的重要性可以假设为独立的吗?通常情况下,这应该设置为 False,因为特征从来都不是独立的(例如,均值和中位数)

  • n_jobs (int) – 在p值计算过程中使用的进程数

  • show_warnings (bool) – 在计算p值时显示警告(计算器调试所需)。

  • chunksize (None or int) – 提交给工作进程进行并行处理的单个块的大小。其中,一个块定义为一个特征的数据。如果将chunksize设置为10,则意味着一个任务是过滤10个特征。如果设置为None,则根据分发器,使用启发式方法来找到最佳的chunksize。如果你遇到内存不足的异常,可以尝试使用dask分发器和较小的chunksize。

返回:

一个 pandas.DataFrame,其中输入 DataFrame X 的每一列作为索引,并包含该特定特征的显著性信息。DataFrame 包含以下列:“feature”、“type”(二进制、实数或常数)、“p_value”(该特征的显著性,以 p 值表示,越低表示越显著)、“relevant”(如果 Benjamini Hochberg 程序拒绝了该特征的零假设 [该特征不相关],则为 True)。如果问题是 multiclass 且有 n 个类别,DataFrame 将包含 n 个名为“p_value_CLASSID”的列,而不是“p_value”列。CLASSID 在这里指的是 y 中设置的不同值。还将有 n 个名为 relevant_CLASSID 的列,指示该特征是否对该类别相关。

返回类型:

pandas.DataFrame

tsfresh.feature_selection.relevance.combine_relevance_tables(relevance_tables)[源代码]

从一系列相关性表格中创建一个综合相关性表格,汇总 p 值和相关性。

参数:

relevance_tables (List[pd.DataFrame]) – 相关性表的列表

返回:

综合相关性表

返回类型:

pandas.DataFrame

tsfresh.feature_selection.relevance.get_feature_type(feature_column)[源代码]

对于给定的特征,确定它是实数、二进制还是常数。这里二进制意味着该特征中只出现两个唯一值。

参数:

feature_column (pandas.Series) – 功能列

返回:

‘常量’, ‘二进制’ 或 ‘实数’

tsfresh.feature_selection.relevance.infer_ml_task(y)[源代码]

推断要选择的机器学习任务。结果将是 ‘回归’‘分类’。如果目标向量仅由整数类型值或对象组成,我们假设任务是 ‘分类’。否则为 ‘回归’

参数:

y (pandas.Series) – 目标向量 y。

返回:

‘分类’ 或 ‘回归’

返回类型:

str

tsfresh.feature_selection.selection 模块

此模块包含提取特征的过滤过程。过滤程序也可以用于非基于时间序列的其他特征。

tsfresh.feature_selection.selection.select_features(X, y, 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=5, show_warnings=False, chunksize=None, ml_task='auto', multiclass=False, n_significant=1)[源代码]

检查特征矩阵 X 中所有特征(列)的重要性,并返回仅包含相关特征的可能缩减的特征矩阵。

特征矩阵必须是一个 pandas.DataFrame,格式为:

索引

功能_1

功能_2

功能_N

A

B

每一列将被视为一个特征,并测试其对目标的重要性。

目标向量必须是 pandas.Series 或 numpy.array 的形式

索引

目标

A

B

.

.

并且必须包含特征矩阵中的所有 id。如果 y 是一个没有索引的 numpy.array,则假定 y 与 X 具有相同的顺序和长度,并且行相互对应。

示例

>>> from tsfresh.examples import load_robot_execution_failures
>>> from tsfresh import extract_features, select_features
>>> df, y = load_robot_execution_failures()
>>> X_extracted = extract_features(df, column_id='id', column_sort='time')
>>> X_selected = select_features(X_extracted, y)
参数:
  • X (pandas.DataFrame) – 在前述格式中的特征矩阵将被简化为仅包含相关特征。它可以同时包含二进制或实值特征。

  • y (pandas.Series or numpy.ndarray) – 目标向量,用于测试哪些特征是相关的。可以是二进制或实值。

  • test_for_binary_target_binary_feature (str) – 用于二元目标、二元特征(当前未使用)的测试

  • test_for_binary_target_real_feature (str) – 用于二元目标、实特征的测试

  • test_for_real_target_binary_feature (str) – 对于实际目标,应使用哪个测试,二进制特征(当前未使用)

  • test_for_real_target_real_feature (str) – 对于真实目标、真实特征(当前未使用),应使用哪种测试

  • fdr_level (float) – 应遵守的FDR水平,这是在所有创建的特征中,理论上预期的不相关特征的百分比。

  • hypotheses_independent (bool) – 特征的重要性可以假设为独立的吗?通常情况下,这应该设置为 False,因为特征从来都不是独立的(例如,均值和中位数)

  • n_jobs (int) – 在p值计算过程中使用的进程数

  • show_warnings (bool) – 在计算p值时显示警告(计算器调试所需)。

  • chunksize (None or int) – 提交给工作进程进行并行处理的单个块的大小。其中,一个块定义为一个特征的数据。如果将chunksize设置为10,则意味着一个任务是过滤10个特征。如果设置为None,则根据分发器,使用启发式方法来找到最佳的chunksize。如果你遇到内存不足的异常,可以尝试使用dask分发器和较小的chunksize。

  • ml_task (str) – 预期的机器学习任务。可以是 ‘分类’’回归’‘自动’。默认为 ‘自动’,表示预期的任务是从 y 推断出来的。如果 y 具有布尔值、整数或对象数据类型,则任务被假定为分类,否则为回归。

  • multiclass (bool) – 问题是否为多类分类。这会改变特征选择的方式。多类分类要求特征在预测 n_significant 特征时具有统计显著性。

  • n_significant (int) – 特征应被视为’相关’的统计显著预测因子的类的数量。仅在 multiclass=True 时指定。

返回:

与 X 相同的 DataFrame,但可能减少了列数(= 特征)。

返回类型:

pandas.DataFrame

引发:

当目标向量与特征矩阵不匹配或 ml_task 不是 ‘auto’’classification’‘regression’ 之一时,会出现 ValueError

tsfresh.feature_selection.significance_tests 模块

包含以下关于FRESH算法论文中的方法 [2]

Fresh 基于假设检验,分别检查每个生成的特征对目标的重要性。它确保只保留与当前回归或分类任务相关的特征。Fresh 根据特征和目标是否为二进制来决定四种设置之一。

这四个函数被命名为

  1. target_binary_feature_binary_test(): 目标和特征都是二进制的

  2. target_binary_feature_real_test(): 目标为二元且特征为实数

  3. target_real_feature_binary_test(): 目标为实数且特征为二进制

  4. target_real_feature_real_test(): 目标和特征均为实数

引用

tsfresh.feature_selection.significance_tests.target_binary_feature_binary_test(x, y)[源代码]

计算二元特征对二元目标的特征重要性作为一个p值。为此使用来自 fisher_exact() 的双侧单变量费舍尔检验。

参数:
  • x (pandas.Series) – 二进制特征向量

  • y (pandas.Series) – 二进制目标向量

返回:

特征显著性检验的p值。p值越低,特征显著性越高。

返回类型:

float

Raise:

如果目标或特征不是二进制的,则引发 ValueError

tsfresh.feature_selection.significance_tests.target_binary_feature_real_test(x, y, test)[源代码]

计算实值特征对二元目标的特征重要性作为p值。使用 mannwhitneyu() 中的 Mann-Whitney Uks_2samp() 中的 Kolmogorov Smirnov 进行此操作。

参数:
  • x (pandas.Series) – 实值特征向量

  • y (pandas.Series) – 二进制目标向量

  • test (str) – 要使用的显著性检验。可以是 'mann' 表示 Mann-Whitney-U 检验,或者是 'smir' 表示 Kolmogorov-Smirnov 检验。

返回:

特征显著性检验的p值。p值越低,特征显著性越高。

返回类型:

float

Raise:

如果目标不是二进制文件,则引发 ValueError

tsfresh.feature_selection.significance_tests.target_real_feature_binary_test(x, y)[源代码]

计算二元特征对实值目标的特征重要性,作为p值。为此使用 ks_2samp() 中的 Kolmogorov-Smirnov 检验。

参数:
  • x (pandas.Series) – 二进制特征向量

  • y (pandas.Series) – 实值目标向量

返回:

特征显著性检验的 p 值。p 值越低,特征显著性越高。

返回类型:

float

Raise:

ValueError 如果特征不是二进制的。

tsfresh.feature_selection.significance_tests.target_real_feature_real_test(x, y)[源代码]

计算一个实值特征对一个实值目标的特征重要性,作为p值。为此使用 kendalltau() 中的 Kendall’s tau

参数:
  • x (pandas.Series) – 实值特征向量

  • y (pandas.Series) – 实值目标向量

返回:

特征显著性检验的 p 值。p 值越低,特征显著性越高。

返回类型:

float

模块内容

The feature_selection 模块包含特征选择算法。这些方法适用于从大量特征中挑选出最佳解释特征。通常在特征数量多于样本数量的情况下需要挑选特征。传统的特征选择方法可能不适用于这种情况,因此我们提出了一种基于p值的方法,该方法单独检查特征的显著性,以避免过拟合和虚假相关。