天天看點

Spark mllib FP Growth

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)

}

}

}

繼續閱讀