• <menu id="gyiem"><menu id="gyiem"></menu></menu>
  • <menu id="gyiem"><code id="gyiem"></code></menu>

    機器學習(三) 關聯規則R語言實戰 Apriori

    原創文章,轉載請務必將下面這段話置于文章開頭處。
    本文轉發自技術世界原文鏈接 http://www.luozeyang.com/ml/associationrules/

    關聯規則背景

    關聯規則來源

    上個世紀,美國連鎖超市活爾瑪通過大量的數據分析發現了一個非常有趣的現象:尿布與啤酒這兩種看起來風馬牛不相及的商品銷售數據曲線非常相似,并且尿布與啤酒經常被同時購買,也即購買尿布的顧客一般也同時購買了啤酒。于是超市將尿布與啤酒擺在一起,這一舉措使得尿布和啤酒的銷量大幅增加。

    原來,美國的婦女通常全職在家照顧孩子,并且她們經常會囑咐丈夫在下班回家的路上為孩子買尿布,而丈夫在買尿布的同時又會順手購買自己愛喝的啤酒。

    注: 此案例很精典,切勿盲目模仿案例本身,而應了解其背后原理。它發生在美國,而且是上個世紀,有些東西并不一定適用于現在,更不一定適用于中國。目前國內網購非常普遍,并不一定需要去超市線下購買,而網購主力軍是女性,因此不一定會出現尿布與啤酒同時購買的問題。另外,對于線下銷售,很多超市流行的做法不是把經常同時購買的商品放在一起,而是盡量分開放到不同的地方,這樣顧客為了同時購買不得不穿過其它商品展示區,從而可能購買原來未打算購買的商品。

    但是本案例中背后的機器學習算法——關聯規則,仍然適用于非常多的場景。目前很多電商網站也會根據類似的關聯規則給用戶進行推薦,如比較常見的“購買該商品的客戶還購買過**”。其背后的邏輯在于,某兩種或幾種商品經常被一起購買,它們中間可能存在某種聯系,當某位顧客購買了其中一種商品時,他/她可能也需要另外一種或幾種商品,因此電商網站會將這幾種商呂推薦給客戶。

    什么是關聯規則

    如同上述啤酒與尿布的故事所示,關聯規則是指從一組數據中發現數據項之間的隱藏關系,它是一種典型的無監督學習。

    關聯規則的核心概念

    本節以上述超市購物的場景為例,介紹關聯規則的幾個核心概念

    項目
    一系列事件中的一個事件。對于超市購物而言,即一次購物中的一件商品,如啤酒

    事務
    一起發生的一系列事件。在超市購物場景中,即一次購買行為中包含的所有商品的集合。如 $\{尿布,啤酒,牛奶,面包\}$

    項集
    一個事務中包含的若干個項目的集合,如 $\{尿布,啤酒\}$

    支持度
    項集 $\{A,B\}$ 在全部項集中出現的概率。支持度越高,說明規則 $A \rightarrow B$ 越具代表性。

    頻繁項集
    某個項集的支持度大于設定的閾值(人為根據數據分布和經驗設定),該項集即為頻繁項集。

    假設超市某段時間總共有 5 筆交易。下面數據中,數字代表交易編號,字母代表項目,每行代表一個交易對應的項目集

    1
    2
    3
    4
    5
    1: A B C D
    2: A B
    3: C B
    4: A D
    5: A B D

    對于項集 $\{A,B\}$,其支持度為 $3/5=60\%$ (總共 5 個項集,而包含 $\{A,B\}$ 的有 3 個)。如果閾值為 $50\%$,此時 $\{A,B\}$ 即為頻繁項集。

    置信度
    在先決條件 $A$ 發生的條件下,由關聯規則 $A \rightarrow B$ 推出 $B$ 的概率,即在 $A$ 發生時,$B$ 也發生的概率,即 $P(A|B)$ 。置信度越高,說明該規則越可靠。

    在上例中,頻繁項集 $\{A,B\}$ 的置信度為 $3/4=75\%$ (包含 $\{A,B\}$ 的項集數為 3,包含 $A$ 的項集數為 5)

    滿足最小支持度和最小置信度的規則,即為強關聯規則。

    提升度
    $A$ 發生時 $B$ 也發生的概率,除以 $B$ 發生的概率,即 $P(A|B) / P(B)$ ,它衡量了規則的有效性。

    在上例中,置信度為 $75\%$ ,但是否能說明 $A$ 與 $B$ 之間具有強關聯性呢?提升度為 $75\% / 80\% = 93.75\%$

    從中可以看出,$B$ 的購買率為 $80\%$,而購買 $A$ 的用戶同時購買 $B$ 的概率只有 $75\%$,所以并不能說明 $A \rightarrow B$ 是有效規則,或者說這條規則是沒有價值的,因此不應該如本文開頭處啤酒與尿布的案例中那樣將 $A$ 與 $B$ 一起銷售。

    提升度是一種比較簡單的判斷規則是否有價值的指標。如果提升度為 1,說明二者沒有任何關聯;如果小于 1,說明 $A$ 與 $B$ 在一定程度上是相斥的;如果大于 1,說明 $A$ 與 $B$ 有一定關聯。一般在工程實踐中,當提升度大于 3 時,該規則才被認為是有價值的。

    Apriori算法

    關聯規則中,關鍵
    點是:1)找出頻繁項集;2)合理地設置三種閾值;3)找出強關聯規則

    直接遍歷所有的項目集,并計算其支持度、置信度和提升度,計算量太大,無法應用于工程實踐。

    Apriori算法可用于快速找出頻繁項集。

    Apriori算法原理

    原理一:如果一個項集是頻繁項目集,那它的非空子集也一定是頻繁項目集。

    原理二:如果一個項目集的非空子集不是頻繁項目集,那它也不是頻繁項目集。

    例:如果 $\{A,B,C\}$ 的支持度為 $70\%$,大于閾值 $60\%$,則 $\{A,B,C\}$ 為頻繁項目集。此時 $\{A,B\}$ 的支持度肯定大于等于 $\{A,B,C\}$ 的支持度,也大于閾值 $60\%$,即也是頻繁項目集。反之,若 $\{A,B\}$ 的支持度為 $40\%$,小于閾值 $60\%$,不是頻繁項目集,則 $\{A,B,C\}$ 的支持度小于等于 $40\%$,必定小于閾值 $60\%$,不是頻繁項目集。

    原理三:對于頻繁項目集X,如果 $(X-Y) \rightarrow Y$ 是強關聯規則,則 $(X-Y) \rightarrow Y_{sub}$ 也是強關聯規則。

    原理四:如果 $(X-Y) \rightarrow Y_{sub}$ 不是強關聯規則,則 $(X-Y) \rightarrow Y$ 也不是強關聯規則。

    其中 $Y_{sub}$ 是 $Y$ 的子集。

    這里把包含 $N$ 個項目的頻繁項目集稱為 $N-$ 頻繁項目集。Apriori 的工作過程即是根據 $K-$ 頻繁項目集生成 $(K+1)-$ 頻繁項目集。

    根據數據歸納法,首先要做的是找出1-頻繁項目集。只需遍歷所有事務集合并統計出項目集合中每個元素的支持度,然后根據閾值篩選出 $1-$ 頻繁項目集即可。

    Apriori生成頻繁項集

    有項目集合 $I=\{A,B,C,D,E\}$ ,事務集 $T$ :

    1
    2
    3
    4
    5
    6
    7
    A,B,C
    A,B,D
    A,C,D
    A,B,C,E
    A,C,E
    B,D,E
    A,B,C,D

    設定最小支持度 $support=3/7$,$confidence=5/7$

    直接窮舉所有可能的頻繁項目集,可能的頻繁項目集如下


    Full search

    1-頻繁項目集
    1-頻繁項目集,即

    1
    {A},{B},{C},{D},{E}

    其支持度分別為 $6/7$,$5/7$,$5/7$,$4/7$和$3/7$,均符合支持度要求。

    2-頻繁項目集
    任意取兩個只有最后一個元素不同的 $1-$ 頻繁項目集,求其并集。由于每個 $1-$ 頻繁項目集只有一個元素,故生成的項目集如下:

    1
    2
    3
    4
    {A,B},{A,C},{A,D},{A,E}
    {B,C},{B,D},{B,E}
    {C,D},{C,E}
    {D,E}

    過濾出滿足最小支持度 $3/7$的項目集如下

    1
    {A,B},{A,C},{A,D},{B,C},{B,D}

    此時可以將其它所有 $2-$ 頻繁項目集以及其衍生出的 $3-$ 頻繁項目集, $4-$ 頻繁項目集以及 $5-$ 頻繁項目集全部排除(如下圖中紅色十字所示),該過程即剪枝。剪枝減少了后續的候選項,極大降低了計算量從而大幅度提升了算法性能。


    Apriori prune 2

    3-頻繁項目集
    因為 $\{A,B\}$,$\{A,C\}$,$\{A,D\}$ 除最后一個元素外都相同,故求 $\{A,B\}$ 與 $\{A,C\}$ 的并集得到 $\{A,B,C\}$,求 $\{A,C\}$ 與 $\{A,D\}$ 的并集得到 $\{A,C,D\}$,求 $\{A,B\}$ 與 $\{A,D\}$ 的并集得到 $\{A,B,D\}$。但是由于 $\{A,C,D\}$ 的子集 $\{C,D\}$ 不在 $2-$ 頻繁項目集中,所以需要把 $\{A,C,D\}$ 剔除掉。$\{A,B,C\}$ 與 $\{A,B,D\}$ 的支持度分別為 $3/7$ 與 $2/7$,故根據支持度要求將 $\{A,B,D\}$ 剔除,保留 $\{A,B,C\}$。

    同理,對 $\{B,C\}$ 與 $\{B,D\}$ 求并集得到 $\{B,C,D\}$,其支持度 $1/7$ 不滿足要求。

    因此最終得到 $3-$ 頻繁項目集 $\{A,B,C\}$。

    排除 $\{A,B,D\}$ , $\{A,C,D\}$, $\{B,C,D\}$ 后,相關聯的 $4-$ 頻繁項目集 $\{A,B,C,D\}$ 也被排除,如下圖所示。


    Apriori prune 3

    生成強關聯規則

    窮舉法
    得到頻繁項目集后,可以窮舉所有可能的規則,如下圖所示。然后通過置信度閾值篩選出強關聯規則。


    Apriori prune 4

    Apriori剪枝
    Apriori算法可根據原理三原理四進行剪枝,從而提升算法性能。

    上述步驟得到了3-頻繁項集 $\{A,B,C\}$。先生成 $1-$ 后件(即箭頭后只有一個項目)的關聯規則

    • $\{A,B\} \rightarrow C $ 置信度 $3/4 > 5/7$,是強關聯規則
    • $\{A,C\} \rightarrow B $ 置信度為 $3/5 < 5/7$,不是強關聯規則
    • $\{B,C\} \rightarrow A $ 置信度為 $3/3 > 5/7$,是強關聯規則

    此時可將 $\{A,C\} \rightarrow B $ 排除,并將相應的 $2-$ 后件關聯規則 $\{A\} \rightarrow \{B,C\} $ 與 $\{C\} \rightarrow \{A,B\} $ 排除,如下圖所示。


    Apriori prune 5

    根據原理四,由 $1-$ 后件強關聯規則,生成 $2-$ 后件關聯規則 $\{B\} \rightarrow \{A,C\} $,置信度 $3/5 < 5/7$,不是強關聯規則。

    至此,本例中通過Apriori算法得到強關聯規則 $\{A,B\} \rightarrow C $ 與 $\{B,C\} \rightarrow A $。

    注:這里只演示了從 $3-$ 頻繁項目集中挖掘強關聯規則。實際上同樣還可以從上文中得到的 $2-$ 頻繁項目集中挖掘出更多強關聯規則,這里不過多演示。

    總結

    Aprior原理和實現簡單,相對窮舉法有其優勢,但也有其局限

    • 從單元素項集開始,通過組合滿足最小支持度要求的項集來形成更大的集合
    • 通過上述四條原理,進行剪枝,降低了計算量,從而提升了計算速度
    • 每次增加頻繁項目集的大小,都需要重新掃描整個數據集(計算支持度)
    • 當數據集很大時,頻繁項目集的生成速度會顯著降低
    • 需要頻繁掃描數據集從而從候選項目集中篩選出頻繁項目集,開銷較大

    FP-growth算法

    構建FP樹

    生成交易數據集
    設有交易數據集如下

    1
    2
    3
    4
    5
    6
    1:A,F,H,J,P
    2:F,E,D,W,V,U,C,B
    3:F
    4:A,D,N,O,B
    5:E,A,D,F,Q,C,P
    6:E,F,D,E,Q,B,C,M

    項目過濾及重排序
    與Apriori算法一樣,獲取頻繁項集的第一步是根據支持度閾值獲取 $1-$ 頻繁項目集。不一樣的是,FP-growth 算法在獲取 $1-$ 頻繁項目集的同時,對每條交易只保留 $1-$ 頻繁項目集內的項目,并按其支持度倒排序。

    這里將最小支持度設置為 $3/6$。第一遍掃描數據集后得到過濾與排序后的數據集如下:

    1
    2
    3
    4
    5
    6
    1:F,A
    2:F,D,E,B,C
    3:F
    4:D,B,A
    5:F,D,E,A,C
    6:F,D,E,B,C

    構建FP樹
    TP-growth算法將數據存儲于一種稱為 FP 樹的緊湊數據結構中。FP 代表頻繁模式(Frequent Pattern)。FP 樹與其它樹結構類似,但它通過鏈接(link)來連接相似元素,被連接起來的項目可看成是一個鏈表。

    FP樹的構建過程是以空集作為樹的根節點,將過濾和重排序后的數據集逐條添加到樹中:如果樹中已存在當前元素,則增加待添加元素的值;如果待添加元素不存在,則給樹增加一個分支。

    添加第一條記錄時,直接在根節點下依次添加節點 $ \lt F:1 \gt $, $ \lt A:1 \gt $ 即可。添加第二條記錄時,因為 $\{F,D,E,B,C\}$ 與路徑 $\{F:1,A:1\}$ 有相同前綴 $F$ ,因此將 $F$ 次數加一,然后在節點 $ \lt F:2 \gt $ 下依次添加節點 $ \lt D:1 \gt $, $ \lt E:1 \gt $, $ \lt B:1 \gt $, $ \lt C:1 \gt $。

    第一條記錄與第二條記錄的添加過程如下圖所示。


    Frequent pattern growth 1

    添加第三條記錄 $\{F\}$ 時,由于 $FP$ 樹中已經存在該節點且該節點為根節點的直接子節點,直接將 $F$ 的次數加一即可。

    添加第四條記錄 $\{D,B,A\}$ 時,由于與 $FP$ 樹無共同前綴,因此直接在根節點下依次添加節點 $ \lt D:1 \gt $, $ \lt B:1 \gt $, $ \lt A:1 \gt $。

    第三條記錄與第四條記錄添加過程如下所示


    Frequent pattern growth 2

    添加第五條記錄 $\{F,D,E,A,C\}$ 時,由于與 $FP$ 樹存在共同前綴 $\{F,D,E\}$ 。因此先將其次數分別加一,然后在節點 $ \lt E:1 \gt $ 下依次添加節點 $ \lt A:1 \gt $, $ \lt C:1 \gt $。

    添加第六條記錄 $\{F,D,E,B,C\}$ 時,由于 $FP$ 樹已存在 $\{F,D,E,B,C\}$ ,因此直接將其次數分別加一即可。

    第五條記錄與第六條記錄添加過程如下圖所示。


    Frequent pattern growth 3

    建立頭表
    為了便于對整棵FP樹進行遍歷,可建立一張項目頭表。這張表記錄各 $1-$ 頻繁項的出現次數,并指向該頻繁項在 $FP$ 樹中的節點,如下圖所示。


    Head Table

    從FP樹中挖掘頻繁項目集

    構建好 $FP$ 樹后,即可抽取頻繁項目集,其思路與 Apriori 算法類似——先從 $1-$ 頻繁項目集開始,然后逐步構建更大的頻繁項目集。

    從 $FP$ 樹中抽取頻繁項目集的三個基本步驟如下:

    1. 從 $FP$ 樹中獲得條件模式基(conditional pattern base)
    2. 根據條件模式基構建 $條件FP樹$
    3. 重復 $步驟1$ 與 $步驟2$ ,直到$ 條件FP樹$ 只包含一個項目為止

    抽取條件模式基
    條件模式基(conditaional pattern base)是以所查元素為結尾的路徑集合。這里的每一個路徑稱為一條前綴路徑(prefix path)前綴路徑是介于所查元素與 $FP$ 樹根節點間的所有元素。

    每個 $1-$ 頻繁項目的條件模式基如下所示

    $1-$ 頻繁項目 條件模式基
    F ?:5
    A $\{D,B\}:1$,$\{F,D,E\}:1$,$\{F\}:1$
    D $\{F\}:3$,?:1
    E $\{F,D\}:3$
    B $\{F,D,E\}:2$,$\{D\}:1$
    C $\{F,D,E,B\}:2$,$\{F,D,E,A\}:1$

    構建條件$FP$樹
    對于每個頻繁項目,可以條件模式基作為輸入數據構建一棵 $條件FP樹$ 。

    對于 $C$ ,其條件模式基為 $\{F,D,E,B\}:2$,$\{F,D,E,A\}:1$ 。根據支持度閾值 $3/6$ 可排除掉 $A$ 與 $B$ 。以滿足最小支持度的 $\{F,D,E\}:2$ 與 $\{F,D,E\}:1$ 構建 $條件FP樹$ 如下圖所示。


    Conditaional Frequent Pattern Tree

    遞歸查找頻繁項集
    基于上述步驟中生成的 $FP樹$ 和 $條件FP樹$ ,可通過遞歸查找頻繁項目集。具體過程如下:

    1 初始化一個空列表 $prefix$ 以表示前綴
    2 初始化一個空列表 $freqList$ 存儲查詢到的所有頻繁項目集
    3 對 $Head Table$ 中的每個元素 $ele$,遞歸:
      3.1 記 $ele + prefix$ 為當前頻繁項目集 $newFreqSet$
      3.2 將 $newFreq$ 添加到 $freqList$中
      3.3 生成 $ele$ 的 $條件FP樹$ 及對應的 $Head Table$
      3.4 當 $條件FP樹$ 為空時,退出
      3.5 以 $條件FP樹$ 樹與對應的 $Head Table$ 為輸入遞歸該過程

    對于 $C$ ,遞歸生成頻繁項目集的過程如下圖所示。


    Conditaional Frequent Pattern Tree for C

    上圖中紅色部分即為頻繁項目集。同理可得其它頻繁項目集。

    生成強關聯規則

    得到頻繁項目集后,即可以上述同樣方式得到強關聯規則。

    總結

    $FP-growth$ 算法相對 $Apriori$ 有優化之處,但也有其不足

    • 無論數據集多復雜,只需掃描原始數據集兩遍,速度比 $Apriori$ 算法快
    • 實現比 $Apriori$ 算法復雜

    Apriori算法R語言實戰

    加載數據集

    $R$ 語言中,$arules$ 包提供了 $Apriori$ 算法的實現。

    1
    library(arules)

    將上文Apriori生成頻繁項目集中的數據集存于 $transaction.csv$ 文件。然后使用 $arules$ 包的 $read.transactions$ 方法加載數據集并存于名為 $transactions$ 的稀疏矩陣中,如下

    1
    transactions <- read.transactions("transaction.csv", format="basket", sep=",")

    這里之所以不使用 $data.frame$ 是因為當項目種類太多時 $data.frame$ 中會有大量單元格為 $0$,大量浪費內存。稀疏矩陣只存 $1$,節省內存。

    該方法的使用說明如下

    1
    2
    3
    4
    5
    Usage:
    read.transactions(file, format = c("basket", "single"), sep = "",
    cols = NULL, rm.duplicates = FALSE,
    quote = "\"'", skip = 0,
    encoding = "unknown")

    其中,$format=”basket”$ 適用于每一行代表一條交易記錄( $basket$ 可理解為一個購物籃)的數據集,本例所用數據集即為該類型。$format=”single”$ 適用于每一行只包含一個事務 $ID$ 和一件商品(即一個項目)的數據集,如下所示。

    1
    2
    3
    4
    5
    6
    1,A
    1,B
    1,C
    2,B
    2,D
    3,A

    $rm.duplicates=TRUE$ 代表刪除同一交易(記錄)內的重復商品(項目)。本例所用數據集中每條記錄無重復項目,故無須設置該參數。

    分析數據

    查看數據集信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    > inspect(transactions)
    items
    [1] {A,B,C}
    [2] {A,B,D}
    [3] {A,C,D}
    [4] {A,B,C,E}
    [5] {A,C,E}
    [6] {B,D,E}
    [7] {A,B,C,D}

    查看數據集統計信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    > summary(transactions)

    transactions as itemMatrix in sparse format with
    7 rows (elements/itemsets/transactions) and
    5 columns (items) and a density of 0.6571429

    most frequent items:
    A B C D E (Other)
    6 5 5 4 3 0

    element (itemset/transaction) length distribution:
    sizes
    3 4
    5 2

    Min. 1st Qu. Median Mean 3rd Qu. Max.
    3.000 3.000 3.000 3.286 3.500 4.000

    includes extended item information - examples:
    labels
    1 A
    2 B
    3 C

    從中可看出,總共包含 $7$ 條交易,$5$ 種不同商品。同時可得到出現頻次最高的 $5$ 個項目及其頻次。另外,所有事務中包含 $3$ 件商品的有 $5$ 個,包含 $4$ 件商品的有 $2$ 個。

    接下來,可通過 $itemFrequency$ 方法查看各項目的支持度,如下所示。

    1
    2
    3
    > sort(itemFrequency(transactions), decreasing = T)
    A B C D E
    0.8571429 0.7142857 0.7142857 0.5714286 0.4285714

    挖掘關聯規則

    上面對數據的觀察,其目的是找出合適的支持度閾值與置信度閾值。這里繼續使用 $3/7$ 作為最小支持度, $5/7$ 作為最小置信度。

    1
    rules <- apriori(transactions, parameter = list(support = 3/7, confidence = 5/7, minlen = 2))

    其中 $minlen = 2$ 是指規則至少包含兩個項目,即最少一個前件一個后件,如 $\{A\} \rightarrow B $。結果如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    > inspect(rules)
    lhs rhs support confidence lift
    [1] {D} => {B} 0.4285714 0.7500000 1.0500000
    [2] {D} => {A} 0.4285714 0.7500000 0.8750000
    [3] {B} => {A} 0.5714286 0.8000000 0.9333333
    [4] {C} => {A} 0.7142857 1.0000000 1.1666667
    [5] {A} => {C} 0.7142857 0.8333333 1.1666667
    [6] {B,C} => {A} 0.4285714 1.0000000 1.1666667
    [7] {A,B} => {C} 0.4285714 0.7500000 1.0500000

    從中可以看出,$Apriori$ 算法以 $3/7$ 為最小支持度,以 $5/7$ 為最小置信度,從本例中總共挖掘出了 $7$ 條強關聯規則。其中 $2$ 條包含 $3$ 個項目,分別為 $\{B,C\} \rightarrow A $ 與 $\{A,B\} \rightarrow C $。該結果與上文中使用 $Apriori$ 算法推算出的結果一致。

    評估關聯規則

    挖掘出的強關聯規則,不一定都有效。因此需要一些方法來評估這些規則的有效性。

    提升度
    第一種方法是使用上文中所述的提升度來度量。本例中通過 $Apriori$ 算法找出的強關聯規則的提升度都小于 $3$,可認為都不是有效規則。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    > inspect(sort(rules, by = "lift"))
    lhs rhs support confidence lift
    [1] {C} => {A} 0.7142857 1.0000000 1.1666667
    [2] {A} => {C} 0.7142857 0.8333333 1.1666667
    [3] {B,C} => {A} 0.4285714 1.0000000 1.1666667
    [4] {D} => {B} 0.4285714 0.7500000 1.0500000
    [5] {A,B} => {C} 0.4285714 0.7500000 1.0500000
    [6] {B} => {A} 0.5714286 0.8000000 0.9333333
    [7] {D} => {A} 0.4285714 0.7500000 0.8750000

    其它度量
    $interestMeasure$ 方法提供了幾十個維度的對規則的度量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    > interestMeasure(rules, c("coverage","fishersExactTest","conviction", "chiSquared"), transactions=transactions)
    coverage fishersExactTest conviction chiSquared
    1 0.5714286 0.7142857 1.1428571 0.05833333
    2 0.5714286 1.0000000 0.5714286 0.87500000
    3 0.7142857 1.0000000 0.7142857 0.46666667
    4 0.7142857 0.2857143 NA 2.91666667
    5 0.8571429 0.2857143 1.7142857 2.91666667
    6 0.4285714 0.5714286 NA 0.87500000
    7 0.5714286 0.7142857 1.1428571 0.05833333

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    > rule_measures <- interestMeasure(rules, c("coverage","fishersExactTest","conviction", "chiSquared"), transactions=transactions)  
    > quality(rules) <- cbind(quality(rules), rule_measures)
    > inspect(sort(rules, by = "fishersExactTest", decreasing = T))

    lhs rhs coverage fishersExactTest conviction chiSquared coverage fishersExactTest conviction chiSquared
    [1] {D} => {A} 0.5714286 1.0000000 0.5714286 0.87500000 0.5714286 1.0000000 0.5714286 0.87500000
    [2] {B} => {A} 0.7142857 1.0000000 0.7142857 0.46666667 0.7142857 1.0000000 0.7142857 0.46666667
    [3] {D} => {B} 0.5714286 0.7142857 1.1428571 0.05833333 0.5714286 0.7142857 1.1428571 0.05833333
    [4] {A,B} => {C} 0.5714286 0.7142857 1.1428571 0.05833333 0.5714286 0.7142857 1.1428571 0.05833333
    [5] {B,C} => {A} 0.4285714 0.5714286 NA 0.87500000 0.4285714 0.5714286 NA 0.87500000
    [6] {C} => {A} 0.7142857 0.2857143 NA 2.91666667 0.7142857 0.2857143 NA 2.91666667
    [7] {A} => {C} 0.8571429 0.2857143 1.7142857 2.91666667 0.8571429 0.2857143 1.7142857 2.91666667

    總結

    • 關聯規則可用于發現項目間的共生關系
    • 支持度與置信度閾值可篩選出強關聯規則

    《機器學習》系列文章

    郭俊 Jason wechat
    歡迎關注作者微信公眾號【大數據架構】
    您的贊賞將支持作者繼續原創分享
    速赢彩app 阜新 | 商丘 | 宁夏银川 | 巢湖 | 阿拉尔 | 天水 | 信阳 | 百色 | 泸州 | 雄安新区 | 宿迁 | 玉林 | 桐城 | 济南 | 泰兴 | 汝州 | 临猗 | 眉山 | 甘肃兰州 | 沧州 | 基隆 | 燕郊 | 廊坊 | 淮南 | 新泰 | 玉环 | 公主岭 | 内江 | 三河 | 陕西西安 | 内蒙古呼和浩特 | 中卫 | 大兴安岭 | 鄢陵 | 韶关 | 九江 | 四川成都 | 惠东 | 滕州 | 亳州 | 琼海 | 铜陵 | 宜都 | 神农架 | 东台 | 琼中 | 河北石家庄 | 那曲 | 濮阳 | 绥化 | 海门 | 阳泉 | 常德 | 铜川 | 燕郊 | 东阳 | 邹城 | 文山 | 丽江 | 武威 | 廊坊 | 湖南长沙 | 菏泽 | 如东 | 信阳 | 梅州 | 天水 | 攀枝花 | 焦作 | 肥城 | 和县 | 果洛 | 清徐 | 永康 | 仙桃 | 海门 | 那曲 | 文昌 | 平潭 | 江门 | 十堰 | 延边 | 昭通 | 常德 | 马鞍山 | 临猗 | 玉林 | 哈密 | 慈溪 | 大连 | 五家渠 | 晋城 | 十堰 | 滨州 | 红河 | 任丘 | 台北 | 日照 | 朝阳 | 鄂州 | 凉山 | 沭阳 | 海西 | 漳州 | 湖南长沙 | 临夏 | 赵县 | 阿坝 | 南阳 | 承德 | 江苏苏州 | 苍南 | 吉林 |