scikit-learn Transformer

tsfresh 包含三个兼容 scikit-learn 的 Transformer,这些 Transformer 允许您轻松地将时间序列的特征提取和特征选择整合到现有的机器学习管线中。

scikit-learn 的管线(pipeline)允许您将多个预处理步骤组装起来,这些步骤将按顺序执行,从而可以在设置不同参数的同时一起进行交叉验证(有关 scikit-learn 管线的更多详细信息,请参阅官方文档[1])。我们的 tsfresh Transformer 允许您在这些预处理序列中提取和过滤时间序列特征。

tsfresh 中的前两个估计器(estimator)是 FeatureAugmenter(用于提取特征)和 FeatureSelector(执行特征选择算法)。为了避免不必要的特征计算,最好将特征的提取和过滤组合在一个步骤中。因此,RelevantFeatureAugmenter 将特征的提取和过滤合并在一个步骤中。

示例

在以下示例中,您将看到我们如何将 tsfresh 的 RelevantFeatureAugmenter 和一个 RandomForestClassifier 组合到一个管线中。这个管线可以在一个步骤中同时拟合(fit)我们的 Transformer 和分类器。

from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from tsfresh.examples import load_robot_execution_failures
from tsfresh.transformers import RelevantFeatureAugmenter
import pandas as pd

# Download dataset
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures
download_robot_execution_failures()

pipeline = Pipeline([
            ('augmenter', RelevantFeatureAugmenter(column_id='id', column_sort='time')),
            ('classifier', RandomForestClassifier()),
            ])

df_ts, y = load_robot_execution_failures()
X = pd.DataFrame(index=y.index)

pipeline.set_params(augmenter__timeseries_container=df_ts)
pipeline.fit(X, y)

RelevantFeatureAugmenter 的参数与顶级便利函数 extract_relevant_features() 的参数对应。在上面的例子中,我们只设置了两个列的名称:column_id='id'column_sort='time'(有关这些参数的更多详细信息,请参阅数据格式)。

由于在对 sklearn.pipeline.Pipeline 调用 fit 或 transform 时,我们无法直接将时间序列容器作为参数传递给增强器(augmenter)步骤,因此我们必须通过调用 pipeline.set_params(augmenter__timeseries_container=df_ts) 手动设置它。通常,您可以通过调用管线的 set_params() 方法或 Transformer 的 set_timeseries_container() 方法来更改提取特征的时间序列容器。

如需更多示例,请访问 tsfresh github 仓库 notebooks 文件夹中的 Jupyter Notebook 02 sklearn Pipeline.ipynb。

参考文献