以数组/向量作为特征进行聚类?

数据挖掘 聚类 特征选择 word2vec
2022-03-12 05:31:01

我正在尝试对一大组文档进行聚类,其中我有一个 DOC2VEC 表示。但我想用更多特征对它们进行聚类,从而将向量 ( numpy.asarray(doc2vec_for_document)) 和单个值作为特征。

这可能吗?我想尝试在 Python 中使用 SKLearn 模块的 K-means 和 DBSCAN 进行聚类。

我的数据集看起来像这样:
| 文件 | DOC2VEC | extra_ft1 | extra_ft2 | ...

另外,如果我有多个向量而不是 1 个向量和许多值怎么办?

2个回答

您需要定义一个产生所需输出的距离函数。

通常,如果您可以将其构造成 d(a,b) 来满足您的目的,就足够了。

Doc2vec 向量有点棘手,因为它们有很多维度,而且几何形状非常奇怪。在这些向量上使用余弦还是欧几里得甚至似乎都不清楚......

无论哪种方式,您都必须仔细平衡不同的功能。在另一个答案中,提出了 minmax 或 stddev 缩放。一方面,这可能会破坏 doc2vec 属性,另一方面,这将在词向量上的权重比对其他属性的权重要大得多。

对于 DBSCAN,您还可以遵循“广义 DBSCAN”方法。这里的想法只是为不同的特征定义不同的阈值。然后邻居必须满足所有阈值。即 doc2vec 余弦小于 A,而其他特征的距离小于 B。这可能比将它们作为单个距离函数中的因素平衡更容易。

但是没有什么可以使您免于仔细权衡不同的特征(集合)。

是的,有可能。首先,您应该将 doc2vec 的输出与额外的特征向量连接起来,形成一个增强的特征向量。然后,您必须使用最小-最大缩放或标准化(零均值,单位方差)缩放增强的特征向量。这是因为不同的特征应该在相同的范围内才能在聚类任务中表现良好。您可以在 scikit-learn 中找到这些预处理模块:http: //scikit-learn.org/stable/modules/preprocessing.html