天天看點

spark mllib機器學習之三 FPGrowth

資料格式:

蘋果 梨 香蕉

梨 牛奶 洋芋

蘋果 香蕉 狗

狗 洋芋

洋芋 牛奶 鹽

鹽 梨 狗

蘋果 梨 狗

package com.agm.guanlian

import org.apache.spark.mllib.fpm.FPGrowth

import org.apache.spark.{SparkConf, SparkContext}

import java.io._

import org.apache.log4j.{Level, Logger}

object FPGrowth {

  def main(args:Array[String]){

     Logger.getLogger("org").setLevel(Level.ERROR)

    val conf = new SparkConf().setAppName("FPGrowthTest").setMaster("local").set("spark.sql.warehouse.dir","E:/ideaWorkspace/ScalaSparkMl/spark-warehouse")

    val sc = new SparkContext(conf)

    //設定參數

    //最小支援度

    val minSupport=0.2

    //最小置信度

    val minConfidence=0.6

    //資料分區

    val numPartitions=2

    //取出資料

    val data = sc.textFile("F:\\testData\\spark\\FPGrowth.txt")

    //把資料通過空格分割

    val transactions=data.map(x=>x.split(" "))

    transactions.cache()

    //建立一個FPGrowth的算法實列

    val fpg = new FPGrowth()

    //設定訓練時候的最小支援度和資料分區

    fpg.setMinSupport(minSupport)

    fpg.setNumPartitions(numPartitions)

    //把資料帶入算法中

    val model = fpg.run(transactions)

    //檢視所有的頻繁項集,并且列出它出現的次數

    model.freqItemsets.collect().foreach(itemset=>{

     println( itemset.items.mkString("[", ",", "]")+","+itemset.freq)

    })

    //通過置信度篩選出推薦規則則

    //antecedent表示前項

    //consequent表示後項

    //confidence表示規則的置信度

    //這裡可以把規則寫入到Mysql資料庫中,以後使用來做推薦

    //如果規則過多就把規則寫入redis,這裡就可以直接從記憶體中讀取了,我選擇的方式是寫入Mysql,然後再把推薦清單寫入redis

    model.generateAssociationRules(minConfidence).collect().foreach(rule=>{

       println(rule.antecedent.mkString(",")+"-->"+

        rule.consequent.mkString(",")+"-->"+ rule.confidence)

    })

    //檢視規則生成的數量

    println(model.generateAssociationRules(minConfidence).collect().length)

    //并且所有的規則産生的推薦,後項隻有1個,相同的前項産生不同的推薦結果是不同的行

    //不同的規則可能會産生同一個推薦結果,是以樣本資料過規則的時候需要去重

  }

}

繼續閱讀