大資料高階必修課!Spark實戰關聯規則挖掘演算法

2021-10-05 23:29:16 字數 2541 閱讀 2457

研究規則挖掘演算法的目的是發下商品交易資料庫中不同型別商品之間的潛在聯絡,找出客戶在購買商品時的行為模式。例如客戶購買了某個產品,會對客戶購買其他產品產生何種影響,通過分析諸如此類的結果,可以應用到實際的商業規劃中,比如超市商品貨架的分布排放、商品庫存的計畫以及如何跟客戶的購買習慣對客戶進行分類從而進行有針對的精準營銷。

在mllib中,主要實現了fp-tree關聯規則演算法,這種方法基於apriori演算法,對頻繁項集資料進行挖掘,優點是效率和魯棒性上有很大的提高。通過乙個簡單的例子介紹關聯規則演算法—啤酒和尿布:上世紀沃爾瑪超市銷售人員發現在某些日子,啤酒和尿布這兩樣表面看起來毫無關聯的東西出現在同乙份購物清單上,經調查發現是,有些日子是父親外出工作回家前會去超市購買嬰兒用品,同時也會購買啤酒之類的產品,於是根據此發現,超市將啤酒魚尿布放的盡可能遠,在中間的通道上擺放吸引這些年輕父親的產品,促進購買。在這裡項就是指的乙個個物品,項集就是所有物品中某幾項組成的集合,在本教程中是兩兩組合。

據此案例,apriori演算法是一種挖掘關聯規則的頻繁項集演算法,核心思想是通過候選集生成和情節的向下封閉檢測兩個階段來挖掘頻繁項集。其過程是計算乙份購物清單中所有商品中每兩件商品同時出現的次數,從而可以算出兩件商品同時出現的概率即支援度,也可以算出其中一件商品出現時另一件商品出現的概率即置信度。然後根據計算結果,跑去資料支援個數過少的物品項。重新相互組合商品開始下一輪的計算,屬於候選消除演算法。

mllib中支援的fp-growth頻繁模式增長演算法,將提供頻繁項集的資料庫壓縮到fp樹即頻繁模式樹,保留物品集合的關聯資訊。可以解決多次掃瞄資料庫帶來的大量小頻繁項集的問題,在理論上只對資料庫進行兩次掃瞄,直接壓縮資料庫生成乙個頻繁模式樹從而生成關聯規則。主要分以下兩步驟完成:

(1)利用資料庫中已有樣本資料建立fp樹;

(2)建立頻繁項集規則。

mllib中是使用並行fpgrowth演算法挖掘頻繁項集的方法完成fpgrowth關聯規則的挖掘,分為頻繁項的挖掘和頻繁項集的挖掘:

(1)class fpgrowth:含有run方法基於fpgrowth演算法計算頻繁項集,需要設定的引數為:

(2)頻繁項集挖掘:

genfreqitems:頻繁項計算;genfreqitemsets:頻繁項集計算;

(3)fptree類:

add方法:樹增加;

merge:樹合併;

project:取字尾樹;

gettransactions:取節點下的所有事務;

extract:提取頻繁項集

(4)fpgrowthmodel:fpgrowth模型

freqitemsets:頻繁項集,格式為rdd(freqitemset)

資料集為用英文小寫字母代表的物品組成的購物清單,如下所示:

r z h k p

z y x w v u t s

s x o n r

x z y m t s q e

zx z y r q t p

每個字母代表乙個物品

//匯入需要的機器學習包和相關基礎包

import org.apache.log4j.

import org.apache.spark.

import org.apache.spark.rdd.rdd

import org.apache.spark.mllib.fpm.

//構建spark物件

val conf = new sparkconf(

"fpg"

)val sc = new sparkcontext(conf)

logger.getrootlogger.setlevel(level.warn)

//讀取樣本資料

val data_path =

"/mnt/hgfs/thunder-download/mllib_rep/

data/sample_fpgrowth.txt"

val data = sc.textfile(data_path)

val examples = data.map(_.split(

" ")).cache(

)//建立模型

val minsupport = 0.2

val numpartition = 10

val model = new fpgrowth(

). setminsupport(minsupport).

setnumpartitions(numpartition).

run(examples)

//列印結果

println(s"number of frequent itemsets: $"

) model.freqitemsets.collect(

).foreach

最後輸出關聯規則:

[z], 5

[x], 4

[x,z], 3

[y], 3

[y,x], 3

[y,x,z], 3

[y,z], 3

[r], 3

[r,x], 2

[r,z], 2

……

DBA小學必修課之二 mysql 資料目錄修改

上文我們寫了如何通過rpm的方式安裝mysql5.7資料庫,但是預設安裝的資料庫目錄是在 var lib mysql下的,有時候有移動資料目錄的需要,所以下面我們來做一次移動目錄的實驗 0.先看一下原目錄的存放位置 1.新建資料目錄作為存放的目標目錄 setenforce 0 臨時關閉selinux...

程式猿必修課之資料結構(十)樹1

樹是一對多的資料結構 樹 tree 是 n n 0 個結點的有限集。n 0 時,稱為空樹。在任意一棵非空樹中 其實樹的定義用到了遞迴的方法。樹的每乙個結點包含乙個資料元素和若干個指向其子樹的分支。結點的度 結點擁有的子樹的個數稱為結點的度 degree 度為 0 的結點稱為葉結點 leaf 或終端結...

程式猿必修課之資料結構(七)棧2

斐波那契 fibonacci 是乙個經典的遞迴例子。數字 1,1,2,3,5,8,13.構成乙個序列,它的特點是 前面相鄰兩項之和是後一項的值。用數學函式來定義是 斐波那契數列 用遞迴實現列印出前 40 位的斐波那契數列數的 如下 includeint fbi int int main return...