FPGrowth 关联规则

  1. Spark MLlib关联算法概述
    Spark MLlib关联算法基于Python的接口在pyspark.mllib.fpm包中。FP Tree算法对应的类是pyspark.mllib.fpm.FPGrowth(以下简称FPGrowth类),从Spark1.4开始才有。而PrefixSpan算法对应的类是pyspark.mllib.fpm.PrefixSpan(以下简称PrefixSpan类),从Spark1.6开始才有。因此如果你的学习环境的Spark低于1.6的话,是不能正常的运行下面的例子的。
    Spark MLlib也提供了读取关联算法训练模型的类,分别是 pyspark.mllib.fpm.FPGrowthModel和pyspark.mllib.fpm.PrefixSpanModel。这两个类可以把我们之前保存的FP Tree和PrefixSpan训练模型读出来。
  2. Spark MLlib关联算法参数介绍
    对于FPGrowth类,使用它的训练函数train主要需要输入三个参数:数据项集data,支持度阈值minSupport和数据并行运行时的数据分块数numPartitions。对于支持度阈值minSupport,它的取值大小影响最后的频繁项集的集合大小,支持度阈值越大,则最后的频繁项集数目越少,默认值0.3。而数据并行运行时的数据分块数numPartitions主要在分布式环境的时候有用,如果你是单机Spark,则可以忽略这个参数。
    对于PrefixSpan类, 使用它的训练函数train主要需要输入四个参数:序列项集data,支持度阈值minSupport, 最长频繁序列的长度maxPatternLength 和最大单机投影数据库的项数maxLocalProjDBSize。支持度阈值minSupport的定义和FPGrowth类类似,唯一差别是阈值默认值为0.1。maxPatternLength限制了最长的频繁序列的长度,越小则最后的频繁序列数越少。maxLocalProjDBSize参数是为了保护单机内存不被撑爆。如果只是是少量数据的学习,可以忽略这个参数。
    从上面的描述可以看出,使用FP Tree和PrefixSpan算法没有什么门槛。学习的时候可以通过控制支持度阈值minSupport控制频繁序列的结果。而maxPatternLength可以帮忙PrefixSpan算法筛除太长的频繁序列。在分布式的大数据环境下,则需要考虑FPGrowth算法的数据分块数numPartitions,以及PrefixSpan算法的最大单机投影数据库的项数maxLocalProjDBSize。

代码示例
fgp.txt

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

from pyspark import SparkConf, SparkContext
from pyspark.mllib.fpm import FPGrowth

conf=SparkConf().setAppName(“miniProject”).setMaster(“local[*]”)
sc=SparkContext.getOrCreate(conf)
data = sc.textFile(‘file:///F:/fpg.txt’)
transactions = data.map(lambda line: line.split(’ ')) #\t
#print(transactions)
#print(transactions.glom().collect())

#设置最小支持度 对于支持度阈值minSupport,它的取值大小影响最后的频繁项集的集合大小,支持度阈值越大,则最后的频繁项集数目越少,默认值0.3
minSupport = 0.2
#设置并行分区数 数据并行运行时的数据分块数numPartitions主要在分布式环境的时候有用,如果你是单机Spark,则可以忽略这个参数。
numPartition = 10
model = FPGrowth.train(transactions, minSupport=minSupport, numPartitions=numPartition)
result = model.freqItemsets().collect()
for fi in result:
print(fi)

文章出处 https://www.cnblogs.com/pinard/p/6340162.html

关联规则、支持度(support)、置信度(confidence)、并运用Spark RDD计算
例子:
总共有10000个消费者购买了商品,
其中购买尿布的有1000人,
购买啤酒的有2000人,
购买面包的有500人,
同时购买尿布和啤酒的有800人,
同时购买尿布的面包的有100人。

支持度(support)
支持度:{X, Y}同时出现的概率,例如:{尿布,啤酒}同时出现的概率

support=同时购买{X,Y}的人数/总人数
{尿布,啤酒}的支持度 = 800 / 10000 = 0.08
{尿布,面包}的支持度 = 100 / 10000 = 0.01

注意:{尿布,啤酒}的支持度等于{啤酒,尿布}的支持度,支持度没有先后顺序之分

置信度(confidence)
置信度:购买X的人,同时购买Y的概率,例如:购买尿布的人,同时购买啤酒的概率,而这个概率就是购买尿布时购买啤酒的置信度

confidence(X−>Y)=同时购买{X,Y}的人数购买X的人数
confidence(Y−>X)=同时购买{X,Y}的人数购买Y的人数
( 尿布 -> 啤酒 ) 的置信度 = 800 / 1000 = 0.8
( 啤酒 -> 尿布 ) 的置信度 = 800 / 2000 = 0.4

提升度 (lift)
提升度表示含有X的条件下,同时含有Y的概率,与不含X的条件下却含Y的概率之比。
lift(x->y) = confidence(X−>Y)/ (p(y) / p()-p(x))
(尿布->啤酒) = 800 / 1000 / (2000 + 800 / 10000- (1000+ 800+100))

提升度反映了关联规则中的A与B的相关性,提升度>1且越高表明正相关性越高,提升度<1且越低表明负相关性越高,提升度=1表明没有相关性。

你可能感兴趣的:(python)