我目前正在研究 Python 中的时间序列分类,到目前为止我已经尝试过 sktime 库。据我了解,大多数进行预测的方法都需要一个时间序列:
prediction (a time series) = class_label
我的问题是:如何搜索和应用算法,这些算法在进行预测时需要时间 t0 的单个数据点,而不是完整的时间序列?喜欢:
prediction (data at time t0) = class_label
我目前正在研究 Python 中的时间序列分类,到目前为止我已经尝试过 sktime 库。据我了解,大多数进行预测的方法都需要一个时间序列:
prediction (a time series) = class_label
我的问题是:如何搜索和应用算法,这些算法在进行预测时需要时间 t0 的单个数据点,而不是完整的时间序列?喜欢:
prediction (data at time t0) = class_label
单时间点数据和多时间点数据的唯一区别在于,单时间点数据只是相同的多时间点数据,但只有 1 个条目。
从这个意义上说,任何处理多点的函数也可以处理单点,只需向它们提供由 1 个条目和该时间点数据组成的数组。
假设您有一些单个时间点的数据,该数据是a0
任何形状的任何数组,例如您有 1Da0
形状数组,(10,)
即具有 10 个特征。
然后,您可以将此数组转换为多个时间点数据的 2D 数组,只需将其转换为形状即可,(1, 10)
这是通过短语法为 numpy 数组完成的,a_mult = a0[None]
或者以相同的结果执行此操作的另一种方法是a_mult = np.expand_dims(a0, 0)
,只是更长的语法。
a0
转换为之后,a_mult
您可以a_mult
在以后接受多个时间点数据的任何函数中使用。下面的示例代码:
import numpy as np
a0 = np.array([1,2,3,4,5])
print(a0.shape, a0)
a_mult = a0[None]
print(a_mult.shape, a_mult)
# Now call your multi-point function f_predict(a_mult)
输出
(5,) [1 2 3 4 5]
(1, 5) [[1 2 3 4 5]]
对于相反的情况,也可以做类似的事情,即当您有多个时间点数据并且您想将它们提供给只接受一个时间点的函数时。这也可以通过索引您的数组并具有循环来轻松实现,例如,如果您有a_mult
多个点的数组,那么将其转换为单点只需执行a0 = a_mult[k]
wherek
是从0
到的任何整数number_of_time_points - 1
。k
可以通过常规 Python 循环进行迭代。下面的示例代码:
import numpy as np
a_mult = np.array([
[1,2,3,4,5],
[6,7,8,9,10],
])
print(a_mult.shape)
print(a_mult)
f_predict = lambda x: np.sum(x) # Simple function, just does a sum of elements
res = np.zeros((a_mult.shape[0],), dtype = np.int64)
for k in range(a_mult.shape[0]):
a0 = a_mult[k]
# Now call your single-point function f_predict
# and store result into res
res[k] = f_predict(a0)
print(res)
# Same as in code above can be achieved by next short syntax
res = np.array([f_predict(a_mult[k]) for k in range(a_mult.shape[0])])
print(res)
输出
(2, 5)
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
[15 40]
[15 40]