0

计算频繁项集的 Pyspark Fpgrowth 算法会返回大量冗余子集。是否可以只返回关闭的频繁项集?

仅供参考:封闭的频繁项集- 没有相同支持(相同频率)的超集的集合。

from pyspark.sql import SparkSession
from pyspark.ml.fpm import FPGrowth
data = [
    [0, 1, 2],
    [0, 1, 2],
    [0, 1, 2],
    [0, 1],
    [3, 4, 5],
]
X = [(i, item_set) for i, item_set in enumerate(data)]

spark = SparkSession.builder.getOrCreate()
fpGrowth = FPGrowth(itemsCol="items", minSupport=0.4)
spark_df = spark.createDataFrame(X, ["id", "items"])
model = fpGrowth.fit(spark_df)
freq_item_sets = model.freqItemsets.select("*").toPandas()

频率项目集:

在此处输入图像描述

  • [0],并且[1]具有相同的频率,[1 0]并且它们是冗余的-如果我们知道频率,[1 0]我们知道其子集的频率将相同(通常,至少相同,但在这种情况下完全相同)
  • [2 0][2 1]并且[2][2 1 0]具有相同频率的子集并且也是冗余的
  • 应该只有两个条目:[1 0][2 1 0]

如果数据很大,则修复这需要比函数更多的时间fpGrowth.fit()

  • model.freqItemsets.select("*").toPandas()需要很多时间,主要是因为检索所有那些冗余子集
  • 删除那些冗余规则的后处理也需要很多时间

有一个已解决的问题表明此问题已在 spark 中处理(可能仅在内部?): https ://issues.apache.org/jira/browse/SPARK-6143 但我在 sparks FPGrowth API 中找不到任何相关内容

4

0 回答 0