关联规则-Apriori算法和FPGrowth

关联规则是反应一个实物与其他事物之间的相互依存性和关联性。

支持度(Support):几个关联的数据在数据集中出现的次数占总数据集的比重。

置信度(Confidence):体现了一个数据出现后,另一个数据出现的概率,或者说数据的条件概率。

提升度(Lift):置信度/支持度

一、Apriori算法

 

二、FPGrowth

FPGrowth算法包括以下几步:

1)扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。

2)扫描数据,将读到的原始数据剔除非频繁1项集,并按照支持度降序排列。

3)读入排序后的数据集,插入FP树,插入时按照排序后的顺序,插入FP树中,排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到FP树后,FP树的建立完成。

4)从项头表的底部项依次向上找到项头表项对应的条件模式基。从条件模式基递归挖掘得到项头表项项的频繁项集。

5)如果不限制频繁项集的项数,则返回步骤4所有的频繁项集,否则只返回满足项数要求的频繁项集。

 Spark代码:

import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.fpm.FPGrowth

object FpGrouth_test {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().master("local[*]").getOrCreate()

    import spark.implicits._

    val dataSet = spark.createDataset(Seq(
      "A B C",
      "B C E",
      "A C E",
      "B A C E",
      "B A C"
    )).map(x => x.split(" ")).toDF("items")
    dataSet.show(false)

    val fpGrouth = new FPGrowth().setMinSupport(0.5).setMinConfidence(0.6).setItemsCol("items")

    val fpModel = fpGrouth.fit(dataSet)
    //生成频繁详项集
    fpModel.freqItemsets.show(false)
    fpModel.associationRules.show(false)
//
    fpModel.transform(dataSet).show(false)
  }
}
View Code

 

 

 

参考:1、FP Tree算法原理总结(刘建平)  

posted @ 2022-04-10 23:11  奇遇yms  阅读(167)  评论(0编辑  收藏  举报