spark-30.spark机器学习_3_频繁项集挖掘FPGrowth
程序员文章站
2022-07-14 21:54:48
...
1.FPGrowth 基本概念
T*:代表一次购物
项集:项的集合
支持度:项出现的次数或者概率
FPGrowth的目标是发现有那些项频繁在一起出现。
2.挖掘过程
1.构建FPTree
2.根据数进行递归挖掘【子树没有分叉则停止】
3.构建FPTree
1.根据每一项出现的次数重新排列你的购物集。
2.根据重新排列的购物集构造FPTree。【tree有一个空Root节点】
4.挖掘步骤
- 排列项集是根据出现次数从高往低排列,那么挖掘的时候是从低向高开始挖掘。
- 先找到当前挖掘项的所有结点,然后顺次找到Root结点,将走过的路径形成一棵子树。
- 如果子树中有项的出现次数小于最小支持度,则删除。
- 如果子树有分叉,则递归挖掘,否则停止挖掘。
- 停止挖掘后,将子树中的所有结点做排列组合【不关心先后顺序】,将排列组合后的所有组合和当前挖掘的项集合并,即得到最终的结果。
- 对所有挖掘出来的项集进行排序,选择前集合即可。
5.程序实现
1.创建SparkContext对象。
2.读取数据集,将数据集转换为RDD[Array[String]]
3.训练模型。
4.将频繁项集输出即可。
5.关闭sparkContext。
代码实现:
package com.dengdan
import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.{SparkConf, SparkContext}
object FPGrowth extends App {
val sc = new SparkContext(new SparkConf().setMaster("local[*]").setAppName("FPGrowth"))
//加载数据样本
val path = "D:\\idea_workspace2020\\spark\\sparkMLib\\fpgrowth\\src\\main\\resources\\fpgrowth.txt"
//创建交易样本
val transactions = sc.textFile(path).map(_.split(" ")).cache()
println(s"交易样本的数量为:${transactions.count()}")
//最小支持度
val minSupport = 0.4
//计算的并行度
val numPartition = 2
//训练模型
val model = new FPGrowth()
.setMinSupport(minSupport)
.setNumPartitions(numPartition)
.run(transactions)
//打印模型结果
println(s"经常一起购买的物品集的数量为:${model.freqItemsets.count()}")
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + "," + itemset.freq)
}
sc.stop()
}
上一篇: assets文件转为byte[]
下一篇: 读取分析RGB文件