同步于Buracag的博客
挖掘频繁项目,项目集,子序列或其他子结构通常是分析大规模数据集的第一步,这是数据挖掘多年来一直活跃的研究课题。 可以参考一下维基百科中关于关联规则学习的基础知识。
FP-growth算法在Han等人的文章中描述,挖掘频繁模式而没有候选生成,其中“FP”代表频繁模式。 给定数据集,FP-growth的第一步是计算项目频率并识别频繁项目。 与为同一目的而设计的类似Apriori的算法不同,FP-growth的第二步使用后缀树(FP-tree)结构来编码事务而不显式生成候选集,这通常很难生成。 在第二步之后,可以从FP-tree中提取频繁项集。 在spark.mllib中,我们实现了称为PFP的FP-growth的分布式版本,如Li等人,在PFP:Parallel FP-growth for query recommendation中所述。 PFP基于事务的后缀分配增长FP-tree的工作,因此比单机实现更具可扩展性。
spark.ml的FP-growth实现采用以下(超)参数:
FPGrowthModel提供:
示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2019/8/9 10:40
# @Author : buracagyang
# @File : fpgrowth_example.py
# @Software : PyCharm
"""
Describe:
"""
from pyspark.ml.fpm import FPGrowth
from pyspark.sql import SparkSession
if __name__ == "__main__":
spark = SparkSession.builder.appName("FPGrowthExample").getOrCreate()
df = spark.createDataFrame([
(0, [1, 2, 5]),
(1, [1, 2, 3, 5]),
(2, [1, 2])
], ["id", "items"])
fpGrowth = FPGrowth(itemsCol="items", minSupport=0.5, minConfidence=0.6)
model = fpGrowth.fit(df)
# 频繁项集
model.freqItemsets.show()
# 生成的关联规则
model.associationRules.show()
# transform根据所有关联规则检查输入项,并将结果作为预测
model.transform(df).show()
spark.stop()
结果如下:
+---------+----+
| items|freq|
+---------+----+
| [1]| 3|
| [2]| 3|
| [2, 1]| 3|
| [5]| 2|
| [5, 2]| 2|
|[5, 2, 1]| 2|
| [5, 1]| 2|
+---------+----+
+----------+----------+------------------+
|antecedent|consequent| confidence|
+----------+----------+------------------+
| [5, 2]| [1]| 1.0|
| [2, 1]| [5]|0.6666666666666666|
| [5, 1]| [2]| 1.0|
| [5]| [2]| 1.0|
| [5]| [1]| 1.0|
| [1]| [2]| 1.0|
| [1]| [5]|0.6666666666666666|
| [2]| [1]| 1.0|
| [2]| [5]|0.6666666666666666|
+----------+----------+------------------+
+---+------------+----------+
| id| items|prediction|
+---+------------+----------+
| 0| [1, 2, 5]| []|
| 1|[1, 2, 3, 5]| []|
| 2| [1, 2]| [5]|
+---+------------+----------+
相关系列:
【Spark】Pipelines
【Spark】特征工程1-Extractors
【Spark】特征工程2-Transformers
【Spark】分类和回归算法-分类
【Spark】分类和回归算法-回归
【Spark】聚类分析
【Spark】协同过滤
【Spark】频繁项集挖掘
【Spark】模型选择和调优