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

本文首发于我的个人博客QIMING.INFO,转载请带上链接及署名。

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

关联规则简介

举例说明:假如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%,剔除。

运行步骤

数据说明

[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

代码及说明

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

结果展示

频繁项集及次数:

推荐规则:

猜你喜欢

转载自blog.csdn.net/u011630228/article/details/81365189
今日推荐