spark-30.spark機器學習_3_頻繁項集挖掘FPGrowth

1.FPGrowth 基本概念

T*:代表一次購物
項集:項的集合
支持度:項出現的次數或者概率
在這裏插入圖片描述
FPGrowth的目標是發現有那些項頻繁在一起出現。

2.挖掘過程

1.構建FPTree
2.根據數進行遞歸挖掘【子樹沒有分叉則停止】

3.構建FPTree

1.根據每一項出現的次數重新排列你的購物集。
2.根據重新排列的購物集構造FPTree。【tree有一個空Root節點】

4.挖掘步驟

  1. 排列項集是根據出現次數從高往低排列,那麼挖掘的時候是從低向高開始挖掘。
  2. 先找到當前挖掘項的所有結點,然後順次找到Root結點,將走過的路徑形成一棵子樹。
  3. 如果子樹中有項的出現次數小於最小支持度,則刪除。
  4. 如果子樹有分叉,則遞歸挖掘,否則停止挖掘。
  5. 停止挖掘後,將子樹中的所有結點做排列組合【不關心先後順序】,將排列組合後的所有組合和當前挖掘的項集合並,即得到最終的結果。
  6. 對所有挖掘出來的項集進行排序,選擇前集合即可。

5.程序實現

1.創建SparkContext對象。
2.讀取數據集,將數據集轉換爲RDD[Array[String]]
3.訓練模型。
4.將頻繁項集輸出即可。
5.關閉sparkContext。

代碼實現:

package com.dengdan

import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.{SparkConf, SparkContext}

object FPGrowth extends App {
  val sc = new SparkContext(new SparkConf().setMaster("local[*]").setAppName("FPGrowth"))
  //加載數據樣本
  val path = "D:\\idea_workspace2020\\spark\\sparkMLib\\fpgrowth\\src\\main\\resources\\fpgrowth.txt"
  //創建交易樣本
  val transactions = sc.textFile(path).map(_.split(" ")).cache()

  println(s"交易樣本的數量爲:${transactions.count()}")

  //最小支持度
  val minSupport = 0.4
  //計算的並行度
  val numPartition = 2
  //訓練模型
  val model = new FPGrowth()
    .setMinSupport(minSupport)
    .setNumPartitions(numPartition)
    .run(transactions)

  //打印模型結果
  println(s"經常一起購買的物品集的數量爲:${model.freqItemsets.count()}")
  model.freqItemsets.collect().foreach { itemset =>
    println(itemset.items.mkString("[", ",", "]") + "," + itemset.freq)
  }

  sc.stop()
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章