Spark分布式机器学习源码分析:频繁模式挖掘
Posted 雨云飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark分布式机器学习源码分析:频繁模式挖掘相关的知识,希望对你有一定的参考价值。
Spark是一个极为优秀的大数据框架,在大数据批处理上基本无人能敌,流处理上也有一席之地,机器学习则是当前正火热AI人工智能的驱动引擎,在大数据场景下如何发挥AI技术成为优秀的大数据挖掘工程师必备技能。本文结合机器学习思想与Spark框架代码结构来实现分布式机器学习过程,希望与大家一起学习进步~
本文采用的组件版本为:Ubuntu 19.10、Jdk 1.8.0_241、Scala 2.11.12、Hadoop 3.2.1、Spark 2.4.5,老规矩先开启一系列Hadoop、Spark服务与Spark-shell窗口:
1
FP增长算法
-
minSupport:对某个项目集的最低支持,该项目集被标识为频繁。例如,如果某项出现在5个事务中的3个,则其支持率为3/5 = 0.6。 -
numPartitions:用于分发工作的分区数。
2
FP示例
import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD
val data = sc.textFile("data/mllib/sample_fpgrowth.txt")
val transactions: RDD[Array[String]] = data.map(s => s.trim.split(' '))
val fpg = new FPGrowth().setMinSupport(0.2).setNumPartitions(10)
val model = fpg.run(transactions)
model.freqItemsets.collect().foreach { itemset =>
println(s"${itemset.items.mkString("[", ",", "]")},${itemset.freq}")
}
val minConfidence = 0.8
model.generateAssociationRules(minConfidence).collect().foreach { rule =>
println(s"${rule.antecedent.mkString("[", ",", "]")}=> " +
s"${rule.consequent .mkString("[", ",", "]")},${rule.confidence}")
}
3
关联规则
import org.apache.spark.mllib.fpm.AssociationRules
import org.apache.spark.mllib.fpm.FPGrowth.FreqItemset
val freqItemsets = sc.parallelize(Seq(
new FreqItemset(Array("a"), 15L),
new FreqItemset(Array("b"), 35L),
new FreqItemset(Array("a", "b"), 12L)
))
val ar = new AssociationRules().setMinConfidence(0.8)
val results = ar.run(freqItemsets)
results.collect().foreach { rule =>
println(s"[${rule.antecedent.mkString(",")}=>${rule.consequent.mkString(",")} ]" +
s" ${rule.confidence}")
}
4
序列模式挖掘
-
minSupport:被视为频繁顺序模式所需的最低支持。 -
maxPatternLength:频繁顺序模式的最大长度。任何超出此长度的频繁模式都不会包含在结果中。 -
maxLocalProjDBSize:在开始对投影数据库进行本地迭代处理之前,前缀投影数据库中允许的最大项目数。该参数应根据执行程序的大小进行调整。
import org.apache.spark.mllib.fpm.PrefixSpan
val sequences = sc.parallelize(Seq(
Array(Array(1, 2), Array(3)),
Array(Array(1), Array(3, 2), Array(1, 2)),
Array(Array(1, 2), Array(5)),
Array(Array(6))
), 2).cache()
val prefixSpan = new PrefixSpan().setMinSupport(0.5).setMaxPatternLength(5)
val model = prefixSpan.run(sequences)
model.freqSequences.collect().foreach { freqSequence =>
println(
s"${freqSequence.sequence.map(_.mkString("[", ", ", "]")).mkString("[", ", ", "]")}," +
s" ${freqSequence.freq}")
}
Spark 频繁模式挖掘的内容至此结束,有关Spark的基础文章可参考前文:
参考链接:
http://spark.apache.org/docs/latest/mllib-frequent-pattern-mining.html
https://zhuanlan.zhihu.com/p/57483610
历史推荐
一个赞,晚餐加鸡腿
以上是关于Spark分布式机器学习源码分析:频繁模式挖掘的主要内容,如果未能解决你的问题,请参考以下文章
大数据架构开发 挖掘分析 Hadoop HBase Hive Storm Spark ZooKeeper Redis MongoDB 机器学习 云计算