Spark MLlib中FPGrowth关联规则算法的使用 | QIMING.INFO

Spark MLlib中FPGrowth关联规则算法的使用

FPGrowth(频繁模式增长)是一种关联规则分析算法,本文通过代码演示用spark运行FPGrowth算法的一个小例子。

1 关联规则简介

举例说明:假如10000个消费者购买了商品,购买尿布1000个,购买啤酒2000个,购买面包500个,同时购买了尿布和啤酒800个,同时购买了尿布和面包100个。

  1. 支持度:在所有项集中出现的可能性,即项集同时含有x与y的概率。是第一道门槛,衡量量是多少,可以理解为“出镜率”,一般通过设定最小支持度,过滤掉“出镜率”较低的无意义规则。
    如设定最小阈值为5%,尿布和啤酒的支持度为:800/10000=8% ,保留;尿布和面包的支持度为100/10000=1%,剔除。

  2. 置信度:在X发生的条件下,Y发生的概率。这是第二道门槛,衡量的是“质”,设置最小的置信度筛选可靠的规则。
    如设定最小阈值为70%,尿布->啤酒的置信度为:800/1000=80%,保留;啤酒->尿布的置信度为:800/2000=40%,剔除。

2 运行步骤

2.1 数据说明

1
2
3
4
5
6
7
[xuqm@cu01 mllib]$ cat sample_fpgrowth.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

2.2 代码及说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package nwpuhpc.antirisk.ml

import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.fpm.FPGrowth

object FPGrowthTest {
def main(args: Array[String]) {
// 0 构建Spark对象
val conf = new SparkConf().setAppName("fpg")
val sc = new SparkContext(conf)
Logger.getRootLogger.setLevel(Level.WARN)

// 1 读取样本数据
val data_path = "/home/hadoop/ML_Data/input/sample_fpgrowth.txt"
val data = sc.textFile(data_path)
val examples = data.map(_.split(" ")).cache()

// 2 建立模型
//设置最小支持度
val minSupport = 0.2
//设置并行分区数
val numPartition = 10
val model = new FPGrowth().
setMinSupport(minSupport).
setNumPartitions(numPartition).
run(examples)

// 3 查看所有的频繁项集,并且列出它出现的次数
println(s"Number of frequent itemsets: ${model.freqItemsets.count()}")
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}

// 4 通过置信度筛选出推荐规则
//antecedent表示前项
//consequent表示后项
//confidence表示规则的置信度
val minConfidence = 0.8
model.generateAssociationRules(minConfidence).collect().foreach(rule=>{
println(rule.antecedent.mkString(",")+"-->"+
rule.consequent.mkString(",")+"-->"+ rule.confidence)
})

//查看规则生成的数量
println(model.generateAssociationRules(minConfidence).collect().length)
}
}

3 结果展示

频繁项集及次数:

推荐规则:

-----本文结束感谢您的阅读-----
如我有幸帮到了您,那么,不妨~~~谢谢!
0%