2016-12-14 334 views
3

我遇到了TSfresh庫,以此來構建時間序列數據。這些文檔非常棒,它看起來非常適合我正在開發的項目。用於python的TSFRESH庫處理時間過長

我想實現在TFresh文檔的快速入門部分中共享的以下代碼。這似乎很簡單。

from tsfresh import extract_relevant_features 
feature_filtered_direct=extract_relevant_features(result,y,column_id=0,column_sort=1) 

我的數據包括400000行傳感器數據,每個傳感器數據有6個傳感器,用於15個不同的ID。我開始運行代碼,17個小時後還沒有完成。我認爲這可能是一個太大的數據集通過相關的特徵提取器運行,所以我把它縮小到3000,然後再下降到300.這些操作都沒有讓代碼運行一個小時,我剛剛結束在等待一個小時左右後關閉它。我試過的標準特徵提取以及

extracted_features = extract_features(timeseries, column_id="id", column_sort="time") 

隨着試圖說TSfresh呈現在他們的快速啓動部分的示例數據集。其中包括一個與我的原始數據非常相似的數據集,其數據點的數量與我減少的數據點大致相同。

有沒有人有這段代碼的經驗?你會如何讓它工作得更快?我爲python 2.7使用Anaconda。

更新 它似乎與多處理有關。因爲我是在Windows上,使用多進程的代碼需要由

if __name__ == "__main__": 
    main() 

進行保護。一旦我加入

if __name__ == "__main__": 

    extracted_features = extract_features(timeseries, column_id="id", column_sort="time") 

我的代碼,示例數據的工作。我仍然在運行extract_relevant_features函數並在我自己的數據集上運行提取功能模塊時遇到了一些問題。似乎它繼續緩慢運行。我也有一種感覺,它與多進程凍結有關,但沒有任何錯誤出現,無法分辨。它花費了我大約30分鐘的時間來運行提取少於我數據集1%的特徵。

+0

當我從控制檯運行腳本時,我收到一些有趣的錯誤消息,似乎並沒有在Anaconda中顯示。這些錯誤消息是在不斷的循環中,這可以解釋爲什麼函數需要很長時間來執行(無限)。產生的RuntineError與freeze_support()有關,嘗試在自引導完成之前開始一個新進程。不知道這意味着什麼 –

回答

3

您使用了哪個版本的tsfresh?哪個OS?

我們意識到某些功能計算器的高計算成本。我們能做的更少。未來我們將實施一些像緩存這樣的技巧來進一步提高tsfresh的效率。

您是否試過僅使用MinimalFeatureExtractionSettings來計算基本特徵?它只包含諸如Max,Min,Median等基本功能,但應該以更快的方式運行。

from tsfresh.feature_extraction import MinimalFeatureExtractionSettings 
extracted_features = extract_features(timeseries, column_id="id", column_sort="time", feature_extraction_settings = MinimalFeatureExtractionSettings()) 

此外,安裝從pip install git+https://github.com/blue-yonder/tsfresh回購的最新版本可能是一個好主意。我們正在積極開發它,主人應該包含最新和最新的版本;)。

+0

我目前正在使用Windows 10上的版本0.3.0。我只在約197000行數據上運行了提取特徵模塊,大約需要830次。它的特徵選擇模塊在運行時似乎需要更長的時間。功能的完整補充在我的分析中非常有用。將這種操作擴展到數百萬行將佔用相當大的計算能力。 –

+0

我們剛剛發佈了0.4.0版本,它包含一個ReasonableFeatureExtraction設置對象,該對象將提取除兩個熵特徵以外的所有對象。有了這個,我能夠處理長度爲1000的100000個時間序列,因此在i6800k(6個核心,4.3 Ghz)的情況下,大約3個小時能處理1億行。另外我使用parallelization =「per_sample」 – MaxBenChrist