幾行 Python 代碼就可以提取數(shù)百個時間序列特征
傳統(tǒng)的機器學習算法不能捕捉時間序列數(shù)據(jù)的時間順序。數(shù)據(jù)科學家需要執(zhí)行相關的特征工程,將數(shù)據(jù)的重要特征捕獲到幾個指標中。生成大量的時間序列特征并從中提取相關特征是一項耗時且繁瑣的工作。
python的tsfresh包可以為時間序列數(shù)據(jù)生成標準的數(shù)百個通用特性。在本文中,我們將深入討論tsfresh包的使用。
tsfresh 是一個可以生成數(shù)百個相關的時間序列特征的開源包。 從 tsfresh 生成的特征可用于解決分類、預測和異常值檢測用例。
tsfresh 包提供了對時間序列數(shù)據(jù)執(zhí)行特征工程的各種功能,包括:
- 特征生成
- 特征選擇
- 與大數(shù)據(jù)的兼容性
安裝tsfresh 也非常的簡單,官方提供了pip和conda的安裝方式:
pip install -U tsfresh# orconda install -c conda-forge tsfresh
1、特征生成
tsfresh 包提供了一個自動特征生成 API,可以從 1 個時間序列變量中生成 750 多個相關特征。 生成的特征廣泛,包括:
- 描述性統(tǒng)計(平均值、最大值、相關性等)
- 基于物理的非線性和復雜性指標
- 數(shù)字信號處理相關功能
- 歷史壓縮特征
使用 tsfresh.extract_features() 函數(shù)可以為 1 個時間序列變量從多個域生成 789 個特征。
import pandas as pdfrom tsfresh import select_features# Read the time-series datadf = pd.read_excel("train.xlsx", parse_dates=['date']).set_index('date')# automated feature generationfeatures = tsfresh.extract_features(df, column_id="date", column_sort="date")
因為特征太多,所以具體的所有特征的介紹請查看官方文檔。
2、特征選擇
tsfresh 包還提供了一個基于假設檢驗的特征選擇實現(xiàn),可以用于識別目標變量的相關特征。 為了限制不相關特征的數(shù)量,tsfresh 包含了fresh算法(fresh 代表基于可擴展假設測試的特征提?。?。
tsfresh.select_features() 函數(shù)用戶可以實現(xiàn)特征選擇。
3、兼容大數(shù)據(jù)
當我們有大量的時間序列數(shù)據(jù)時。tsfresh還提供api來擴展特征的生成/提取,以及針對大量數(shù)據(jù)的特征選擇實現(xiàn):
- 多線程處理:默認tsfresh包可以將特征生成/提取和特征選擇在多核上并行執(zhí)行。
- 分布式框架:tsfresh還實現(xiàn)了一個自己的分布式框架,將特征計算分布在多臺機器上加快計算速度。
- Spark兼容:tsfresh還可以使用spark或Dask來處理非常大的數(shù)據(jù)。
最后總結,tsfresh可以通過幾行Python代碼中為時間序列特性生成和選擇相關特性。它會自動從基于時間的數(shù)據(jù)樣本的多個域中提取和選擇 750 +個經(jīng)過實際測試的特征。 它減少了數(shù)據(jù)科學家浪費在特征工程上的大量工作時間。
并且時間序列數(shù)據(jù)是相當大的,tsfresh 也通過多線程、支持dask和spark來處理單機處理不了的大數(shù)據(jù)樣本。