關聯規則
關聯分析:用於發現隱藏在大型數據集中的有意義的聯系,所發現的聯系可用關聯規則或頻繁項集的形式表示。
應用領域:購物籃數據/科學數據分析/網頁挖掘
本節討論購物籃數據。
許多商業企業在運營中積累了大量的數據,如食品商店的收銀台每天都收集大量的顧客購物數據,如表1所示,通常稱為購物籃事務,每行對應一個唯一表示TID和給定顧客購買的商品集合,分析這些數據的關系可以用於市場促銷,庫存管理和客戶關系管理等。
對購物籃數據進行關聯分析面對的問題:
1) 從大型事務數據集中發現模型在計算上可能付出的高代價(挖掘算法)
2) 所發現的模式可能存在虛假(評估問題)
一、基本定義
1)二元表示
原表1購物籃事務的二元表示如表2:
2)項集:記為購物籃數據中所有項的集合,
為所有事務的集合。包含0或多個項的集合稱為項集,一個TID對應一個事務,事務包含的項集為I的子集;例如:表1中TID=2對應第二個事務{面包,尿布,啤酒,雞蛋},包含項集{面包,尿布},不包含項集{面包,牛奶}。
3)事務的寬度:事務中出現項的個數,如第2個事務的寬度為4。
4)支持度數:包含特定項集的事務個數,項集X的支持度數可表示為:
如項集{啤酒,尿布,牛奶}的支持度數為2。
5)關聯規則:形如X->Y的表達式,且X∩Y=Ø。關聯規則的強度可以用支持度(support)和置信度(confidence)度量。
支持度(s):X與Y同時出現的事務在T中的比例,確定規則可以用於給定數據集的頻繁程度;
置信度(c):X與Y同時出現的事務在X出現的事務中的比例,衡量Y在包含X的事務中出現的頻繁程度:
注:由關聯規則作出的推論並不必然蘊涵因果關系。
2)關聯規則發現:給定事務的集合T,關聯規則發現是指找出支持度大於等於minsup且置信度大於等於minconf的所有規則。
注:從包含d個項的數據集提取的可能規則的總數為:
推到如下:設左邊項有k個,則右邊項有d-k個:
由於原始方法挖掘規則的計算成本很高,因此,大多數關聯規則挖掘算法通常采用的一種策略是,將挖掘任務分解為如下兩個子任務:
① 頻繁項集產生:發現滿足minsup的所有項集(頻繁項集)。
② 規則的產生:從上一步發現的頻繁項集中提取所有高置信度的規則(強規則)。
一、頻繁項集的產生
1. Apriori算法
Apriori(先驗)原理:如果某個項集是頻繁的那么它的所有子集也是頻繁的。
相反,若一個項集是非頻繁的,則它的所有超集也是非頻繁的,則整個包含非頻繁集的超集的集合可以被立即剪枝,這種策略稱為基於支持度的剪枝。
Apriori算法流程:
1) 單編掃描數據集,確定每項的支持度,得到所有頻繁1-項集;
2) 使用上一次迭代發現的頻繁(k-1)-項集,產生新的候選k-項集,候選的產生使用apriori-gen函數實現。
3) 對候選項的支持度進行計數;
4) 刪去支持度計數小於minsup的候選項集;
5)當沒有新的頻繁項集產生,結束。
候選產生過程:
1) 蠻力方法
將所有的k-項集都看作可能的候選,再進行剪枝。設d為項的總數,則每一層產生k-項集的數目為,總復雜度為
。
2) 方法
用其他頻繁項來擴展每個頻繁(k-1)-項集,產生個候選k-項集,總復雜度為
.
3)方法
函數apriori-gen的候選產生過程合並一對頻繁(k-1)-項集,僅當它們的前k-2個項都相同。
例:{面包,尿布}+{面包,牛奶}={面包,尿布,牛奶}
注:算法不合並{啤酒,尿布}和{尿布,牛奶},因為它們的第一個項不同,這種使用字典序的方法是為了避免重復。
支持度計數:
1)法一:將事務與所有的候選項集進行比較,並且更新包含在事務中的候選項集的支持度計數,此方法在當事務和候選項集的數目都很大時計算成本很高。
2)法二:枚舉每個事務所包含的項集,利用它們更新對應的候選項集的支持度。
如下為事務t獲得3-項集的方法:假定每個項集中的項都以遞增的字典序排列,則項集可以這樣枚舉:先指定最小項,其后跟隨較大的項。例如,給定事務{1 2 3 5 6},它的所有3-項集一定是以項1,2,3開始,不必構造以5或6開始的3-項集。
枚舉完候選項集后,還必須確定每一個3-項集是否對應一個候選項集,若它與一個候選匹配,則相應候選項集的支持度計數增值,下邊利用hash樹來進行匹配操作:
在Apriori算法中,候選項集划分為不同的桶,並存放在Hash樹中,在支持度計數期間,包含在事務中的項集也按照相同方式散列到相應的桶中,此法中只需將事務中的每個項集與同一桶內候選項集進行匹配,而不必和所有候選項集進行比較,這就是Hash樹的優勢。
Hash樹建立:https://blog.csdn.net/owengbs/article/details/7626009
假設構建一棵Hash樹,樹的每個內部結點都使用hash函數h(p)=p mod 3來確定應當沿着當前結點的哪個分支向下,且每個葉子節點最多含有三個項集,如果插入某一節點的項多余3項,需要進行分裂操作,把原來的3項集和新的項集以第2項做hash,映射到新的葉節點,此例待插入的項共有15個。
- 候選項集的Hash樹建立:
- 事務的Hash樹建立:
- 匹配更新支持度數:
規則的產生:
- 提取方法
將項集Y划分為兩個非空子集X和Y-X,使得X->Y-X滿足置信度閾值。
注:這樣的規則必然已經滿足支持度閾值(由頻繁項集產生),且計算規則的置信度不需要再次掃描事務數據集(項集的支持度計數已在頻繁項集產生時得到)。
- 基於置信度的剪枝
定理:若規則X->Y-X不滿足置信度閾值,則形如的規則一定也不滿足置信度閾值,其中
。
- Apriori規則的產生
Apriori算法使用一種逐層方法來產生關聯規則,其中每層對應於規則后件中的項數,初始提取規則后件只含一個項的所有高置信度規則,然后使用這些規則來產生新的候選規則。下圖顯示由{abcd}產生關聯規則的格結構。
2、FP增長算法
1)FP樹表示
FP樹是一種輸入數據的壓縮表示,它通過逐個讀入事務,並把每個事務映射到FP樹中的一條路徑來構造,對於不同事務中相同的項,它們的前綴路徑相同。路徑相互重疊越多,使用FP樹結構獲得的壓縮效果越好。
2)構建FP樹:
初始,FP樹僅含一個根節點,用null表示,隨后:
① 掃描一次數據集(第一次掃描),確定每個項的支持度數,找出頻繁1-項集,將含非頻繁1-項集的事務去掉。
② 掃面一次數據集(最后一次掃描),把剩下的事務逐個按照支持度先進行排序再依次插入到FP樹中(為了共用前綴)。
③ 建立同項的鏈表並創建header-table。
例:有如下購物籃數據:
假設minsup=3,以此建立一棵FP樹。
計算每個項的支持度計數:
刪去非頻繁1-項集:爆米花,黃油,按支持度計數大小降序將事務排列如下:
建立FP樹如下:
注:FP樹的大小取決於項的排序方式,如果顛倒前面例子的序,即升序,則樹會更加茂盛。
1)頻繁項集產生
① 從FP樹的最下面的項開始,構造每個項的條件模式基(CPB):該項到根節點之間的FP子樹(利用鏈表可快速查找路徑)。
② 對每個CPB,將所有的祖先節點計數設置為葉子節點的計數,累加每條CPB的支持度計數,去掉不符合minsup的項,構建條件FP樹。
③ 遞歸挖掘每個條件FP樹,累加后綴頻繁項集,直到FP樹為空或FP樹只有一條路徑。
接上例:
尋找啤酒的頻繁項集
啤酒的CPB:{薯片:1,雞蛋:1,面包:1,牛奶:1}
{薯片:1,雞蛋:1}
{面包:1,牛奶:1}
{雞蛋:1,面包:1}
去掉不滿足支持度計數的薯片,牛奶,構建條件FP樹:
以啤酒結尾的頻繁項集:{啤酒:3}、{面包:3,啤酒:3}、{雞蛋:3,啤酒:3}
以面包,啤酒結尾的頻繁項集:{雞蛋:2,面包:2,啤酒:2}不符合minsup
以雞蛋,啤酒結尾的頻繁項集:{null,雞蛋:3,啤酒:3},終止。
得到啤酒的頻繁項集:{啤酒},{面包,啤酒},{雞蛋,啤酒}
尋找牛奶的頻繁項集…
三、關聯規則的評估
1、支持度-置信度框架的局限性
支持度的缺點:許多潛在的有意義的模式由於包含支持度小的項而被刪去,比如很少人購買珠寶,但關於它的關聯規則可能是商家所關心的。
置信度的缺點:高置信度並不代表規則是有意義的,往往是因為忽略了后件的支持度數。
常用評判准則:
- 提升度(lift):
對於二元變量,上式等價於如下興趣因子:
結果可解釋如下:
- IS度量
IS用於處理非對稱二元變量,定義如下:
當興趣因子和支持度都很大時,IS也很大。另,可證明IS等價於二元變量的余弦度量:
IS也可以表示為從一對二元變量中提取出的關聯規則的置信度的幾何均值:
由於兩個數的幾何均值總是接近較小的數,所以只要規則A->B或B->A中的一個具有較低大的置信度,項集{A,B}的IS值就較低。
---恢復內容結束---