Time Series Classification时间序列分类 (一)

Time Series Classification (一)

最近需要做相关的课题,看了一些资料,在此稍作总结。

时间信号数据与普通的一维数据不同,因为时间信号在一维上具有比较强的相关性,如果把每个采样点作为一个特征来用的话可能并不能得到比较好的效果,所以也就有了Time Series Classification这个问题。

这个系列主要会讲解一些处理时间序列分类的机器学习方法,对于深度学习方法涉及的比较少,因为时间序列数据的特点是一维上具有比较强的相关性,很容易想到用类似LSTM的方法(CNN也是可以的,毕竟一维是特殊的二维),关于基于深度学习的时间序列分类的论文层出不穷,大家也可以自己来看相关的综述。

DTW+KNN

KNN是我们在做监督分类任务时比较常见的算法,思想就是基于一个距离度量来选择出K个邻近点做多数投票表决。

但在处理时间序列分类的时候,常用的欧氏距离度量往往并不能起到比较好的效果,所以我们需要找到一个合适的时间序列信号的距离度量,因此,提出了动态时间归整(Dynamic Time Warping,DTW)专门针对时间序列数据的距离度量函数。

DTW

接下来谈一下DTW到底是如何计算两个时间序列信号之间的距离。

假设存在两个时间序列,seq1,seq2,每个时间序列信号中有N个采样点,也就是说len(seq1)=N,len(seq2)=N,接下来,我们会运算建立一个cost_matrix,其中
c o s t _ m a t r i x [ i ] [ j ] = ( s e q 1 [ i ] − s e q 2 [ j ] ) 2 cost\_matrix[i][j] = (seq1[i]-seq2[j])^2 cost_matrix[i][j]=(seq1[i]seq2[j])2
在建立了这样的一个 N × N N\times N N×N的cost_matrix矩阵之后,就可以开始计算DTW了,DTW是从这个矩阵的(0,0)位置,也就是左上角出发,找到一条通往(N-1,N-1)位置,也就是右下角的最短路径。

有过Leetcode刷题经验的读者可能会反应过来,可以用DP来求解这个DTW距离

# 利用DP算法计算DTW
# N代表采样点个数
DTW_matrix = np.zeros(shape=[N+1,N+1])
for i in range(N):
	for j in range(N):
		dist = (seq1[i]-seq[j])**2
		DTW_matrix[i+1,j+1] = dist + min(DTW_matrix[i][j+1],DTW_matrix[i+1][j],DTW_matrix[i][j])
DTW_dist = sqrt(DTW_matrix[N][N])

这样我们便得到了两个时间序列的DTW距离,可以将DTW距离作为KNN模型中的距离度量用来做时间序列分类。

DTW的计算优化

上面我们已经说完了DTW的计算,有读者可能尝试过后发现还是很耗时,这可能是时间序列信号的采样点较多导致的(N比较大),这里提供了一个进一步加速的方法。

加窗window

要使用这个方法来对DTW的计算加速有一个假设,在i和j相距比较远的时候,这样的cost_matrix[i][j]是不会出现在上面提到的最短路径的,也就是说并不会影响到DTW的大小,我们就可以只考虑在i前后w(window_size)个点来进行计算。

# 加窗
# w: window_size
for i in range(N):
	for j in range(max(0,i-w),min(len(s2),i+w)):
		dist = (seq1[i]-seq2[j])**2
		DTW_matrix[i+1][j+1] = dist + min(DTW_matrix[i][j+1],DTW_matrix[i+1][j],DTW_matrix[i][j])
DTW_dist = sqrt(DTW_matrix[N][N])

以上就是时间序列分类中常用的DTW+KNN的算法介绍

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值