weka apriori算法詳解以及參數詳解

1、Apriori算法參數含義

本次共進行了9組實驗,使用了weka安裝目錄data文件夾下的contact-lenses.arff數據。算法

 

 

ToolsàArffViewer,打開contact-lenses,能夠看到實驗數據contact-lenses共有24條記錄,5個屬性值。具體內容以下:ide

 

weka數據集格式arff測試

  arff標準數據集簡介ui

  weka的數據文件後綴爲arff(Attribute-Relation File Format,即屬性關係文件格式),arff文件分爲註釋、關係名、屬性名、數據域幾大部分,註釋用百分號開頭%,關係名用@relation申明,屬性用@attribute什麼,數據域用@data開頭,看這個示例數據集(安裝weka後,可在weka的安裝目錄/data下找到weather.numeric.arff):  spa

複製代碼

%weather dataset
@relation weather

@attribute outlook {sunny, overcast, rainy}
@attribute temperature numeric
@attribute humidity numeric
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}

@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no

複製代碼

  當數據是數值型,在屬性名的後面加numeric,若是是離散值(枚舉值),就用一個大括號將值域列出來。@data下一行後爲數據記錄,數據爲矩陣形式,即每個的數據元素個數相等,如有缺失值,就用問號?表示。orm

  arff稀疏數據集   排序

  咱們作關聯規則挖掘,好比購物籃分析,咱們的購物清單數據確定是至關稀疏的,超市的商品種類有上10000種,而每一個人買東西只會買幾種商品,這樣若是用矩陣形式表示數據顯然浪費了不少的存儲空間,咱們須要用稀疏數據表示,看咱們的購物清單示例(basket.txt):  索引

複製代碼

freshmeat dairy confectionery
freshmeat    confectionery
cannedveg    frozenmeal    beer    fish
dairy    wine
freshmeat    wine    fish
fruitveg    softdrink
beer
fruitveg    frozenmeal
fruitveg    fish
fruitveg    freshmeat    dairy    cannedveg    wine    fish
fruitveg    fish
dairy    cannedmeat    frozenmeal    fish

複製代碼

   數據集的每一行表示一個去重後的購物清單,進行關聯規則挖掘時,咱們能夠先把商品名字映射爲id號,挖掘的過程只有id號就是了,到規則挖掘出來以後再轉回商品名就是了,retail.txt是一個轉化爲id號的零售數據集,數據集的前面幾行以下:  ip

複製代碼

0    1    2    3    4    5    6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28   
30    31    32
33    34    35
36    37    38    39    40    41    42    43    44    45    46
38    39    47    48
38    39    48    49    50    51    52    53    54    55    56    57    58
32    41    59    60    61    62
3    39    48
63    64    65    66    67    68
32    69

複製代碼

   這個數據集的商品有16469個,一個購物的商品數目遠少於商品中數目,所以要用稀疏數據表,weka支持稀疏數據表示,但我在運用apriori算法時有問題,先看一下weka的稀疏數據要求:稀疏數據和標準數據的其餘部分都同樣,惟一不一樣就是@data後的數據記錄,示例以下(basket.arff): ci

複製代碼

@relation 'basket'
@attribute fruitveg {F, T}
@attribute freshmeat {F, T}
@attribute dairy {F, T}
@attribute cannedveg {F, T}
@attribute cannedmeat {F, T}
@attribute frozenmeal {F, T}
@attribute beer {F, T}
@attribute wine {F, T}
@attribute softdrink {F, T}
@attribute fish {F, T}
@attribute confectionery {F, T}
@data
{1 T, 2 T, 10 T}
{1 T, 10 T}
{3 T, 5 T, 6 T, 9 T}
{2 T, 7 T}
{1 T, 7 T, 9 T}
{0 T, 8 T}
{6 T}
{0 T, 5 T}
{0 T, 9 T}
{0 T, 1 T, 2 T, 3 T, 7 T, 9 T}
{0 T, 9 T}
{2 T, 4 T, 5 T, 9 T}

複製代碼

   能夠看到

freshmeat dairy confectionery
freshmeat    confectionery

   表示爲了:

{1 T, 2 T, 10 T}
{1 T, 10 T

  稀疏數據的表示格式爲:{<屬性列號><空格><值>,...,<屬性列號><空格><值>},注意每條記錄要用大括號,屬性列號不是id號,屬性列號是從0開始的,即第一個@attribute 後面的屬性是第0個屬性,T表示數據存在。

規則挖取

  咱們先用標準數據集normalBasket.arff[1]試一下,weka的apriori算法和FPGrowth算法。

  一、安裝好weka後,打開選擇Explorer

  二、打開文件

  

  三、選擇關聯規則挖掘,選擇算法

  

  四、設置參數

 

  參數主要是選擇支持度(lowerBoundMinSupport),規則評價機制metriType(見上一篇)及對應的最小值,參數設置說明以下[2]:

複製代碼

1.        car 若是設爲真,則會挖掘類關聯規則而不是全局關聯規則。
2.        classindex 類屬性索引。若是設置爲-1,最後的屬性被當作類屬性。
3.        delta 以此數值爲迭代遞減單位。不斷減少支持度直至達到最小支持度或產生了知足數量要求的規則。
4.        lowerBoundMinSupport 最小支持度下界。
5.        metricType 度量類型。設置對規則進行排序的度量依據。能夠是:置信度(類關聯規則只能用置信度挖掘),提高度(lift),槓桿率(leverage),確信度(conviction)。
在 Weka中設置了幾個相似置信度(confidence)的度量來衡量規則的關聯程度,它們分別是:
a)        Lift : P(A,B)/(P(A)P(B)) Lift=1時表示A和B獨立。這個數越大(>1),越代表A和B存在於一個購物籃中不是偶然現象,有較強的關聯度.
b)        Leverage :P(A,B)-P(A)P(B)Leverage=0時A和B獨立,Leverage越大A和B的關係越密切
c)        Conviction:P(A)P(!B)/P(A,!B) (!B表示B沒有發生) Conviction也是用來衡量A和B的獨立性。從它和lift的關係(對B取反,代入Lift公式後求倒數)能夠看出,這個值越大, A、B越關聯。
6.        minMtric 度量的最小值。
7.        numRules 要發現的規則數。
8.        outputItemSets 若是設置爲真,會在結果中輸出項集。
9.        removeAllMissingCols 移除所有爲缺省值的列。

10.    significanceLevel 重要程度。重要性測試(僅用於置信度)。

11.    upperBoundMinSupport 最小支持度上界。 從這個值開始迭代減少最小支持度。

12.    verbose 若是設置爲真,則算法會以冗餘模式運行。

複製代碼

 

設置好參數後點擊start運行能夠看到Apriori的運行結果:

  FPGrowth運行的結果是同樣的:

 

結合實驗結果闡釋下列12個參數的含義

1.        car 若是設爲真,則會挖掘類關聯規則而不是全局關聯規則。

2.        classindex 類屬性索引。若是設置爲-1,最後的屬性被當作類屬性。

3.        delta 以此數值爲迭代遞減單位。不斷減少支持度直至達到最小支持度或產生了知足數量要求的規則。

4.        lowerBoundMinSupport 最小支持度下界。

5.        metricType 度量類型。設置對規則進行排序的度量依據。能夠是:置信度(類關聯規則只能用置信度挖掘),提高度(lift),槓桿率(leverage),確信度(conviction)。

在 Weka中設置了幾個相似置信度(confidence)的度量來衡量規則的關聯程度,它們分別是:

a)        Lift : P(A,B)/(P(A)P(B)) Lift=1時表示A和B獨立。這個數越大(>1),越代表A和B存在於一個購物籃中不是偶然現象,有較強的關聯度.

b)        Leverage :P(A,B)-P(A)P(B)

Leverage=0時A和B獨立,Leverage越大A和B的關係越密切

c)        Conviction:P(A)P(!B)/P(A,!B) (!B表示B沒有發生) Conviction也是用來衡量A和B的獨立性。從它和lift的關係(對B取反,代入Lift公式後求倒數)能夠看出,這個值越大, A、B越關聯。

6.        minMtric 度量的最小值。

7.        numRules 要發現的規則數。

8.        outputItemSets 若是設置爲真,會在結果中輸出項集。

9.        removeAllMissingCols 移除所有爲缺省值的列。

10.    significanceLevel 重要程度。重要性測試(僅用於置信度)。

11.    upperBoundMinSupport 最小支持度上界。 從這個值開始迭代減少最小支持度。

12.    verbose 若是設置爲真,則算法會以冗餘模式運行。

 

 

2、實驗結果及分析

1. 以其中一組實驗爲例作詳細分析

具體參數設置以下圖:

 

 

完整的實驗結果輸出及具體分析

=== Run information ===     // 實驗運行信息

 

Scheme:       weka.associations.Apriori -I -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.5 -S -1.0 -c -1

Relation:     contact-lenses       //數據的名稱 contact-lenses

Instances:    24         //數據的記錄數 24

Attributes:   5         //屬性數目 5以及各屬性名稱

              age

              spectacle-prescrip

              astigmatism

              tear-prod-rate

              contact-lenses

=== Associator model (full training set) ===

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  scheme -所選的關聯規則挖掘方案: Apriori算法

%  算法的參數設置:-I -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.5 -S -1.0 -c -1 ;

%  各參數依次表示:

%  I - 輸出項集,若設爲false則該值缺省;

%  N 10 - 規則數爲10;

%  T 0 – 度量單位選爲置信度,(T1-提高度,T2槓桿率,T3確信度);

%  C 0.9 – 度量的最小值爲0.9;

%  D 0.05 - 遞減迭代值爲0.05;

%  U 1.0 - 最小支持度上界爲1.0;

%  M 0.5 - 最小支持度下屆設爲0.5;

%  S -1.0 - 重要程度爲-1.0;

%  c -1 - 類索引爲-1輸出項集設爲真

%  (因爲car, removeAllMissingCols, verbose都保持爲默認值False,所以在結果的參數設置爲缺省,若設爲True,則會在結果的參數設置信息中分別表示爲A, R,V)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

 

Apriori  // Apriori算法運行結果

=======

 

Minimum support: 0.5 (12 instances)  //最小支持度0.5,即最少須要12個實例

Minimum metric <confidence>: 0.9   //最小度量<置信度>: 0.9

Number of cycles performed: 10    //進行了10輪搜索

 

Generated sets of large itemsets:     //生成的頻繁項集

 

Size of set of large itemsets L(1): 7     //頻繁1項集:7個

 

Large Itemsets L(1):      //頻繁1項集(outputItemSets設爲True, 所以下面會具體列出)

spectacle-prescrip=myope 12

spectacle-prescrip=hypermetrope 12

astigmatism=no 12

astigmatism=yes 12

tear-prod-rate=reduced 12

tear-prod-rate=normal 12

contact-lenses=none 15

%%%%%%%%%%%%%%%%%%%%%%%%

在上面所示數據界面中,分別點擊標籤spectacle-prescrip,astigmatism,tear-prod-rate和contact-lenses,該列的值會自動進行分類排序,能夠很方便的對上面結果進行。點擊age標籤,其值按pre-presbiopic、presbiopic和young分類排序,能夠看到各屬性值的記錄數均爲8<12,不知足最小支持度,所以age屬性的全部取值都沒有列在上面結果中。

%%%%%%%%%%%%%%%%%%%%%%%%

 

Size of set of large itemsets L(2): 1    //頻繁2項集: 1個

 

Large Itemsets L(2):

tear-prod-rate=reduced contact-lenses=none 12

//tear-prod-rate取值爲reduced且 contact-lenses取值爲none 的記錄數共有12個

 

Best rules found:    //最佳關聯規則

 

 1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1)

// 若tear-prod-rate取值爲reduced能夠推出 contact-lenses的取值爲none,該關聯規則置信度爲100%

 

2.其它實驗設置及部分結果展現

1. 實驗中,若其它參數保持爲默認值,將最小支持度下界設爲0.8,則運行結果會顯示」No large itemsets and rules found!」,即找不到知足條件的關聯規則。

2. 若其它參數保持爲默認值,將最小支持度下界設爲0.25,上界設爲0.8,度量選爲置信度,最小值爲0.8,則運行結果找到:頻繁1項集10個,頻繁2項集18個,頻繁3項集4個,找到的最佳關聯規則爲:

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1)

 2. spectacle-prescrip=myope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

 3. spectacle-prescrip=hypermetrope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

 4. astigmatism=no tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

 5. astigmatism=yes tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1)

 6. spectacle-prescrip=myope contact-lenses=none 7 ==> tear-prod-rate=reduced 6    conf:(0.86)

 7. astigmatism=no contact-lenses=none 7 ==> tear-prod-rate=reduced 6    conf:(0.86)

 8. contact-lenses=none 15 ==> tear-prod-rate=reduced 12    conf:(0.8)

 

3. 若其它參數保持爲默認值,將最小支持度下界設爲0.25,上界設爲0.8,度量選爲提高度(Lift :P(A,B)/(P(A)P(B))),最小值爲1.1,則運行結果找到10條最佳關聯規則,前3條以下:

1. tear-prod-rate=reduced 12 ==> spectacle-prescrip=myope contact-lenses=none 6    conf:(0.5) < lift:(1.71)> lev:(0.1) [2] conv:(1.21)

 2. spectacle-prescrip=myope contact-lenses=none 7 ==> tear-prod-rate=reduced 6    conf:(0.86) < lift:(1.71)> lev:(0.1) [2] conv:(1.75)

 3. tear-prod-rate=reduced 12 ==> astigmatism=no contact-lenses=none 6    conf:(0.5) < lift:(1.71)> lev:(0.1) [2] conv:(1.21)

 

4. 若其它參數保持爲默認值,將最小支持度下界設爲0.25,上界設爲0.8,度量選爲槓桿率(Leverage:P(A,B)-P(A)P(B),在下面第一條規則中,[4]表示知足lev:(0.19)的實例數目),最小值爲0.1,則運行結果找到6條最佳關聯規則,前3條以下:

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1) lift:(1.6) < lev:(0.19) [4]> conv:(4.5)

2. contact-lenses=none 15 ==> tear-prod-rate=reduced 12    conf:(0.8) lift:(1.6) < lev:(0.19) [4]> conv:(1.88)

3. tear-prod-rate=reduced 12 ==> spectacle-prescrip=myope contact-lenses=none 6   

 

5. 若其它參數保持爲默認值,將最小支持度下界設爲0.25,上界設爲0.8,度量選爲確信度(Conviction:P(A)P(!B)/P(A,!B)),最小值爲1.1,則運行結果找到10條最佳關聯規則,前3條以下:

1. tear-prod-rate=reduced 12 ==> contact-lenses=none 12    conf:(1) lift:(1.6) lev:(0.19) [4] < conv:(4.5)>

2. spectacle-prescrip=myope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1) lift:(1.6) lev:(0.09) [2] < conv:(2.25)>

3. spectacle-prescrip=hypermetrope tear-prod-rate=reduced 6 ==> contact-lenses=none 6    conf:(1) lift:(1.6) lev:(0.09) [2] < conv:(2.25)>

相關文章
相關標籤/搜索