原理
https://blog.csdn.net/sunbow0/article/details/45602415
https://www.cnblogs.com/haozhengfei/p/c9f211ee76528cffc4b6d741a55ac243.html
代码
from pyspark import SparkConf
from pyspark.sql import SparkSession
from pyspark.ml.fpm import FPGrowth
import datetime
if __name__ == "__main__":
t1=datetime.datetime.now()
appname = "FPgrowth"
master ="local[4]"
data_list=[[['r', 'z', 'h', 'k', 'p']]\
,[['z', 'y', 'x', 'w', 'v', 'u', 't', 's']]\
,[['s', 'x', 'o', 'n', 'r']]\
,[['x', 'z', 'y', 'm', 't', 's', 'q', 'e']]\
,[['z']]\
,[['x', 'z', 'y', 'r', 'q', 't', 'p']]]#数据集
conf = SparkConf().setAppName(appname).setMaster(master) #spark配置
spark=SparkSession.builder.config(conf=conf).getOrCreate()
data=spark.createDataFrame(data_list,["items"])#将数据转为spark中的dataframe
fp = FPGrowth(minSupport=0.5, minConfidence=0.8)#模型建立
fpm = fp.fit(data)#模型拟合
fpm .freqItemsets.show(5)#在控制台显示前五条频繁项集
assRule=fpm.associationRules#强关联规则
assRuleDf=assRule.toPandas()#转为python中的dataframe
print('强关联规则:\n',assRuleDf)
new_data = spark.createDataFrame([(["s", "t"], )], ["items"])#新的前项数据
print('后项预测:\n',fpm.transform(new_data).first().prediction) #预测后项
spark.stop()#关闭spark
t2=datetime.datetime.now()
print('spent ts:',t2-t1)
运行结果:
注意:lift为提升度,表示在含有X的条件下同时含有Y的可能性与没有X这个条件下项集中含有Y的可能性之比:公式为confidence(artichok => cracker)/support(cracker) = 80%/50% = 1.6。该指标与置信度同样衡量规则的可靠性,可以看作是置信度的一种互补指标。