时间序列聚类之损失函数DTW / soft-DTW / other

DBA k-means和Soft-DTW k-means各自的优缺点

Answer :
首先,DBA k-means(动态时间规整k-means)和Soft-DTW k-means(软时间规整k-means)都是用于时间序列聚类的算法。时间序列聚类是将具有相似行为的时间序列分组到一起的过程。

以下是DBA k-means和Soft-DTW k-means各自的优缺点:

DBA k-means的优点:

  1. 速度快:DBA k-means在大型数据集上的速度很快,适用于大规模时间序列聚类。
  2. 准确性高:DBA k-means在聚类过程中能够处理时间序列的变化,并很好地适应了数据的噪声和趋势。
  3. 易于实现:DBA k-means是一种相对简单的算法,容易理解和实现。

DBA k-means的缺点:

  1. 无法处理较长的时间序列:对于长度超过几百或几千的时间序列,DBA k-means可能会消耗较多的内存。
  2. 对于非常相似但不完全相同的时间序列,DBA k-means的聚类效果可能会受到影响。 (比如时间序列的趋势段分类)
  3. DTW 算法通过动态规划求解了两个序列的相似度。这个过程1是离散的,不可微的。如果要将其应用作为神经网络的损失函数,这是不行的。因为神经网络通过对损失函数结果进行梯度下降的方法,更新参数,要求损失函数可微。

Soft-DTW k-means的优点:

  1. 灵活性强:Soft-DTW k-means对于时间序列长度和形状的变化比较稳健。
  2. 能够处理不规则的时间序列:Soft-DTW k-means适用于一些非规则形状和长度的时间序列聚类问题。
  3. 聚类效果较好:Soft-DTW k-means能够处理一些传统算法不能处理的聚类问题。

Soft-DTW k-means的缺点:

  1. 速度较慢:与DBA k-means相比,Soft-DTW k-means需要更长的时间来聚类大型数据集。
  2. 处理大型数据集时内存消耗较大。

综上所述,选择哪种时间序列聚类算法取决于您的数据集大小、数据形状和您的需求。 如果您的数据集比较小,而且您需要高速的聚类算法,那么DBA k-means可能是一个不错的选择。如果您需要一种能够灵活处理不规则形状和长度的时间序列的算法,则Soft-DTW k-means可能是更好的选择。
Question :

详细讲解DBA k-means的原理

Answer :

首先,需要了解什么是动态时间规整(Dynamic Time Warping, DTW)。DTW是一种用于计算两个时间序列之间距离的算法。DTW算法能够处理时间序列之间的非线性对齐,因此在处理变化较大的时间序列时比传统的欧几里得距离等方法更加准确。DBA k-means算法就是基于DTW距离来实现的。

DBA k-means算法的基本思想是将时间序列数据集划分为k个聚类,并尝试使得同一聚类内的时间序列相似性更高,不同聚类之间的时间序列相似性更低。算法的实现过程如下:

  1. 初始化:随机选择k个时间序列作为聚类的中心点。

  2. 聚类:通过计算每个时间序列向量和每个聚类中心的DTW距离,将每个时间序列向量归到距离最近的聚类中心点。重复此步骤直至每个时间序列向量都归到了某个聚类中心。

  3. 更新聚类中心:对于每个聚类,计算该聚类的平均向量作为新的聚类中心。

  4. 重复步骤2和3,直到聚类中心不再发生变化或达到最大迭代次数。

另外,为了减少算法对于异常点的影响,DBA k-means算法中引入了一个数据修剪过程。即对于每个聚类,将每个时间序列向量和该聚类中心的DTW距离排序,将前p%和后q%的时间序列向量移除,再重新计算该聚类的中心。通过这种方式,可以减少异常点的影响并提高算法的准确性。

总的来说,DBA k-means算法是一种基于DTW距离的时间序列聚类算法。与传统的k-means算法相比,DBA k-means能够处理非线性对齐的时间序列,因此适用于更广泛的应用领域。

DTW 算法通过动态规划求解了两个序列的相似度。这个过程是离散的,不可微的。如果要将其应用作为神经网络的损失函数,这是不行的。因为神经网络通过对损失函数结果进行梯度下降的方法,更新参数,要求损失函数可微。

详细讲解Soft-DTW k-means的原理

Soft-DTW k-means算法是基于动态时间规整(Dynamic Time Warping, DTW)距离的一种时间序列聚类算法,它在传统DTW距离上加入了一些新的特性来增强算法的鲁棒性和对于噪声数据的适应性。与传统的DTW聚类算法相比,Soft-DTW使用了一种更加平滑的DTW距离来度量时间序列之间的相似度,因此可以更好地处理非线性对齐的时间序列。

Soft-DTW k-means算法的实现过程如下:

  1. 初始化:随机选择k个时间序列作为聚类的中心点。
  2. 聚类:计算每个时间序列向量和每个聚类中心点之间的Soft-DTW距离,将每个时间序列向量归到距离最近的聚类中心。Soft-DTW距离是以DTW距离为基础的一种特殊距离,它在DTW距离的基础上加入了一个平滑性惩罚项,目的是使得距离对于时间序列中的局部变化更加敏感,对于时间序列中的噪声更加鲁棒。通过计算每个时间序列向量和中心点之间的距离,将每个时间序列向量归到距离最近的聚类中心。
  3. 更新聚类中心:对于每个聚类,计算该聚类中所有时间序列向量的平均向量作为新的聚类中心。
  4. 重复步骤2和3,直到聚类中心不再发生变化或达到最大迭代次数。

与传统的DTW聚类算法相比,Soft-DTW k-means算法的优点在于它引入了平滑性惩罚项gamma,使得距离对于时间序列中的局部变化更加敏感。因此,这种方法对于噪声数据和变化较大的时间序列具有更好的鲁棒性和准确性。定义目录标题)

Dynamic Time Warping Barycenter Averaging(DBA)算法的原理

Dynamic Time Warping Barycenter Averaging(DBA)算法是一种用于平均时间序列的方法。它可以将一组时间序列平均成一个代表这些时间序列的“平均”时间序列,同时保留原始时间序列的核心特征。DBA算法基于Dynamic Time Warping(DTW)距离度量,考虑了时间序列的帧对齐问题。
DBA算法的基本思想是:首先,将每个时间序列对齐到一个参考序列上,然后对齐后的序列求平均。具体来说,DBA算法主要包含以下几个步骤:
1.定义一个参考序列,可以选择其中任意一个时间序列作为参考序列。
例如,可以通过init传入自选时间序列。

# 设定初始化序列(这里只使用了两个时间序列)
init_seq = np.array([X_train[0], X_train[10]])
# 使用tslearn的DBA-KMeans算法进行聚类
dba_kmeans = TimeSeriesKMeans(n_clusters=2, init=init_centers, verbose=True, random_state=42)
dba_kmeans.fit(X_train)

2.对于每个时间序列,使用 DTW 算法将其对齐到参考序列上。这个过程中,可以记录每个时间序列的对齐路径,以便后续计算。
3.对齐后的序列求平均,得到一个代表整组时间序列的“平均”序列。
4.重复执行步骤2和3,直到整组时间序列的平均序列收敛。
DBA算法解决了平均时间序列问题的核心在于对齐问题。由于时间序列通常具有不同的长度和采样率,因此需要使用 DTW 距离来度量它们之间的距离,并对齐它们。DBA算法具有较高的准确性和稳定性,广泛应用于时间序列分析、模式识别、人体运动分析等领域。

在tslearn库中,DBA算法的主要参数包括:

  1. alignment: 对齐方法,默认为"dtw",也可以设置为“softdtw”。
    "dtw"使用DTW距离对时间序列进行对齐,而"softdtw"使用soft-DTW算法来对齐时间序列。
  2. with_weights: 是否加权,默认为False。如果设置为True,则对每个时间序列的对齐权重进行求和。
  3. init: 初始的平均序列,默认为"random",也可以设置为自定义的初始平均序列。
  4. max_iter: 最大迭代次数,默认为10,可以根据需要进行调整。
  5. verbose: 是否输出迭代过程,默认为True。
  6. tol: 迭代收敛阈值,默认为1e-5。
  7. n_init参数表示初始化平均序列的次数,默认值为1。在每次生成随机平均序列时,每个时间序列都被随机选择为初始平均序列之一。通过重复实验,使用最好的初始平均序列进行优化。
  8. max_iter_barycenter参数表示barycenter求解中的最大迭代次数,默认为100。在每次迭代中,使用平均序列的重心更新平均序列。通过多次迭代,在最大迭代次数内找到最优的平均序列。
    总结,alignment表示对齐方式,with_weights表示是否使用权重,init表示初始平均序列,max_iter表示最大迭代次数,verbose表示是否输出迭代过程,tol表示迭代收敛阈值。这些参数都在DBA算法的实现中起到关键的作用,可以根据实际情况进行调整以得到最优的效果。

tslearn.clustering.KShapetslearn.clustering.TimeSeriesKMeans

都是用于时间序列聚类的方法,但有一些区别。
KShape 算法使用编码-解码的方法,将时间序列映射到一组符号,然后计算符号之间的距离,用于聚类。它是一种基于聚类中心的方法,它找到一些代表性的时间序列作为聚类中心,然后将其他时间序列分类到最接近的聚类中心。 KShape 不需要指定簇的数量,因为它使用符号来计算距离,因此在聚类之前,需要首先根据每个时间序列的长度来选择符号长度。在实际应用中, KShape 算法被广泛用于时间序列聚类和模式识别。
TimeSeriesKMeans 算法是一种经典的基于距离的聚类算法,它是一种基于质心的聚类方法。 TimeSeriesKMeans 假设所有的时间序列数据可以表示为欧几里得空间中的点,并使用标准的KMeans算法来聚类。 TimeSeriesKMeans 需要指定簇的数量,通常使用肘部法则来选择最佳的簇数。与 KShape 不同, TimeSeriesKMeans 不需要预先选择符号长度。在实践中, TimeSeriesKMeans 在大量的时间序列数据上表现良好,但当数据维度或时间序列长度较长时,它的计算成本会非常高。
因此,两种算法都是用于时间序列聚类的方法,但它们采用不同的方法来计算距离和聚类中心。在实际问题中,应根据数据的性质选择合适的算法。

K-Means算法之K值n_clusters的选择——肘部法则(Elbow Method)

K-Means是一个超级简单的聚类方法,说他简单,主要原因是使用它时只需设置一个K值(设置需要将数据聚成几类)。但问题是,有时候我们拿到的数据根本不知道要分为几类,对于二维的数据,我们还能通过肉眼观察法进行确定,超过二维的数据怎么办?

Elbow Method :Elbow意思是手肘,如下图左所示,此种方法适用于 K 值相对较小的情况,当选择的k值小于真正的时,k每增加1,cost值就会大幅的减小;当选择的k值大于真正的K时, k每增加1,cost值的变化就不会那么明显。这样,正确的k值就会在这个转折点,类似elbow的地方。 如下图:
在这里插入图片描述
通过画K与cost function的关系曲线图,如左图所示,肘部的值(cost function开始时下降很快,在肘部开始平缓了)做为K值,K=3。并不是所有的问题都可以通过画肘部图来解决,有的问题如右边的那个图,肘点位置不明显(肘点可以是3,4,5),这时就无法确定K值了。故肘部图是可以尝试的一种方法,但是并不是对所有的问题都能画出如左边那么好的图来确定K值。

大量评估方法参照下文
K-Means算法之K值的选

DILATE

参考: Vincent Le Guen and Nicolas Thome. 2019. Shape and Time Distortion Loss for Training Deep Time Series Forecasting Models. NeurIPS (2019), 1–13.
时间序列预测损失函数 DTW, Soft-DTW, DILATE

Soft-DTW 提供了一种可微的DTW算法,较之 Euclidian loss,其能使预测结果更好匹配实际情况的形状,但是Soft-DTW 并没有考虑预测的时延。比如说对于天气预报,正确的结果是1个小时后会有一场大暴雨。Euclidian loss 预测告诉你1个小时后会有场雨,但是场中雨;Soft-DTW 预测告诉你未来会有场大暴雨,但会在2个小时之后来。对于时间要求更精确的预测场景,比如股价预测,虽然波动峰值形状预测对了,但是时间点预测错了,这对于买入/卖出操作来说会是一场灾难。

本文所言的时间序列损失函数将损失分为了两部分:

Shape loss 与 Time loss。

引入 DTW (即引入 shape loss)的前提是由于实际情况中噪声的存在,对于相似的输入时间序列簇,需要进行预测的未来时间序列会出现不同程度的波动,波动包括幅度起伏与时延波动。Euclidean loss 由于是一一对应的,因此会对这些波动进行平均,导致最终预测结果平滑化。而 DTW 考虑的 shape loss 可减少时延波动影响

但是,前提中的噪声实际上不完全是随机噪声,而可能是输入数据范围缺失、模型提取特征能力不够强大等原因。这些原因会导致模型预测能力不足,因此无法区别细微波动产生的结果。比如还是说天气预报,要预测一个地区的未来降水。这个地区只有一个气象监测点、一个小时汇报一次。其次或是用的模型只是很简单的模型,没法把监测到的数据特征提取出来(当然假设的情况非常极端)。那么对于整个过程,必将是充满”噪声“的。输入的时间序列数据区分度低,模型提取能力也差。只能大概预测未来有多大规模的雨,但说不准是什么时候下。这个时候使用 DTW 来训练一定是效果比较好的。

但是如果说这个地区有100个气象监测点、一分钟汇报一次。其次用的模型提取特征能力很强。那么首先对于数据来说,区分度就非常高,没有很多相似的输入时间序列簇。另外模型的能力很强,使其对于微小波动造成的影响能够充分捕捉。仅仅使用 Euclidean loss 也能获得非常好的结果。

而实际面对的情况,是介于两个极端之间的。因此需要根据输入数据的充分度、模型提取特征能力,以及预测目标的着重点,来合理选择 shape loss 与 time loss,并分配相应的权重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值