我在做多项时间序列的无监督学习(聚类和DR)。我需要减少数据的维数,这是稀疏的,并且有很多维数。我意识到某种形式的张量分解可能是最好的方法。我所拥有的是一组样本,每个样本都有一组及时的特性。每个时间长度可以不同,但是每个样本都有相同的特征。
希望最终得到的是一组具有单一功能的示例。这样,我就可以使用动态时间翘曲确定的距离来进行聚类。
整个计划听起来是否合理?
TensorFlow有一个特性tf.qr (https://www.tensorflow.org/api_docs/python/tf/qr),它可以进行张量分解,但我不太了解它背后的输出或数学,无法充分利用它。我试着用看似成功的方式运行它,但我不明白Q和r输出张量中存储了什么。如果有人能向我解释这一点,如果这甚至适用于我想做的事情,我会非常感激的。
此外,我尝试使用scikit张量的cp分解(https://github.com/mnick/scikit-tensor/blob/master/sktensor/cp.py)来返回单个张量。我也不明白存储在这个输出中的是什么,或者它是否做了类似于TensorFlow的tf.qr函数,或者与我想做的事情有关。
就像你现在可能知道的那样,我在数学上完全迷失了方向。我试图找到关于这些函数是如何工作的解释,但我不能不跳到多重线性代数,而我不明白。如果有人能指出正确的方向,我会非常感激的。
编辑:
如果s1和s2是两个多维时间序列,那么就应该计算它们之间的距离。我在python中尝试过,它实际上输出了一个数字,但我不知道我是否正确地理解了这一点。它的行为与DTW在一维上的行为相同,但在计算给定时间点的距离时,它采用的是所有特征的MSE之和,而不是其中的一个。而且,这个DTW函数有一个时间窗口,设置为10,但当然可以更改.
def MDTWDistance(s1, s2, window=10, num_columns=1):
DTW={}
w = max(window, abs(len(s1)-len(s2)))
for i in range(-1,len(s1)):
for j in range(-1,len(s2)):
DTW[(i, j)] = float('inf')
DTW[(-1, -1)] = 0
for i in range(len(s1)):
for j in range(max(0, i-w), min(len(s2), i+w)):
dist= mdist(s1.loc[i], s2.loc[j], num_columns)
print i, j, dist
DTW[(i, j)] = dist + min(DTW[(i-1, j)],DTW[(i, j-1)], DTW[(i-1, j-1)])
return np.sqrt(DTW[len(s1)-1, len(s2)-1]) 和..。
def mdist(a, b, num_col):
dist = 0
for col in range(num_col):
dist = dist + (a[col]-b[col])**2
print a[col], b[col]
return dist这样做是否像我认为的那样/报纸上说的是合适的?
发布于 2017-05-24 00:18:10
“每次时间长度可以不同,但每个样本都有相同的特征。”您可以使它们的长度相同,请参阅http://www.cs.ucr.edu/~eamonn/DTW_myths.pdf的神话1
如果多项时间序列是“相关的”,请参见http://www.cs.ucr.edu/~eamonn/Multi-Dimensional_DTW_Journal.pdf的图1,否则这是一个非常糟糕的想法。
“这样,我就可以使用动态时间偏差确定的距离进行聚类。”当然,但是您可以在DTW下使用多项时间序列进行聚类。见一个。
--
一个 Nurjahan Begum,Liudmila Ulanova,Jun Wang,Eamonn Keogh (2015年)。用一种新的容许剪枝策略SIGKDD 2015加速动态时间翘曲聚类
https://datascience.stackexchange.com/questions/19153
复制相似问题