论文笔记:Integrating Classification and Association Rule Mining (即,CBA算法介绍)
1998 KDD
0 摘要
????????分類規則挖掘旨在發現數據庫中的一小組規則,形成一個準確的分類器。 關聯規則挖掘發現數據庫中存在的所有滿足最小支持度和最小置信度約束的規則。 對于關聯規則挖掘,發現的目標不是預先確定的,而對于分類規則挖掘,則只有一個預先確定的目標。
????????在本文中,我們建議整合這兩種挖掘技術。 集成是通過專注于挖掘關聯規則的特殊子集來完成的,稱為類關聯規則 (CAR)。 還給出了一種基于發現的 CAR 集構建分類器的有效算法。
???????? 實驗結果表明,以這種方式構建的分類器通常比最先進的分類系統 C4.5 產生的分類器更準確。 此外,這種集成有助于解決當前分類系統中存在的許多問題。
1 introduction
????????集成是通過關注一個特殊的關聯規則子集來完成的,該子集的右側僅限于分類類屬性。 我們將此規則子集稱為類關聯規則 (CAR)。
????????現有的關聯規則挖掘算法(Agrawal 和 Srikant 1994)適用于挖掘滿足最小支持度和最小置信度約束的所有 CAR。
????????關聯規則(Association Rules)筆記_UQI-LIUWJ的博客-CSDN博客
????????這種適應是必要的,主要有兩個原因:
? ? ? ? 1)在關聯規則(Apriori算法中),并沒有很多的關聯(associations)。但是在分類問題中,我們有很多的關聯數據。如果不使用CAR的話,挖掘所有的關聯規則,會導致計算量爆炸。
? ? ? ? 2)分類數據集通常包含許多連續(或數字)屬性。 挖掘具有連續屬性的關聯規則仍然是一個主要的研究問題。 我們的適應涉及基于分類預定類目標離散化連續屬性。 為此,有許多很好的離散化算法可以使用
我們提出的CAR數據挖掘包括了三步:
1)離散化連續的屬性(如果需要的話)
2)生成所有的類關聯規則
3)基于CAR,建立一個分類器
2 問題定義
????????我們提出的框架假設數據集是一個正常的關系表,它由 l 個不同的屬性描述的 N 個案例組成。 這 N 個案例已被分類為 q 個已知類別。 屬性可以是分類(或離散)或連續(或數字)屬性。
????????在這項工作中,我們統一對待所有屬性。 對于分類屬性,所有可能的值都映射到一組連續的正整數。 對于連續屬性,其取值范圍被離散化為區間,區間也映射為連續的正整數。
????????通過這些映射,我們可以將數據案例視為一組(屬性、整數-值)對和一個類標簽。 我們稱每個(屬性,整數值)對為一個項目item。?
? ? ? ?
????????令D是數據集,I是數據集里面所有的條目,Y是類標簽的集合。
? ? ? ? 當時,我們稱一個一個數據案例d∈D 包含 條目的一個子集
? ? ? ?
???????? 一個類關聯規則(CAR)是一個如下格式的關聯規則,其中
? ? ? ?如果在D中包含?X的數據案例中,c%的案例被標記為類別y,那么我們稱 D中的規則X->y有著c的置信度(confidence)。
? ? ? ? 如果在D中,s%的案例包含X,同時被標記為類別y,那么那么我們稱 D中的規則X->y有著s的支持度(support)。
? ? ? ? 我們的目標是:
(1)生成CAR的完整集合,這個集合滿足最小支持度(minsup)以及最小置信度(minconf)
(2)建立一個基于CAR的分類器
????????
?3 模型整體框架
????????整體的算法被稱為CBA算法(Classification Based on Associations)。它包含了兩個部分:一個規則生成器(CBA-RG),這個基于Apriori 算法,來發掘關聯規則;一個分類器(CBA-CB)
3.1 CBA-RG的基本概念
? ? ? ? CBA-RG的基本操作是找到所有超過最小支持度的規則項(ruleitem)。
? ? ? ? 一個規則項是一個如下的結構<condset,y>,其中condset是一個items集合,y∈Y是一個類別標簽。
? ? ? ? condset的支持度計數(support count)是D中包含condset的數量?!居涀鱟ondsupCount】
? ? ? ? 規則項的支持度計數(是D中包含condset,同時是被標記為y的數量。【記作rulesupCount】
? ? ? ? 規則項的支持度是
? ? ? ? 規則項的置信度是
滿足最小支持度的規則項被稱為頻繁規則項(frequent ruleitem);否則則是不平凡規則項。
?舉個例子,對于如下的規則項:
(表示屬性A為1,屬性B為1的時候,類別是1)
????????如果condset的支持度計數是3,規則項的支持度計數是2,|D|=10.
? ? ? ? 那么規則項的支持度是20%,置信度是67%
????????對于有著相同condset的規則項,有著最高置信度的規則項被選擇為可能規則(possible rule,PR),我們就用這個代表ruleitems
? ? ? ? ?如果不止一個ruleitem有著相同的最高置信度,那么我們隨機選擇一個ruleitem作為PR
? ? ? ? 滿足最小置信的規則,我們稱之為精準
? ? ? ? 最終的CAR會包含所有又頻繁又精準的PR(即同時滿足最小置信度+最小支持度)
3.2 CBA-RG算法
????????CBA-RG 算法通過對數據進行多次傳遞來生成所有頻繁規則項。
????????在第一遍中,它計算單個規則項的支持度并確定它是否是頻繁的。
????????在隨后的每一次傳遞中,它都從在前一次傳遞中發現頻繁的規則項的種子集開始。
???????? 它使用這個種子集來生成新的可能頻繁出現的規則項,稱為候選規則項。 這些候選規則項的實際支持度是在數據傳遞期間計算的。
????????在傳遞結束時,它確定哪些候選規則項實際上是頻繁的。 從這組頻繁規則項中,它生成規則 (CAR)。
? ? ? ? 【有點類似于Aprori】
? ? ? ? 令k-ruleitem表示一個ruleitem,其中它的condset有k個條目
? ? ? ? 令Fk表示頻繁k-ruleitem的集合。其中的每個元素又是如下的格式:
? ? ? ? 令Ck是候選k-ruleitems的集合
? ? ? ? 于是CBA-RG的算法如下:
3.2.1 舉例說明(非論文內容)
?源數據集:
第一步:選取所有的1-ruleitems,然后把支持度小于minsup的去掉
這里枚舉所有的屬性+l類別對,然后一一篩選
?表示 屬性A為e的一共有4個,然后屬性A為e的情況下,類別C為y的一共有3個
上面的這些時已經把支持度小的去掉了(比如<({(A,e)},4),((C,n),1)>
第二步
先找所有的候選集,(將兩個分到的類一樣的k-1 ruleitems 合并)
?然后對于這些候選集,計算他們的支持度,挑選出比最小支持度大的那些項集
最后
合并第一pass和第二pass得到的頻繁項集
?
3.3.2?剪枝CAR舉例:
去掉那些置信度比最小置信度還小的項集
?3.3 CBA-CB
????????本節介紹使用 CAR(或 prCAR)構建分類器的 CBA-CB 算法。 要從整個規則集中生成最佳分類器,將涉及在訓練數據上評估其所有可能的子集,并選擇具有正確規則序列的子集,該子集給出的錯誤數最少。 有2^m這樣的子集,其中m是規則的數量,可以超過10,000,更不用說不同的規則序列了。
???????? 這顯然是不可行的。 我們提出的算法是一種啟發式算法。 但是,與 C4.5 構建的分類器相比,它構建的分類器性能非常好。 在介紹算法之前,讓我們定義生成規則的排序規則。 這用于為我們的分類器選擇規則。
? ? ? ? 給定兩個規則,的條件是:
? ? ? ? 1)ri的置信度大于rj的置信度
? ? ? ? 2)如果置信度一樣的話,ri的支持度大于rj的支持度
? ? ? ? 3)如果都一樣的話,ri比rj先生成出來
????????令R是一套生成的規則(剪枝過的或者沒有剪枝的),D是訓練數據。算法的基本思想是在R中選擇一組高優先級規則來覆蓋D。 分類器的格式如下:
?????????
????????
????????在對未見案例進行分類時,滿足該案例的第一個規則將對其進行分類。 如果沒有適用于這種情況的規則,它將采用默認類。 用于構建此類分類器的算法(稱為 M1)的原始版本包含三個步驟:? 【M1適合小的數據集】
?
????????該算法滿足兩個主要條件:
????????條件 1. 每個訓練案例都被覆蓋該案例的規則中具有最高優先級的規則覆蓋。 這是因為在第 1 行中完成了排序。
????????條件 2. C 中的每條規則在選擇時都正確分類了至少一個剩余的訓練案例。 這是由于第 5-7 行
?????????這種算法很簡單,但效率低下,尤其是當數據庫不常駐主存時,因為它需要多次遍歷數據庫。 ?
舉例說明: (源論文沒有)
?1 先排序 rule的順序是 5 1 3 6 2 4
?2 按照rule的順序,進行CBA,維護一個這樣的表格
| 當前考慮規則號 | 當前規則涉及的rule_item (即 temp) | 這些rule_item里面分類正確的數量 | 這些rule_item里面分類錯誤的數量 | 剩余item的默認分類(取多的那個) | 在當前分類方式下,總的錯誤數 | 剩余未考慮的rule_item |
| 5 | (7) (8) | 2 | 0 | y | 3【(6) (9)(10)錯誤】 | (1)(2)(3)(4)(5)(6)(9)(10) |
| 1 | (1)(2)(3)(9) | 3 | 1 【(9)錯誤】 | y | 3【(6)(9)(10)錯誤】 | (4)(5)(6)(10) |
| n | 3 【(4)(5)(9)錯誤】 | (4)(5)(6)(10) | ||||
| 上面無論默認值是y還是n,總錯誤數量都是一樣的,所以隨機選擇一個,作為default_class | ||||||
| 3 | / | / | / | / | / | (4)(5)(6)(10) |
| 6 | (4)(5)(6) | 2 | 1 【(6)錯誤】 | n | 2 【(6)(9)錯誤】 | (10) |
| 2 | / | / | / | / | / | (10) |
| 4 | (10) | 0 | 1 【10錯誤】 | / | 3 【(6)(9)(10)錯誤】 | / |
?我們最小的錯誤數是在考慮(6)的時候,所以最終的分類器由規則(5)(1)(6)組成
????????下面,我們展示了算法的改進版本(稱為 M2),其中只對 D 進行了略多于一次的傳遞。關鍵點是,不是對每個規則的剩余數據(在 M1 中)進行一次傳遞,我們 現在在 R 中找到覆蓋每種情況的最佳規則。 M2由三個階段組成 【M2適合大的數據集】
階段1:? ? ??
? ?對于D中的每一個條目d,我們找到正確分類d的最高優先級的規則cRule和錯誤分類d的最高優先級的規則wRule。
? ? ? ? 如果那么條目d將是由cRule覆蓋。
? ? ? ? 如果?那么可能就會更復雜一點,因為我們不知道wRule和cRule中間的那一個會最終覆蓋d?
? ? ? ? 為了決定這個,對于每一個的d,我們維護一個數據結構:?<dID, y, cRule, wRule>? 。其中dID是d的id,y是d的類別。
? ? ? ? 令A表示<dID, y, cRule, wRule>? 的集合
? ? ? ? U是所有cRules的集合
? ? ? ? Q是所有滿足的cRules的集合
?舉例
還是這個例子
與M1不同的是,我們需要不需要按照rule遍歷,而是按照rule_item遍歷。
?1 先排序 rule的順序是 5 1 3 6 2 4
2 然后也維護一張表
| 當前rule_item (A,B,C) | 可以分類當前rule_item的規則(按照從大到小的順序) | 正確分類當前rule_item的、擁有最高優先級的規則cRule | 錯誤分類當前rule_item的、擁有最高優先級的規則wRule | U,所有cRules的集合 | Q, 滿足的cRules的集合 | A,不滿足的部分組成的信息 |
| (e,p,y) 1 | 1,3 | 1 | / | 1?? | 1? | / |
| (e,p,y) 2 | 1,3 | 1 | / | 1?? | 1? | / |
| (e,q,y) 3 | 1,4 | 1 | / | 1 | 1 | / |
| (g,q,y) 4 | 6,2,4 | 6 | 2 | 1,6 | 1,6 | / |
| (g,q,y) 5 | 6,2,4 | 6 | 2 | 1,6 | 1,6 | / |
| (g,q,n) 6 | 6,2,4 | 2 | 6 | 1,6,2 | 1,6 | (6,n,2,6) |
| (g,w,n) 7 | 5,2 | 5 | / | 1,6,2,5 | 1,6,5 | (6,n,2,6) |
| (g,w,n) 8? | 5,2 | 5 | / | 1,6,2,5 | 1,6,5 | (6,n,2,6) |
| (e,p,n) 9? | 1,3 | / | 1 | 1,6,2,5 | 1,6,5 | (6,n,2,6), (9,n,null,1) |
| (f,q,n) 10 | 4 | / | 4 | 1,6,2,5 | 1,6,5 | (6,n,2,6), (9,n,null,1), (10,n,null,4) |
?步驟2
舉例(接著stage1)
A中有:(6,n,2,6),(9,n,null,1),(10,n,null,4)
U中有:1,6,2,5?
首先看(6,n,2,6):【(g,q,n)】
? ? ? ???wRule = 6 is marked?
????????????????A. 2.classCasesCovered[n] -- = 0 ????????????????B. 6.classCasesCovered[n] ++ = 1 ? ? ? ? (相當于使用wRule代替cRule 分類rule_item(6))然后看(9,n,null,1):【(e,p,n)】
????????wRule = 1 is marked
????????????????A. 1.classCasesCovered[n] ++ = 1 ? ? ? ? ? ? ? ? (相當于原本沒有規則可以覆蓋rule_item(9),現在用規則覆蓋之) 最后看(10,n,null,4):【(f,q,n)】 wRule = 4 is not marked ????????wSet = {1,6,2,5}? (所有錯誤分類rule_item(10),且優先級比NULL大的U中的規則)? 這幾個的.replace() 為<Null,10,n>? ? ? 返回的Q為1,6,5,4?舉例:(接著stage 2)
Classes: 5 Y + 5 N ruleErrors = 0 Q = 5,1,6,4 (排序) 首先看規則5: ? ? ? ? 不進入循環 ? ? ? ? ruleErrors=0 ? ? ? ? 此時的classDistr 為 5Y+3N (5已經成功分類了兩個n【7,8】) ? ? ? ? defaultClass=Y ????????defaultError=3 ? ? ? ? totalErrors=3 ? ? ? ? C=<5,Y,3> 然后看規則1: 不進入循環 ????????ruleErrors = 1 ????????classDistr = 2 Y + 2?N (1成功分類三個Y 【1,2,3】,錯誤一個【9】) ? ? ? ? defaultClass=N or Y ? ? ? ? defaultErrors=2 ? ? ? ? totalErrirs=4 ? ? ? ? C=<5,Y,3>,<1,N,3> 然后是規則6: 不進入循環 ruleErrors=2 (規則1的一個+規則6的一個) classDistr=N defaultClass=N defaultError=0 totalErrors=2 C=<5,Y,3>,<1,N,3>,<6,N,2> 最后是規則4: 不進入循環 ruleErrors=3(規則1的一個,規則6的一個,規則4的一個) / totalErrors=3 C=<5,Y,3>,<1,N,3>,<6,N,2>,<4,/,3> 所以最后的是<5,Y,3>,<1,N,3>,<6,N,2>,和M1的一樣?4 實驗部分
?在實驗中,最小置信度被設置為50%
而對于最小支持度,這是一個很復雜的設定,最小支持度對于分類器的質量有著很強的作用。如果最小支持度被設置的很高,那么有些可取的揮著因為沒有達到最小支持度的限制而被丟棄,這會導致CAR效果不佳。在我們的實驗中,我們設置最小支持度為1%
與此同時,我們也設定了總候選規則的數量上限,80000。但是,在后面我們進行實驗的26個數據集中,16個無法在80000的限制內完成,這說明分類數據通常有著很大數量的關聯
?
?我們說一下表格某幾列的含義:
第二列:它顯示了使用原始數據集(即沒有離散化)進行的十次完整的 10 倍交叉驗證中 C4.5rules 的平均錯誤率。 我們沒有展示 C4.5 樹的詳細結果,因為它在 26 個數據集上的平均錯誤率更高
第三列:它顯示了離散化后 C4.5 規則的平均錯誤率。 此處不使用 C4.5 樹的錯誤率,因為其平均錯誤率較高。
第四列:它給出了使用我們的算法構建的分類器的平均錯誤率,在十次交叉驗證中 minsup = 1%,同時使用 CAR 和不頻繁規則(滿足 minconf 的,但是因為不滿足最小支持度而被丟棄的規則)。 我們使用不頻繁的規則是因為我們想看看它們是否影響分類精度。 第一個值是使用規則生成時未剪枝的規則構建的分類器的錯誤率,第二個值是規則生成時使用未剪枝的規則構建的分類器的錯誤率。
?第五列:它顯示了在我們的分類器構建中僅使用 CAR 的錯誤率,在規則生成中沒有或有剪枝(即 prCAR)。
????????從這 26 個數據集中可以清楚地看出,CBA 產生了更準確的分類器。 平均而言,錯誤率從 C4.5 規則(無離散化)的 16.7% 降低到 CBA 的 15.6-15.8%。 此外,我們的系統在 26 個數據集中的 16 個數據集上優于 C4.5 規則。 我們還觀察到,在沒有或有剪枝的情況下,最終分類器的準確性幾乎相同。 因此,那些 prCAR(剪枝后)足以構建準確的分類器。 請注意,與離散化后的 C4.5 規則的錯誤率 (17.1) 相比,CBA 更加優越。
第六列:它給出了每次交叉驗證中由算法 CBA-RG 生成的規則的平均數量。 第一個值是 CAR 的數量。 第二個值是 prCAR 的數量(修剪后)。 我們看到修剪后剩下的規則數量要少得多。
第七列:它給出了在每次交叉驗證中生成規則所需的平均時間。 第一個值是不進行修剪時所用的時間。 第二個值是使用修剪時所用的時間。 通過修剪,算法 CBA-RG 的運行速度只會稍微慢一些。
第八列:它顯示了僅使用 prCAR 構建每個分類器所需的平均時間。 第一個值是方法1(M1)的運行時間,第二個值是方法2(M2)的運行時間。 我們看到 M2 比 M1 更有效率。
第九列:它給出了 CBA-CB 使用 prCAR 構建的分類器中規則的平均數量。 我們的分類器中的規則通常比 C4.5 生成的規則多(此處未顯示)。 但這不是問題,因為這些規則僅用于對未來案例進行分類。 可以在 CAR(或 prCAR)中找到易于理解和有用的規則。 這些規則可能會或可能不會由 C4.5 生成,因為 C4.5 不會生成所有規則。
下面,我們總結了另外兩個重要的結果。 ·
????????雖然我們無法使用 80,000 的限制在 26 個數據集中的 16 個中找到所有規則,但使用發現的規則構建的分類器已經非常準確。 事實上,當 26 個數據集中的限制達到 60,000 時(我們已經嘗試了許多不同的限制),生成的分類器的準確性開始穩定。 繼續進行只會生成具有許多難以理解和難以使用的條件的規則。 ·
???????? 我們還使用磁盤而不是主內存中的數據集運行CBA算法,并將所有數據集的案例數增加了32倍(最大數據集達到160,000個案例)。
總結
以上是生活随笔為你收集整理的论文笔记:Integrating Classification and Association Rule Mining (即,CBA算法介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习笔记:FLOPs
- 下一篇: 文巾解题455. 分发饼干