上面我們介紹的都是基於
apriori
的頻集方法。即使進行了優化,但是
apriori
方法一些固有的缺陷還是無法克服:
可能產生大量的候選集。當長度為1的頻集有10000個的時候,長度為2的候選集個數將會超過10m。還有就是如果要生成乙個很長的規則的時候,要產生的中間元素也是巨大量的。
無法對稀有資訊進行分析。由於頻集使用了引數minsup,所以就無法對小於minsup的事件進行分析;而如果將minsup設成乙個很低的值,那麼演算法的效率就成了乙個很難處理的問題。
下面將介紹兩種方法,分別用於解決以上兩個問題。
針對問題一,
j.han
等在[5]
中提出了不產生候選挖掘頻繁項集的方法:
fp-樹頻集演算法。他們採用了分而治之的策略,在經過了第一次的掃瞄之後,把資料庫中的頻集壓縮進一棵頻繁模式樹(
fp-tree
),同時依然保留其中的關聯資訊。隨後我們再將
fp-tree
分化成一些條件庫,每個庫和乙個長度為
1的頻集相關。然後再對這些條件庫分別進行挖掘。當原始資料量很大的時候,也可以結合劃分的方法
,使得乙個
fp-tree
可以放入主存中。實驗表明,
fp-growth
對不同長度的規則都有很好的適應性,同時在效率上較之
apriori
演算法有巨大的提高。
第二個問題是基於這個的乙個想法:
apriori
演算法得出的關係都是頻繁出現的,但是在實際的應用中,我們可能需要尋找一些高度相關的元素,即使這些元素不是頻繁出現的。在
apriori
演算法中,起決定作用的是支援度,而我們現在將把可信度放在第一位,挖掘一些具有非常高可信度的規則。
edith cohen
在[6]
中介紹了對於這個問題的乙個解決方法。整個演算法基本上分成三個步驟:計算特徵、生成候選集、過濾候選集。在三個步驟中,關鍵的地方就是在計算特徵時
hash
方法的使用。在考慮方法的時候,有幾個衡量好壞的指數:時空效率、錯誤率和遺漏率。基本的方法有兩類:
min_hashing(mh)
和locality_sensitive_hashing(lsh)
。min_hashing
的基本想法是:將一條記錄中的頭k個為
1的字段的位置作為乙個
hash
函式。locality_sentitive_hashing
的基本想法是:將整個資料庫用一種基於概率的方法進行分類,使得相似的列在一起的可能性更大,不相似的列在一起的可能性較小。我們再對這兩個方法比較一下。
mh的遺漏率為零,錯誤率可以由
k嚴格控制,但是時空效率相對的較差。
lsh的遺漏率和錯誤率是無法同時降低的,但是它的時空效率卻相對的好很多。所以應該視具體的情況而定。最後的實驗資料也說明這種方法的確能產生一些有用的規則。
基於海量資料的關聯規則挖掘(五)
2.1基於hash的方法 首先是基於雜湊的演算法。基於雜湊的演算法仍是將所有所有資料放入記憶體的方法。只要在計算的過程中能夠滿足演算法對記憶體的大量需求,apriori 演算法能夠很好的執行。但在計算候選項集時特別是在計算候選項對 c2時需要消耗大量記憶體。針對 c2候選項對過大,一些演算法提出用來...
基於海量資料的關聯規則挖掘(七)
multihash 演算法 有時我們從 multistage 演算法的額外的步驟中獲取好處。這個 pcy的變形叫做 multihash 7 演算法。不同於在連續的兩個步驟中使用兩個雜湊表,該演算法在一步中使用兩個雜湊演算法和兩個分離的雜湊表。如表 6.7所述。在同一步裡使用兩個 hash 表的危險是...
使用mahout做海量資料關聯規則挖掘
mahout是乙個基於hadoop的分布式資料探勘開源專案 mahout本來是指乙個騎在大象上的人 掌握了關聯規則的基本演算法和使用,加上分布式關聯規則挖掘後,就可以處理基本的關聯規則挖掘工作了,實踐中只需要把握業務,理解資料便可游刃有餘。安裝mahout 騎在大象上的俠士必然需要一頭雄糾糾的大象,...