聚类混合数据类型 - 数值、分类、数组和文本

数据挖掘 nlp 聚类 k-均值 分类数据 文本
2022-03-09 16:42:18

我有一个包含 4 种数据列的数据集:

              numeric  categorical            tags                     text
id
1               51585           27  [A, B, C, ...]  "Some text bla bla bla"
2               53596           27  [B, D, E]               "Other text..."
3             1176345           27  [D, A, F, ...]                    "..."
4                 168           24             NaN                    "..."
5               88564           22             NaN                    "..."
  • numeric- 连续数值。
  • categorical- 离散类别,数字或字符串(类型并不重要,因为我可以将其转换为任何有效的)
  • tags- 包含离散值的数组。每行可以有不同的数组长度。
  • text- 一串文本。

我是数据科学的新手,所以也许这是一个“初学者”问题。

如何在聚类算法中使用所有这些不同的数据类型?

这是我到目前为止所学到的:

  • K-means 适用于数值数据。我成功地将它应用于我的数据子集,其中只有数字列。我还使用了一些评估指标(例如轮廓系数)来帮助我选择聚类的数量。所以这原则上是有效的,但由于它没有使用我的大部分数据,结果并不好。
  • 然后我阅读了关于聚类分类数据的信息。我发现高尔距离是分类数据之间的距离。到目前为止,我已经将它与 K-means 一起使用(我将 Gower 生成的距离矩阵传递给了 K-means)。从这里应该很容易将 Gower 距离矩阵与我原始数据集中的数字列连接起来,并将它们全部传递给 K-means。

我知道除了 K-means 之外还有其他聚类算法,我也计划检查其他一些算法。但在此之前,我想找到某种方法在一个算法中利用我的所有数据。

  • tagstext难倒我。我找不到将它们用于集群的方法。我发现了一些关于从文本文档中聚类单词的文章——这不是我想做的。我想将一text列用作一个(或多个)“特征”来进行聚类。
  • 我知道用于转换text为数字向量的“词袋”方法。我也可以很容易地想象如何使用相同的方法将 转换tags为向量。然而,这似乎有点矫枉过正,因为它会大大增加我的数据的维度。还有其他方法可以解决这个问题吗?

底线 - 我正在寻找一种将所有这些数据类型一起用于聚类的方法。我总结了到目前为止我所知道的,但我对任何解决方案持开放态度,即使它与我上面列出的完全不同。

谢谢!

2个回答
  1. 对于标签:你知道它们是如何生成的吗?你有多少个独特的标签?如果它们是自行生成的(即许多标签可以是其他标签的子集)。您可能需要进行标签合并,这也有助于降低词向量的维数。如果您可以提供更多关于您的数据的外观和来源的信息,我或许可以提供更深入的答案。

  2. 对于文本:您可能想尝试使用词嵌入。您可以使用预训练的 word2vec 模型。

  3. 我不确定使用两种不同的距离度量是否有意义。您的分类数据看起来像它的整数,是序数还是那些索引?

一种选择是为同一空间中的所有数据学习嵌入,然后应用任何聚类聚类技术。一种方法是使用StarSpace 包