Spark MLlib分佈式機器學習源碼分析:頻繁模式挖掘

 Spark是一個極爲優秀的大數據框架,在大數據批處理上基本無人能敵,流處理上也有一席之地,機器學習則是當前正火熱AI人工智能的驅動引擎,在大數據場景下如何發揮AI技術成爲優秀的大數據挖掘工程師必備技能。本文結合機器學習思想與Spark框架代碼結構來實現分佈式機器學習過程,希望與大家一起學習進步~

目錄

1.FP增長算法

2.FP示例

3.關聯規則

4.序列模式挖掘


 

   本文采用的組件版本爲:Ubuntu 19.10、Jdk 1.8.0_241、Scala 2.11.12、Hadoop 3.2.1、Spark 2.4.5,老規矩先開啓一系列Hadoop、Spark服務與Spark-shell窗口:

    挖掘頻繁項(FP),項集,子序列或其他子結構通常是分析大規模數據集的第一步,而這是多年來數據挖掘中的活躍研究主題。spark.mllib提供了FP-growth的並行實現,這是一種用於挖掘頻繁項集的流行算法。

1.FP增長算法

    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:用於分發工作的分區數。

2.FP示例

    FPGrowth實現FP-growth算法。它採用事務的RDD,其中每個事務都是通用類型的項目托盤。如何從事務中挖掘超出的項目集和關聯規則。

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

3.關聯規則

    數據挖掘是⼀項從⼤量的記錄數據中提取有價值的、⼈們感興趣的知識,這些知識是隱含的、事先未知的有⽤信息,提取的知識⼀般可表⽰爲概念(Concepts)、規則(Rules)、規律(Regular ides)、模式(Patterns)等形式。

    關聯規則是當前數據挖掘研究的主要⽅法之⼀,它反映⼀個事物與其他事物之間的相互依存性和關聯性。如果兩個或者多個事物之間存在⼀定的關聯關係,那麼,其中⼀個事物就能夠通過其他事物預測到。

    典型的關聯規則發現問題是對超市中的貨籃數據(Market Basket)進行分析。通過發現顧客放⼊貨籃中的不同商品之間的關係來分析顧客的購買習慣。

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

4.序列模式挖掘

    PrefixSpan(序列模式挖掘)是在Pei等人的《通過模式增長來挖掘順序模式:PrefixSpan方法》中描述的順序模式挖掘算法。spark.mllib的PrefixSpan實現採用以下參數:

  • minSupport:被視爲頻繁順序模式所需的最低支持。

  • maxPatternLength:頻繁順序模式的最大長度。任何超出此長度的頻繁模式都不會包含在結果中。

  • maxLocalProjDBSize:在開始對投影數據庫進行本地迭代處理之前,前綴投影數據庫中允許的最大項目數。該參數應根據執行程序的大小進行調整。

    以下示例說明了在序列上運行的PrefixSpan(使用與Pei等人相同的表示法):

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

    Spark 頻繁模式挖掘的內容至此結束,有關Spark的基礎文章可參考前文:

 

    Spark MLlib分佈式機器學習源碼分析:矩陣向量

    Spark MLlib分佈式機器學習源碼分析:基本統計

    Spark MLlib分佈式機器學習源碼分析:線性模型

    Spark MLlib分佈式機器學習源碼分析:樸素貝葉斯

    Spark MLlib分佈式機器學習源碼分析:決策樹算法

    Spark MLlib分佈式機器學習源碼分析:集成樹模型

    Spark MLlib分佈式機器學習源碼分析:協同過濾

    Spark MLlib分佈式機器學習源碼分析:K-means聚類

    Spark MLlib分佈式機器學習源碼分析:隱式狄利克雷分佈

    Spark MLlib分佈式機器學習源碼分析:奇異值分解與主成分分析

    Spark MLlib分佈式機器學習源碼分析:特徵提取與轉換

 

    參考鏈接:

    http://spark.apache.org/docs/latest/mllib-frequent-pattern-mining.html

    https://zhuanlan.zhihu.com/p/57483610

歷史推薦

“高頻面經”之數據分析篇

“高頻面經”之數據結構與算法篇

“高頻面經”之大數據研發篇

“高頻面經”之機器學習篇

“高頻面經”之深度學習篇

爬蟲實戰:Selenium爬取京東商品

爬蟲實戰:豆瓣電影top250爬取

爬蟲實戰:Scrapy框架爬取QQ音樂

數據分析與挖掘

數據結構與算法

機器學習與大數據組件

歡迎關注,感謝“在看”,隨緣稀罕~

一個贊,晚餐加雞腿

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