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個,相同的前項產生不同的推薦結果是不同的行
    //不同的規則可能會產生同一個推薦結果,所以樣本數據過規則的時候需要去重


  }


}
發佈了53 篇原創文章 · 獲贊 14 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章