[英]How to create supervised learning dataset from time series data in python
我有一個時間序列數據,但一天中有很多值,如下所示:
[[day1, x1],
[day1, x2],
[day1, x3],
[day2, x4],
[day2, x5],
[day3, x6],
[day4, x7],
[day4, x8],
[day4, x9],
......]
等等。 我想將此時間序列轉換為使用python的監督學習數據集。 我的期望數據集如下:
[[[all values in day1], [all values in day2]],
[[all values in day2], [all values in day3]],
[[all values in day3], [all values in day4]],
.....]
有沒有人在python有這個問題的經驗? 你能給我個主意嗎?
我將制作一些示例數據,以便我們可以了解算法的行為。
time_series_data = [[1, 0.5],
[1, 0.6],
[2, 0.3],
[3, 0.7],
[3, 0.4],
[4, 0.1]]
有了這一點,我們就可以按日轉換繼續分解此列表。
import itertools as it
res = [[time_series_data[0][1]]]
for i, (day, val) in enumerate(it.islice(time_series_data, 1, len(time_series_data))):
if time_series_data[i][0] != day:
res.append([val])
else:
res[-1].append(val)
檢查輸出,我們看到它所做的只是每天分組。
>>> res
[[0.5, 0.6], [0.3], [0.7, 0.4], [0.1]]
然后要將其實際變成監督學習問題,我們需要輸入/輸出對。
data = [res[i:i+2] for i in range(0, len(res)-1)]
這具有所需的輸出:
>>>> data
[[[0.5, 0.6], [0.3]],
[[0.3], [0.7, 0.4]],
[[0.7, 0.4], [0.1]]]
關於按天分組的一件有趣的事情是,我們不必再獲得相同長度的列表。 許多有監督的學習算法都依賴於特征向量的思想,其中長度保留在整個數據集中。 要將它們應用於更多的奇異對象,您必須首先弄清楚如何從那些對象(此處的對象指的是[0.5, 0.6]
)中提取固定長度的特征向量。
如果您有相同數量的數據點的每一天,這將不會是一個問題,但如果數據點的數量不同,如果天一起運行(即你的最后day1
數據對應於你的開頭day2
數據,或者至少是時間上接近的東西,所以沒有很大的連續性差距),那么您可能會對更接近所有值的滑動窗口而不是按天分組的值更感興趣。 考慮以下:
vals = [val for day, val in time_series_data]
像往常一樣,我們檢查輸出以弄清楚這里發生了什么。
>>> vals
[0.5, 0.6, 0.3, 0.7, 0.4, 0.1]
您會注意到我們完全擺脫了當天的信息。 這樣做之后,我們可以輕松構造一種輸入/輸出對形式。
input_length = 2
output_length = 1
X = [vals[i:i+input_length] for i in xrange(0, len(vals)-input_length-output_length+1)]
y = [vals[i:i+output_length] for i in xrange(input_length, len(vals)-output_length+1)]
現在檢查輸入(我稱為X
)和輸出(我稱為y
)。
>>> X
[[0.5, 0.6],
[0.6, 0.3],
[0.3, 0.7],
[0.7, 0.4]]
>>> y
[[0.3],
[0.7],
[0.4],
[0.1]]
您會發現X
列表與y
列表一樣多(因為它們是輸入/輸出對),同樣重要的是X
中的每個列表都具有相同的長度 。 同樣, y
中的每個列表的長度都相同。 這種問題更適合於大量現有的機器學習算法。
就是說,如果您的數據存在不連續性 ,比如說從第1天開始於5:00 PM,第2天開始於第二天的7:00 AM,則此方法會將不連續性的位置隱藏在特征向量中。 不過,這可能不是問題。 根據您正在做的事情以及擁有的數據類型,希望這足以開始。 玩得開心,歡迎來到機器學習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.