关联规则-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) } }
参考:1、FP Tree算法原理总结(刘建平)