计算频繁项集的 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 中找不到任何相关内容