1.1.1 基本概念
關聯規則挖掘的一個典型例子是購物籃分析。關聯規則研究有助于發現交易資料庫中不同商品(項)之間的聯系,找出顧客購買行為模式,如購買了某一商品對購買其他商品的影響,分析結果可以應用于商品貨架布局、貨存安排以及根據購買模式對使用者進行分類。
關聯規則的相關術語如下:
(1)項與項集
這是一個集合的概念,在一籃子商品中的一件消費品即為一項(Item),則若幹項的集合為項集,如{啤酒,尿布}構成一個二進制項集。
(2)關聯規則
一般記為的形式,X為先決條件,Y為相應的關聯結果,用于表示資料内隐含的關聯性。如:表示購買了尿布的消費者往往也會購買啤酒。
關聯性強度如何,由三個概念——支援度、置信度、提升度來控制和評價。
例:有10000個消費者購買了商品,其中購買尿布1000個,購買啤酒2000個,購買面包500個,同時購買尿布和面包800個,同時購買尿布和面包100個。
(3)支援度(Support)
支援度是指在所有項集中{X, Y}出現的可能性,即項集中同時含有X和Y的機率:
該名額作為建立強關聯規則的第一個門檻,衡量了所考察關聯規則在“量”上的多少。通過設定最小門檻值(minsup),剔除“出鏡率”較低的無意義規則,保留出現較為頻繁的項集所隐含的規則。
設定最小門檻值為5%,由于{尿布,啤酒}的支援度為800/10000=8%,滿足基本輸了要求,成為頻繁項集,保留規則;而{尿布,面包}的支援度為100/10000=1%,被剔除。
package com.immooc.spark
import org.apache.log4j.{Level, Logger}
import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.{SparkConf, SparkContext}
object FPGrowthTest {
def main(args:Array[String]): Unit = {
val conf = new SparkConf().setAppName("DecisionTreeTest").setMaster("local[2]")
val sc = new SparkContext(conf)
Logger.getRootLogger.setLevel(Level.WARN)
//1 讀取樣本資料
val data_path = "file:///Users/walle/Documents/D3/sparkmlib/sample_fpgrowth.txt"
val data = sc.textFile(data_path)
val examples = data.map(_.split(" ")).cache()
//2 建立模型
val minSupport = 0.2
val numPartition = 10
val model = new FPGrowth().
setMinSupport(minSupport).
setNumPartitions(numPartition).
run(examples)
//3 列印結果
println(s"Number of frequent itemsets: ${model.freqItemsets.count()}")
model.freqItemsets.collect().foreach { itemset =>
println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}
}
}