如何聚类序列?

How to cluster sequences?

您将如何对顺序信息进行聚类?我有大约 500 个序列,其中一些具有相同的特征。是否有类似 K-means 的分类顺序(时间)数据,或者您的方法是什么样的?

这些序列是表示 类 的单热编码向量序列。例如,考虑四个 类 的护士排班问题:早班、白班、夜班、回家。向量看起来像这样:[0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1],这个护士上白班工作 2 天,在家第三天。但是这个“时间表”可能取决于医院的参数,所以我想对类似的数据进行聚类。我有大约 500 个“时间表”。有什么想法吗?

我将提到您可以解决此问题的 3 个“级别”,假设您将能够相应地构建您的问题陈述。请将此答案视为可以用来指导如何解决此问题的东西,因为您提出的问题不是那么具体并且涵盖的范围很广(通常违反 SO 准则)。


传统方法涉及使用一些 DR(降维)方法,例如 PCA,然后是聚类,例如 Kmeans、高斯混合、基于密度的方法等

这些方法的问题在于他们假设 观察到的数据是通过简单的线性变换 从低维潜在 space 生成的。例如。在数据上使用 PCA 时,您假设您看到的数据来自 2 个主要成分的线性组合。这适用于很多数据集,但更复杂的数据通常是低维潜在 spaces.

的非线性变换的结果

更现代的方法 在某种程度上使用 DNN 作为预处理,然后使用聚类方法来处理这个问题。 DNN 有助于解决非线性问题,并为序列和图像等数据类型提供更好的低维表示。这通常是大多数基线基准模型的基础 -

  1. 训练自动编码器重新生成序列
  2. 取瓶颈 embedding/latent 向量并使用聚类算法在这个潜在 space.
  3. 中聚类

虽然这些方法效果很好,但也存在缺陷。由于没有聚类驱动 objective 明确纳入学习过程,学习的 DNN 不一定输出适合聚类的低维数据


最新研究 涉及训练 DNN 以及聚类损失,以确保潜在 space 是聚类友好的。这些算法给出了优于上述任何方法的结果。此类别中的一种 SOTA 方法是 DCN (Deep clustering networks)。 DCN 结合了自动编码器的重建损失和聚类损失。它定义了一个基于质心的目标概率分布(与 Kmeans 非常相似,但具有 student-t 分布)并最小化其对模型聚类结果的 KL 散度。

查找更多信息here and here


特定于您的情况:您有一个包含 4 个特征的序列向量。您可以构建一个基于 LSTM 的自动编码器来创建初始嵌入,然后使用聚类方法对潜在向量进行聚类。或者,如果您对 DCN 感兴趣,您可以使用自动编码器构建类似的设置,然后使用聚类损失和重建损失来进一步训练编码器以生成聚类友好的嵌入。