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.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 根据特征和目标是否为二进制来决定四种设置之一。
这四个函数被命名为
target_binary_feature_binary_test(): 目标和特征都是二进制的target_binary_feature_real_test(): 目标为二元且特征为实数target_real_feature_binary_test(): 目标为实数且特征为二进制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 U 或ks_2samp()中的 Kolmogorov Smirnov 进行此操作。- 参数:
x (pandas.Series) – 实值特征向量
y (pandas.Series) – 二进制目标向量
test (str) – 要使用的显著性检验。可以是
'mann'表示 Mann-Whitney-U 检验,或者是'smir'表示 Kolmogorov-Smirnov 检验。
- 返回:
特征显著性检验的p值。p值越低,特征显著性越高。
- 返回类型:
float
- Raise:
如果目标不是二进制文件,则引发
ValueError。
模块内容
The feature_selection 模块包含特征选择算法。这些方法适用于从大量特征中挑选出最佳解释特征。通常在特征数量多于样本数量的情况下需要挑选特征。传统的特征选择方法可能不适用于这种情况,因此我们提出了一种基于p值的方法,该方法单独检查特征的显著性,以避免过拟合和虚假相关。