一、頻繁項集
若I是一個項集,I的支持度指包含I的購物籃數目,若I的支持度>=S,則稱I是頻繁項集。其中,S是支持度閾值。
1、應用
- “尿布和啤酒”
- 關聯概念:尋找多篇文章中共同的詞匯集合。項->詞,購物籃->文檔
- 文檔抄襲:尋找多個購物籃中共同出現的項對,同一個項對出現在越多的購物籃中,其相似度越高。項->文檔,購物籃->句子
2、關聯規則
I->j 如果I中所有項出現在某個購物籃的話,那么j“有可能”也出現在這一購物籃中。
I->j的可行度:集合I與{j}補集的支持度與I的支持度的比值。
在實際應用中,購物籃規模和頻繁項集太大,故任何算法的主要開銷時間都集中在將購物籃從磁盤讀入內存這個過程。
- 對n個項集組成的購物籃而言,大小為k的所有子集的生成時間約為n(k)/k!(最終該時間會超過數據從磁盤傳輸的時間).
- 通常只需要較小的頻繁項集,所以k永遠不會超過2或者3。
- 當確實需要一個更大的k的項集時,往往可以去掉每個購物籃中不太可能會成為頻繁項的那些項,從而保證k增長的同時n卻下降。
3、項集計數中內存使用
若項集是字符串或其他,可以以從1到n的連續整數來表示,整數碼與項一一對應:用一個哈希表將項的表現形式換成整數。即每次在文件中看到一個項,就對它進行哈希。若該項存在,則可以獲得其整數碼;若不存在,就將下一個可用的數字賦給它,並將項極其整數碼放入哈希表中。
4、三角矩陣方法
假設i<j,且僅使用二維數組a中的元素a[i,j]來存放計數結果,這種策略會使數組的一半元素都沒有用,故使用一個一維的三角數組。此時,{i,j}對應元素a[k],其中1<=i<=j<=n,k=(i-1)(n-i/2)+j-i.
5、三元組方法
將計數值以三元組[i,j,c]的方式來存儲,即{i,j}對的計數值為c(其中i<j).可以采用類似哈希表的數據結構,其中i和j是搜索鍵值,以此確定對於給定的i和j是否存在對應的三元組。
- 若某個項對的計數值為0,則三元組方式不一定需要存儲某個值。
- 三元組方式對每個出現在購物籃中的項對都會存儲三個而不是一個整數。
如果在所有可能出現的項對中至少有1/3出現在購物籃的情況下,三角矩陣方式更優;而若出現的比例顯著小於1/3,就要考慮使用三元組方式。
6、項集的單調性
- 如果項集I是頻繁的,那么其所有的子集都是頻繁的;
- 如果一個項集的超集不再是頻繁的,則稱該項集最大(這里的最大頻繁項集不是指所含項個數最多的頻繁項集,不要弄錯了,最大頻繁項集不是唯一的,可能有很多個)。
- 最大頻繁項集的所有子集都是頻繁的;
- 除最大頻繁項集的子集之外,其它集合都是不頻繁的。
二、A-Priori算法
A-Priori相關算法:避免對所有的三元組或更大的集合計數,集中考慮計算頻繁二元組的算法。A-Priori算法通過對數據做兩遍掃描來減少必須計數的項對數目。
1、第一遍掃描
- 建立兩張表:第一張表將項的名稱轉換為1到n之間的整數;另一張表則是一個計數數組,第i個數組元素是上述第i個項的出現次數,初始值為0.
- 讀取購物籃時,檢查購物籃中的每個項並將其名稱轉換為一個整數,將改整數作為計數數組的下標找到對應的數組元素,最后,對該數組元素加1.
2、兩遍掃描之間的處理
只給頻繁項重新編號,編號范圍是1到m.此時的表格是一個下標為1到n的數組,如果第i項不頻繁,則對應的第i個數組元素為0,否則為1到m之間一個唯一的整數。該表格稱為頻繁項集表格。
3、第二遍掃描
在第二遍掃描之后,對兩個頻繁項組成的所有項對計數。
- 第二遍掃描所需的空間是2m*m字節。
- 如果要使用一個大小正確的三角矩陣,那要注意只對頻繁項進行重新編號處理。
第二遍掃描具體細節如下:
1、對每個購物籃,在頻繁項集表中檢查哪些項是頻繁的;
2、通過一個雙重循環生成所有的頻繁項對;
3、對某個頻繁項對,在存儲計數值的數據結構中相應的計數值上加1;
最后,在第二遍掃描結束時,檢查計數值結構以確定哪些項對是頻繁項對。
三、所有頻繁項集上的A-Priori算法
從某個集合大小k到下一個大小k+1的轉移模式:
對於每個集合大小k,存在兩個頻繁項集的集合:
- Ck大小為k的候選項集集合,即必須要通過計算來確定到底是否真正頻繁的項集組成的集合。
- Lk大小為k的真正頻繁的項集集合。
