scala-MLlib官方文档---spark.mllib package--Frequent pattern mining+PMML model export

八、Frequent pattern mining

挖掘频繁项,项集,子序列或其他子结构通常是分析大规模数据集的第一步,而这是多年来数据挖掘中的活跃研究主题。我们建议用户参考Wikipedia的关联规则学习以获取更多信息。 spark.mllib提供了FP-growth的并行实现,这是一种用于挖掘频繁项集的流行算法。

FP-growth

FP增长算法在Han等人的论文中进行了描述,该算法在不生成候选者的情况下挖掘频繁模式,其中“ FP”代表频繁模式。给定交易数据集,FP增长的第一步是计算项目频率并识别频繁项目。与为相同目的设计的类似Apriori的算法不同,FP-growth的第二步使用后缀树(FP-tree)结构对交易进行编码,而无需显式生成候选集,这通常成本较高。第二步之后,可以从FP树中提取频繁项集。在spark.mllib中,我们实现了称为PFP的FP-growth的并行版本,如Li et al。,PFP:并行FP-growth用于查询推荐中所述。 PFP根据事务的后缀分配增长的FP树的工作,因此比单机实现更具可伸缩性。我们为用户提供了更多信息,请参考这些论文。
spark.mllib的FP-growth实现采用以下(超)参数:

  • minSupport: 对一个项目集的最低支持,该项目集被确定为频繁。例如,如果某项出现在5个事务中的3个,则其支持率为3/5 = 0.6。
  • numPartitions:用于分发作品的分区数。

示例代码

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}")
}

association rules

AssociationRules实现了并行规则生成算法,用于构造具有单个结果的规则。
示例代码

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}")
}

PrefixSpan

PrefixSpan是Pei等人在“通过模式增长来挖掘顺序模式:PrefixSpan方法”中描述的顺序模式挖掘算法。我们为读者提供参考文献,以规范化顺序模式挖掘问题。
spark.mllib的PrefixSpan实现采用以下参数:

  • minSupport: 被视为频繁顺序模式所需的最低支持。
  • maxPatternLength: 频繁顺序模式的最大长度。任何超出此长度的频繁模式都不会包含在结果中。
  • maxLocalProjDBSize: 在开始对投影数据库进行本地迭代处理之前,前缀投影数据库中允许的最大项目数。此参数应根据执行程序的大小进行调整。

Examples
以下示例说明了在序列上运行的PrefixSpan(使用与Pei等人相同的表示法):

 <(12)3>
  <1(32)(12)>
  <(12)5>
  <6>

示例代码

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}")
}

十、PMML model export(PMML模型导出)

spark.mllib supported models

spark.mllib支持将模型导出到预测模型标记语言(PMML)。
下表概述了可以导出到PMML的spark.mllib模型及其等效的PMML模型。
在这里插入图片描述

示例

要将支持的模型(请参见上表)导出到PMML,只需调用model.toPMML。
除了将PMML模型导出为字符串(如上例中的model.toPMML)之外,您还可以将PMML模型导出为其他格式。
有关API的详细信息,请参阅KMeans Scala文档和Vectors Scala文档。
这里是构建KMeansModel并以PMML格式打印出来的完整示例:

import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors

// Load and parse the data
val data = sc.textFile("data/mllib/kmeans_data.txt")
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

// Cluster the data into two classes using KMeans
val numClusters = 2
val numIterations = 20
val clusters = KMeans.train(parsedData, numClusters, numIterations)

// Export to PMML to a String in PMML format
println(s"PMML Model:\n ${clusters.toPMML}")

// Export the model to a local file in PMML format
clusters.toPMML("/tmp/kmeans.xml")

// Export the model to a directory on a distributed file system in PMML format
clusters.toPMML(sc, "/tmp/kmeans")

// Export the model to the OutputStream in PMML format
clusters.toPMML(System.out)
发布了2 篇原创文章 · 获赞 0 · 访问量 625

猜你喜欢

转载自blog.csdn.net/pt798633929/article/details/103850221