python中时间序列数据的监督学习数据集的建立

2024-04-25 00:37:40 发布

您现在位置: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处理这个问题的经验?你能给我一个主意吗?你知道吗


Tags: 数据in时间序列allvaluesx1x2
1条回答
网友
1楼 · 发布于 2024-04-25 00:37:40

我将制作一些示例数据,以便我们可以看到算法的行为。你知道吗

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结束到第2天早上7:00开始,这种方法会在特征向量中隐藏该不连续性的位置。不过,这可能不是一个问题。取决于你在做什么,你有什么样的数据,希望这是足够的开始。玩得开心,欢迎来到机器学习。你知道吗

相关问题 更多 >