基於海量資料的關聯規則挖掘(五)

2021-06-20 04:33:40 字數 2280 閱讀 5269

2.1基於hash的方法

首先是基於雜湊的演算法。基於雜湊的演算法仍是將所有所有資料放入記憶體的方法。只要在計算的過程中能夠滿足演算法對記憶體的大量需求,

apriori

演算法能夠很好的執行。但在計算候選項集時特別是在計算候選項對

c2時需要消耗大量記憶體。針對

c2候選項對過大,一些演算法提出用來減少

c2的大小。這裡我們首先考慮

pcy演算法,這個演算法使用了在

apriori

演算法的第一步裡大量沒使用的記憶體。接著,我們考慮

multistage

演算法,這個演算法使用

pcy的技巧,但插入了額外的步驟來更多的減少

c2的大小。

park,chen,yu(pcy)演算法[3]:

這個演算法我們叫

pcy演算法,取自它的作者名字縮寫。該演算法關注在頻繁項集挖掘中的第一步有許多記憶體空間沒被利用的情況。如果有數以億計的項,和以

g計的記憶體,在使用關聯規則的第一步裡我們將會僅僅使用不到

10%的記憶體空間,會有很多記憶體空閒。因為在第一步裡,我們只需要兩個表,乙個用來儲存項的名字到乙個整數的對映,用這些整數值代表項,乙個陣列來計數這些整數,如圖1。

pcy演算法使用這些空閒的記憶體來儲存乙個整數陣列。其思想顯示如圖2。

.將這個陣列看做乙個雜湊表,表的桶中裝的是整數值而不是一組

key值。項對被雜湊到這些桶中。在第一步掃瞄籃子的處理中,我們不但將這些項對加一,並且通過兩步迴圈,我們創造出所有的項對。我們將項對雜湊到雜湊表中,並且將雜湊到的位置加一。注意,項本身不會進入桶,項對的加入只是影響桶中的整數值。

在第一步的結尾,每個桶中裝有乙個數字,這個數字表達了桶中的項對的數目。如果桶中數字大於支援度閾值

s,這個桶被稱為頻繁桶。對於頻繁桶,我們不能確定其項對是否為頻繁項對,但有可能是。但是,對於閾值低於

s的桶,我們知道其中的項對肯定不是頻繁項對,即使項對是由兩個頻繁項組成。這個事實給我們在第二部處理帶來很大的方便。我們可以定義候選集

c2為這樣的項對:

1.      i和

j是頻繁項

2.      

雜湊到乙個頻繁桶

第二個條件是

pcy演算法與

a-priori

演算法的區別所在。

在步驟1中使用

hash

表可能並不能帶來好處,這取決於資料大小和空閒記憶體大小。在最壞的情形下,所有的桶都是頻繁的,

pcy計算的項對與

a-priori

是一樣的。然而,在通常的情況下,大多數的桶都是非頻繁的。這種情況下,

pcy演算法降低了第二步記憶體的使用。

假設我們有

1g的記憶體可用來在第一步做

hash

表存放,並假設資料檔案包含在

10億籃子,每個籃子

10個項。乙個桶為乙個整數,通常定義為

4個位元組,於是我們可以儲存

2.5億個桶。所有籃子的項對的數量總數為

或個。這個數量也是桶中計數的總和。這樣,每個桶的平均計數為

,或180

個。所以,如果支援度閾值s在

180附近,或更小,可能只有很少的桶是非頻繁的。然而,當

s足夠大,比方說

1000

,這樣會使大部分的桶成為非頻繁的。這樣最大可能的頻繁桶數為

,或450

億個頻繁桶。 在

pcy演算法中,在其第二步操作前,雜湊表被壓縮為

bitmap

,在這裡,每乙個

bit用作乙個桶。若桶為頻繁桶,則位置

1,否則置

0。這樣

32bit

的整數被壓縮為只有

1bit

。然後再

pcy的第二步操作中,

bitmap

只佔了原來所用空間的

1/32

,如圖2

所示。如果大部分的桶都是非頻繁桶,我們可以預料,在第二步的項對計數後產生的頻繁項集會更小。這樣,

pcy演算法就能直接在記憶體中處理這些資料集而不會耗盡記憶體。

雖然在尋找頻繁項對時,

pcy演算法與

apriori

演算法相差很大,但是,在三元對和更多元時,他們的方法又為相同了。

圖2、使用pcy演算法的記憶體組織形式,左圖為步驟1的記憶體使用情況,右圖為步驟2的記憶體使用情況

基於海量資料的關聯規則挖掘(七)

multihash 演算法 有時我們從 multistage 演算法的額外的步驟中獲取好處。這個 pcy的變形叫做 multihash 7 演算法。不同於在連續的兩個步驟中使用兩個雜湊表,該演算法在一步中使用兩個雜湊演算法和兩個分離的雜湊表。如表 6.7所述。在同一步裡使用兩個 hash 表的危險是...

基於海量資料的關聯規則挖掘(十一)

上面我們介紹的都是基於 apriori 的頻集方法。即使進行了優化,但是 apriori 方法一些固有的缺陷還是無法克服 可能產生大量的候選集。當長度為1的頻集有10000個的時候,長度為2的候選集個數將會超過10m。還有就是如果要生成乙個很長的規則的時候,要產生的中間元素也是巨大量的。無法對稀有資...

使用mahout做海量資料關聯規則挖掘

mahout是乙個基於hadoop的分布式資料探勘開源專案 mahout本來是指乙個騎在大象上的人 掌握了關聯規則的基本演算法和使用,加上分布式關聯規則挖掘後,就可以處理基本的關聯規則挖掘工作了,實踐中只需要把握業務,理解資料便可游刃有餘。安裝mahout 騎在大象上的俠士必然需要一頭雄糾糾的大象,...