计算频繁项集的pygrowth算法返回大量冗余子集。是否可以只返回关闭的频繁项集?
仅供参考:封闭频繁项集-没有相同支持(相同频率)的超集的集。
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 但我找不到任何与此相关的api
暂无答案!
目前还没有任何答案,快来回答吧!