pyspark 中的 K 模式实现

数据挖掘 Python 聚类 k-均值 pyspark
2022-02-14 00:59:48

我正在寻找 pyspark 中的 k-modes 实现。我发现这个这个作为实现。

首先,我尝试使用第一个链接实现 k 模式并遇到问题所以我继续在 github 上尝试了第二个实现。这个工作(如在没有错误的情况下运行),但由于没有指南/使用技术,我仍然无法以正确的方式使用它。根据github页面:

n_modes=36
partitions=10
max_iter=10
fraction = 50000 * partitions / (data.count() * 1.0)
data = data.rdd.sample(False,fraction).toDF()

method=IncrementalPartitionedKMetaModes(n_partitions = partitions, n_clusters = n_modes,max_dist_iter = max_iter,local_kmodes_iter = max_iter,
 similarity = "frequency", metamodessimilarity = "hamming")

cluster_metamodes = method.calculate_metamodes(data)

我无法理解如何使用这个 cluster_metamodes,或者它甚至意味着什么。

简而言之,将为每个分区执行 k 模式,以便为每个分区识别一组模式(集群)。接下来,将重复 k-modes 以识别来自所有分区的一组所有模式的模式。这些模式的模式在这里被称为元模式。

有人可以解释这个概念并告诉如何在分类值的 pyspark 数据帧上使用这种聚类方法吗?

2个回答

众数只是 k-means 中质心的类比。分布式实现在数据子集上将点并行分配给集群,然后并行计算新的质心,最后收集这些结果以执行这些质心的(加权)平均值以获得真正的质心。同样,在集群分配之后,模式是在数据子集上并行计算的,但随后需要将它们收集并组合成真正的新模式。无论出于何种原因,他们都将“真实”模式称为“元模式”。

我很高兴听到它运行没有错误。自从提出问题以来,我已经在那里修复了更多问题,并写了一篇关于它的论文,为了清楚起见,可以将其用作文档(该论文在 github 上引用)。

cluster_metamodes是一个包含生成的“模式模式”或元模式的数组。换句话说,这是一个包含集群中心的列表。如何进一步使用它完全取决于您。例如,您可以使用提供的任何距离函数计算从每条记录到所有元模式的距离:

  • hamming_dissim(记录,cluster_metamodes)
  • frequency_based_dissim(记录,cluster_metamodes)

现在在 github 上提供了更详细的示例。

除此之外,现在还有两个函数,即get_modesget_mode_indexes第一个将返回模式列表(不是元模式!),即所有数据子集中所有集群的所有中心(单独集群)。第二个将为您返回一个列表,其中包含每个原始记录的相应模式 ID(全局唯一)。

如果您的数据中有 100 条记录并使用 5 个分区、分区大小 20 和 n_modes = 2 运行 pyspark-kmetamodes,它将导致:

  • cluster_metamodes包含 2 个元素(从 10 个模式计算出的 2 个元模式)
  • get_modes将返回一个包含 10 个元素的列表(5 个分区 x 每个分区 2 个模式 = 10 个模式)
  • get_mode_indexes将返回 100 个元素,其中每个元素将包含相应的模式 ID(考虑到有 10 个模式),get_mode_indexes()[9]应包含分析数据集中第 10 条记录的模式 ID。