第 3 章 SIT(SORTING INDEXING TRIMMING)演算法
3.2 索引(I NDEXING )
3.2.1 Apriori 的索引改良法
於傳統的Apriori 的演算法找尋高頻物項集合至少須比對的次數如範例圖 3.5
{m,p}
{f,p}
{f,m}
{c,p}
{c,m}
{c,f}
{b,p}
{b,m}
{b,f}
{b,c}
{a,p}
{a,m}
{a,f } {a,c}
{a,b}
Itemset
8 8 7 8 7 4 1 1 1 1 8 7 4 2 2 Count
a,c,d,f,l,m,n,p 5
b,c,k,p,s 4
b,f,h,j,o 3
a,b,c,f,l,m,o 2
a,c,d,f,g,i,m,p 1
Items Tid
圖 3.5 Apriori 演算法找尋高頻物項集合至少須比對的次數範例圖 左邊的圖代表候選物項集合,右邊的圖代表資料庫,其中各交易下的所有物項 已事先排序好,使用傳統的Apriori 的演算法,比對各候選物項集合是否為 Tid=1 物項集合的子集合,左邊圖的Count 欄位是各候選物項集合至少須比較的次數。
依圖3.5 資料來說明,要確認左邊候選物項集合是否為 Tid=1 物項集合的子集 合,其步驟如下
1. 比對候選物項集合{a,b},首先找尋物項 a,只比對了 1 次就找到了,然後找
尋物項b,於 Tid=1 的第 2 個位址的物項開始比對,結果發現是物項 c 不必 再往下比對,共比較了2 次,確認候選物項集合{a,b}不是 Tid=1 的子集合。2. 比對候選物項集合{a,c},找尋物項 a 只比對了 1 次,接者比對物項 c 於 Tid=1
的第2 個位址物項開始比對,結果只比對了 1 次,候選物項集合{a,c}共比對 了2 次,確認候選物項集合{a,c}是 Tid=1 的子集合。3. 比對候選物項集合{a,f},找尋物項 a 只比對了 1 次,接者比對物項 c 於 Tid=1
的第2 個位址物項開始比對結果分別比對 c→d→f 共 3 次,所以候選物項集 合{a,f}共比對了 4 次,確認候選物項集合{a,f}是 Tid=1 的子集合。4. 依上序方法,依序比對了候選物項集合{a,m}、{a,p}、{b,c}、{b,f}、{b,m}、
{b,p}、{c,f}、{c,m}、{c,p}、{f,m}、{f,p}、{m,p}是否為 Tid=1 的子集合,分 別比對了7、8、1、1、1、1、4、7、8、7、8、8 次。
從以上的步驟得知,至少必須比對了2+2+4+7+8+1+1+1+1+4+7+8+7+8+8=69 次 才能確認圖3.5 左邊候選物項集合是否為 Tid=1 的物項集合的子集合,根據以上 的說明可以確認每個候選物項集合最少是1 次,最多是每個交易下的物項個數 的次數,就能判斷是否為一交易的子集合。
使用圖3.5 的資料庫,依各物項於資料庫出現的頻率排序,如圖 3.6
1,2,3,5,6,7,14,15 5
1,4,613,17 4
2,4,10,12,16 3
1,2,3,4,5,14,16 2
1,2,3,5,6,7,9,11 1
Items Tid
a,c,d,f,l,m,n,p 5
b,c,k,p,s 4
b,f,h,j,o 3
a,b,c,f,l,m,o 2
a,c,d,f,g,i,m,p 1
Items Tid
{5,6}
{4,6}
{4,5}
{3,6}
{3,5}
{3,4}
{2,6}
{2,5}
{2,4}
{2,3}
{1,6}
{1,5}
{1,4 } {1,3}
{1,2}
Itemset
5 4 4 5 4 4 5 4 4 3 5 4 4 3 2 Count
圖 3.6 依各物項的於資料庫出現的頻率由高至低排序
左邊的圖代表候選物項集合,右邊的圖代表資料庫,其中各交易下的所有物項 已事先按資料庫出現的頻率由高至低排序(排序過程請參照 3.1.2)
依圖3.6 資料來說明,要確認左邊候選物項集合是否為 Tid=1 物項集合的子集 合,其步驟如下
1. 比對候選物項集合{1,2},找尋物項 1 只比對了 1 次,接者比對物項 2 於 Tid=1
的第2 個位址物項開始比對,結果只比對了 1 次,候選物項集合{1,2}共比對 了2 次,確認候選物項集合{1,2}是 Tid=1 的子集合。2. 比對候選物項集合{1,3},找尋物項 1 只比對了 1 次,接者比對物項 3 於 Tid=1
的第2 個位址物項開始比對,結果分別比對了 2→3 共 2 次,候選物項集合{1,3}共比對了3 次,確認候選物項集合{1,3}是 Tid=1 的子集合。
3. 比對候選物項集合{1,4},找尋物項 1 只比對了 1 次,接者比對物項 4 於 Tid=1
的第2 個位址物項開始比對,結果分別比對了 2→3→5 共 3 次,發現物項 5 不必再往下比對,確認候選物項集合{1,4}不是 Tid=1 的子集合。4. 依上序方法,依序比對了候選物項集合{1,5}、{1,6}、{2,3}、{2,4}、{2,5}、
{2,6}、{3,4}、{3,5}、{3,6}、{4,5}、{4,6}、{5,6}是否為 Tid=1 的子集合,分 別比對了4、5、3、4、4、5、4、4、5、4、4、5 次。
從以上的步驟得知,至少必須比對了2+3+4+4+5+3+4+4+5+4+4+5+4+4+5=60 次 才能確認圖3.6 左邊候選物項集合是否為 Tid=1 的物項集合的子集合。
同樣使用圖3.5 的資料庫,使用 SIT 方法排序,並將候選物項集合的第 1 個位址 物項建立索引對映矩陣,如圖3.7
1,8,9,12,14,15,16,17 5
7,11,13,15,16 4
4,6,10,13,17 3
8,10,12,13,14,16,17 2
1,3,5,12,14,15,16,17 1
Items Tid
{16,17}
{15,17}
{15,16}
{14,17}
{14,16}
{14,15}
{13,17}
{13,16}
{13,15}
{13,14}
{12,17}
{12,16}
{12,15 } {12,14}
{12,13}
Itemset
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Address
{16,17}
{15,17}
{15,16}
{14,17}
{14,16}
{14,15}
{13,17}
{13,16}
{13,15}
{13,14}
{12,17}
{12,16}
{12,15 } {12,14}
{12,13}
Count
0 0 17
15 15 16
14 13 15
12 10 14
9 6 13
5 1 12
0 0 11
0 0 10
0 0 9
0 0 8
0 0 7
0 0 6
0 0 5
0 0 4
0 0 3
0 0 2
0 0 1
End Start Item
a,c,d,f,l,m,n,p 5
b,c,k,p,s 4
b,f,h,j,o 3
a,b,c,f,l,m,o 2
a,c,d,f,g,i,m,p 1
Items Tid
圖 3.7 依據 SIT 方法排序建立索引編號對映矩陣
依據SIT 排序,將資料庫的物項依出現的頻率由低至高排序,由小至大建立索 引編號,更新成新的資料庫於圖3.7 的左下方的資料庫,然後於每個候選物項 集合的第1 個位址的物項建立索引編號的矩陣,儲存候選物項集合的第 1 個位 址物項的開始與結束位址。
圖3.7 左下方使用 SIT 的排序方法建立新資料庫,並建立索引編號矩陣,其內容 儲存所有的物項編號在各候選物項集合中第1 個位址物項的開始及結束位址,
所以物項編號1~11 不存在於候選物項集合中第 1 個位址的物項中,其開始與結 束位址為0,物項 12 在各候選物項集合中第 1 個位址的物項的開始及結束位址 分別為1、5;物項 13 在各候選物項集合中第 1 個位址的物項的開始及結束位址 分別為6、9,物項 14 在各候選物項集合中第 1 個位址的物項的開始及結束位址 分別為10、12,物項 15 在各候選物項集合中第 1 個物項的開始及結束位址分別 為13、14,物項 16 在各候選物項集合中第 1 個位址的物項的開始及結束位址為 15、15,物項編號 17 不存在於候選物項集合的第 1 個位址的物項中,開始與結
束位址為0。
當建立完索引對映矩陣之後,接著SIT 使用排序索引的方法找尋高頻物項集合 如圖3.8
1,8,9,12,14,15,16,17 5
7,11,13,15,16 4
4,6,10,13,17 3
8,10,12,13,14,16,17 2
1,3,5,12,14,15,16,17 1
Items Tid
{16,17}
{15,17}
{15,16}
{14,17}
{14,16}
{14,15}
{13,17}
{13,16}
{13,15}
{13,14}
{12,17}
{12,16}
{12,15 } {12,14}
{12,13}
Itemset
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Address
0 0 17
15 15 16
14 13 15
12 10 14
9 6 13
5 1 12
0 0 11
0 0 10
0 0 9
0 0 8
0 0 7
0 0 6
0 0 5
0 0 4
0 0 3
0 0 2
0 0 1
End Start Item
0 17
1 16
1+2=3 15
1+2+3=6 14
1+1+2+3+4=11 12
0 5
0 3
0 1
Count Item
圖 3.8 使用 SIT 的方法,找尋高頻物項集合
使用SIT 方法找尋是以交易下的各物項為主,分別找尋以該物項為首的候選物 項集合,利用索引對映矩陣直接對映,該物項是否存在,如存在,根據索引對 映矩陣的開始與結束位址來直接比對,不必將所有的候選物項集合逐一比對,
至於交易物項的開始位址也是自發現的位址開始比對,不必重頭比對。
依圖3.7 資料來說明,要確認左邊候選物項集合是否為 Tid=1 物項集合的子集 合,其步驟如下
1. Tid=1 的第 1~3 位址的物項 1、3、5,直接對映於索引對映矩陣,發現其開始
與結束位址為0,所以不必比對。2. Tid=1 的第 4 個位址物項 12,直接對映至索引對映矩陣,發現其開始與結束
位址分別為1、5,得知候選物項集合的第 1~5 位址的集合為{12,13}、{12,14}、{12,15}、{12,16}、{12,17}需要比對。
3. 比對步驟 2 所得的 5 個候選物項集合,已經確認候選物項集合的第 1 個位址
12 存在於 Tid=1,所以可直接至這 5 個候選物項集合的第 2 個位址開始比對 物項是否存在於Tid=1 物項集合內,至於 Tid=1 開始比對的位址則在物項 12 之後的位址,其位址為5。4. 開始比對候選物項集合{12,13},候選物項集合第 2 個位址為物項 13,Tid=1
位址為5 的物項為 14,只比對了 1 次,候選物項集合{12,13}不是 Tid=1 的子 集合5. 比對候選物項集合{12,14},候選物項集合第 2 個位址為物項 14,Tid=1 位址
為5 的物項為 14,只比對了 1 次,候選物項集合{12,14}是 Tid=1 的子集合6. 依步驟 4~5 的方法比對了{12,15}、{12,16}、{12,17}分別比對了 2、3、4,所
以共比較了1+1+2+3+4=11 確認以物項 12 為第 1 個位址的候選物項集合比對 了12 次,就能確認這些候選物項集合是否為 Tid=1 的子集合。
7. 依步驟 1~6 的方法比對 Tid=1 的第 5~8 位址的物項 14、15、16、17,以這些
物項為第1 個位址的候選物項集合分別比對了 6、3、1、0 次,就能確認這些 候選物項集合是否為Tid=1 的子集合。從以上的步驟得知,至少必須比對了11+6+3+1=21 次就能確認候選物項集合是 否為Tid=1 的物項集合的子集合。故依 SIT 方法改良 Aprioi 的效益是能有效的 減少比對次數,所以SIT 的方法排序,依據物項出現於資料庫的次數越高的放 在越後面,則越有效益,剛好與傳統的Apriori 排序順序相反。