知識圖譜算法
前言數據庫
關聯分析是數據挖掘中一項基礎又重要的技術,是一種在大型數據庫中發現變量之間有趣關係的方法。說到數據挖掘的案例,相信不少人都會首先想到沃爾瑪超市發現購買尿布的顧客一般也會購買啤酒,因而把啤酒和尿布放在一塊兒銷售同時提升了二者的銷量的案例。這是關聯分析在商業領域應用的一個典型,經過對大量商品記錄做分析,提取出可以反映顧客偏好的有用的規則。有了這些關聯規則,商家制定相應的營銷策來來提升銷售量。關聯技術不但在商業領域被普遍應用,在醫療,保險,電信和證券等領域也獲得了有效的應用。本文將對數據挖掘中的關聯分析技術作簡要的介紹。數據結構
基本概念排序
爲了更好了解關聯分析的算法,咱們首先要知道關聯分析的一些基本概念。
事務庫
如同上表所示的二維數據集就是一個購物籃事務庫。該事物庫記錄的是顧客購買商品的行爲。這裏的TID表示一次購買行爲的編號,items表示顧客購買了哪些商品。
事務
事務庫中的每一條記錄被稱爲一筆事務。在上表的購物籃事務中,每一筆事務都表示一次購物行爲。
項集(T)
包含0個或者多個項的集合稱爲項集。在購物藍事務中,每同樣商品就是一個項,一次購買行爲包含了多個項,把其中的項組合起來就構成了項集。
支持度計數
項集在事務中出現的次數。例如,{Bread,Milk}這個項集在事務庫中一共出現了3次,那麼它的支持度計數就是3,。
支持度(s)
包含項集的事務在全部事務中所佔的比例:,這裏N是全部事務的數量。上面的例子中咱們獲得了{Bread,Milk}這個項集的支持度計數是3,事物庫中一共有5條事務,那麼{Bread,Milk}這個項集的支持度就是3/5。
頻繁項集
若是咱們對項目集的支持度設定一個最小閾值,那麼全部支持度大於這個閾值的項集就是頻繁項集。事務
關聯規則hash
在瞭解了上述基本概念以後,咱們就能夠引入關聯分析中的關聯規則了。
關聯規則實際上是兩個項集之間的蘊涵表達式。若是咱們有兩個不相交的項集X和Y,就能夠有規則X→Y, 例如{Bread,Milk}→{Diaper}。項集和項集之間組合能夠產生不少規則,但不是每一個規則都是有用的,咱們須要一些限定條件來幫助咱們找到強度高的規則。
支持度(s)
關聯規則的支持度定義爲:也就是同時包含X和Y這兩個項集的事務佔全部事務的比例。咱們看{Bread,Milk}→{Diaper}這個例子,同時包含{Bread,Milk,Diaper}這個項集的事務一共有2項,所以這個規則的支持度是2/5。
置信度(c)
關聯規則的置信度定義爲:這個定義肯定的是Y在包含X的事務中出現的頻繁程度。仍是看{Bread,Milk}→{Diaper}這個例子,包含{Bread,Milk}項的事務出現了2次,包含{Bread,Milk,Diaper}的事務也出現了2次,那麼這個規則的置信度就是1。
對於關聯規則定義這兩個度量頗有意義的。首先,經過對規則支持度支持度的限定濾去沒有意義的規則。咱們從商家的角度出發,數據挖掘意義是經過挖掘作出相應的戰略決策產生價值。若是一個規則支持度很低,說明顧客同時購買這些商品的次數不多,商家針對這個規則作決策幾乎沒有意義。其次,置信度越大說明這個規則越可靠。
關聯規則發現
有了上述兩個度量,就能夠對全部規則作限定,找出對咱們有意義的規則。首先對支持度和置信度分別設置最小閾值minsup和minconf。而後在全部規則中找出支持度≥minsup和置信度≥minconf的全部關聯規則。
有一點咱們須要注意的是由簡單關聯規則得出的推論並不包含因果關係。咱們只能由A→B獲得A與B有明顯同時發生的狀況,但不能得出A是因,B是果。也就是說咱們只能從案例中得到。it
3.1 關聯規則算法
根據上面對於關聯規則的定義,有一個原始而又簡單粗暴粗暴的算法就是,找出全部的規則,對每個規則計算支持度和置信度,而後再從中提取符合條件的規則。可是這個方法存在一個很致命的問題:若是一個數據集有d個項,這個數據包含的規則總數爲:
光是一個6個項的數據集產生的規則就有602條,隨着項數量的增長,原始算法的複雜度將成級數增加。下面這個格結構經常用來枚舉全部規則的可能性。
所以爲了控制須要計算支持度和置信度的規則數量,目前關聯規則的挖掘過程大體能夠總結爲兩步:
找出全部頻繁項集
由頻繁項集產生規則,從中提取置信度高的規則
3.2 Apriori算法
Apriori算法是第一個關聯規則的挖掘算法,它開創性的使用了基於支持度的剪枝技術來控制候選項集的指數級增加。Apriori算法產生頻繁項集的過程有兩步:第一,逐層找出當前候選項集中的全部頻繁項集:第二,用當前長度的頻繁項集產生長度加1的新的候選項集。
首先咱們來看一下Apriori算法用到的核心原理用到的兩個重要性質:
若是一個項集是頻繁的,那麼它的全部子集都是頻繁的。
若是一個項集是非頻繁的,那麼它的全部超集都是非平凡的。
若是一個項集是非頻繁項集,那麼這個項集的超集就不須要再考慮了。由於若是這個項集是非頻繁的,那麼它的全部超集也必定都是非頻繁的。在項集的超集是指,包含這個項集的元素且元素個數更多的項集。在購物籃事務庫中{Milk,Beer}就是{Milk}的其中一個超集。這個原理很好理解,若是{Milk}出現了3次,{Milk,Beer}一塊兒出現的次數必定小於3次。因此若是一個項集的支持度小於最小支持度這個閾值了,那麼它的超集的支持度必定也小於這個閾值,就不用再考慮了。
僞代碼:
(source:數據挖掘導論第六章)
對這段僞代碼作一下解讀,能夠將Apriori算法分爲如下步驟:
初始時,每一個項都被看做長度爲1的候選項集(1-項集),經過計算支持度,濾去非頻繁項集獲得長度爲1的頻繁項集的集合在上一次迭代獲得長度爲k-1的頻繁項集的集合
基礎上,產生長度爲k的候選集
在長度爲k的候選集中,除去k-1非頻繁項集的候選集在當前得到的長度爲k的候選集中,計算支持度獲得全部頻繁項集的集合
重複上述2-4 步,直到沒有新的候選集能夠產生。
下面簡單描述購物藍事物庫例子中,全部頻繁項集是如何經過Apriori算法找出的。
首先,咱們限定最小支持度計數爲3。遍歷長度爲1的項集,發現{Coke}和{Eggs}不知足最小支持度計數,將它們除去。用剩餘4個長度爲1的頻繁項集產生=6個長度爲2的候選集。再次基礎上從新計算支持度計數,發現{Bread, Milk}和{Milk, Beer}這兩個項集是非頻繁,將它們除去以後再產生長度爲3的候選集。這裏須要注意的是不須要再產生{Milk, Beer, Diaper}這個候選集了,由於它的其中一個子集{Milk, Beer}是非頻繁的,根據先驗原理這個項集自己必定是非頻繁的。
優缺點評價:
Apriori算法的優勢是能夠產生相對較小的候選集,而它的缺點是要重複掃描數據庫,且掃描的次數由最大頻繁項目集中項目數決定,所以Apriori適用於最大頻繁項目集相對較小的數據集中。
用hash樹結構提升Apriori算法產生候選集的效率:
在上述的Apriori算法中咱們已經知道了這個算法須要不斷的進行從頻繁項集中產生候選集的過程。首先找到中包含的事務的全部元素,而後在產生
長度的候選集。這個過程效率是很低的,爲了提升找出全部候選集的效率就要用到哈希樹了。數據挖掘
3.3 FP-tree算法
下面介紹一種使用了與Apriori徹底不一樣的方法來發現頻繁項集的算法FP-tree。FP-tree算法在過程當中沒有像Apriori同樣產生候選集,而是採用了更爲緊湊的數據結構組織tree, 再直接從這個結構中提取頻繁項集。FP-tree算法的過程爲:
首先對事務中的每一個項計算支持度,丟棄其中非頻繁的項,每一個項的支持度進行倒序排序。同時對每一條事務中的項也按照倒序進行排序。
根據每條事務中事務項的新順序,依此插入到一棵以Null爲根節點的樹中。同時記錄下每一個事務項的支持度。這個過程完成以後,咱們就獲得了棵FP-tree樹結構。
對構建完成的FP-tree,從樹結構的上方到下方對每一個項,將先前的路徑轉化爲條件FP-tree。
根據每棵條件FP-tree,找出全部頻繁項集。
這個對FP-tree算法過程的描述比較抽象,咱們經過下面這個例子具體地瞭解一下FP-tree算法是如何找到頻繁項集的。
(source: 數據挖掘:概念與技術Jiawei, Han)
首先對實務中的全部項集計算支持度,而後按照倒序排序,以下圖中的綠表所示。而後對每條事務中的項也按照這個倒序,從新排列。例如,對T100這個事務,原來是無序的Ⅰ1, Ⅰ2, Ⅰ5, 但由於Ⅰ2的支持度按照倒序排列在Ⅰ1以前,所以從新排序以後的順序爲Ⅰ2,Ⅰ1,Ⅰ5。通過從新排序後的事務的項集以下表中的第三列所示。
從新掃描事務庫,按照從新排序的項集的順序依次插入以NULL爲根節點的樹中。對事務T100, 依次建立Ⅰ2,Ⅰ1,Ⅰ5三個結點,而後能夠造成一條NULL→Ⅰ2→Ⅰ1→Ⅰ5的路徑,該路徑上全部結點的頻度計數記爲1。對事務T200,FP-tree中已經存在告終點Ⅰ2,因而造成一條NULL→Ⅰ2→Ⅰ4的路徑,同時建立一個Ⅰ4的節點。此事,Ⅰ2結點上的頻度計數增長1,記爲2,同時結點Ⅰ4的頻度計數記爲1。按照相同的過程,掃描完庫中的全部事務以後能夠獲得下圖的樹結構。
對於構建完成的FP-tree,從樹的底部開始依次構建每一個項的條件FP-tree。首先咱們在上圖中找到節點Ⅰ5,發現可以達到Ⅰ5的路徑有兩條{ Ⅰ2,Ⅰ1,Ⅰ5 :1}和{ Ⅰ2,Ⅰ1,Ⅰ3,Ⅰ5 :1}。
基於這兩天路徑來構造Ⅰ5的條件tree如同下圖所示,其中Ⅰ3要被捨去,由於這裏Ⅰ3的計數爲1不能知足頻繁項集的條件。而後用Ⅰ5的前綴{ Ⅰ2,Ⅰ1:2}列舉全部與後綴Ⅰ5的組合,最終獲得{Ⅰ2,Ⅰ5 },{ Ⅰ2,Ⅰ1 }和{Ⅰ2,Ⅰ1,Ⅰ5 }三個頻繁項集。
對全部項執行上述步驟,咱們能夠獲得全部項產生的頻繁項集:
優缺點評價:
FP-tree算法相對於Apriori算法,時間複雜度和空間複雜都有了顯著的提升。可是對海量數據集,時空複雜度仍然很高,此時須要用到數據庫劃分等技術。io
關聯模式評價效率
在以前的分析中,咱們已經知道了在由頻繁項集產生的規則上,經過限定置信讀來得到有意義的規則。然而經過置信度來篩選規則存在具備誤導做用的缺點。咱們經過一個二元相依表的例子來講明這個置信度的顯著缺點。
相依表
下表是一個二元相依表,表中列出了兩個項集所產生的四種狀況的二元相依表。其中X表示項集X在事務中出現,表示項集X再也不事務中出現。
置信度的侷限:
下表是一項對愛喝咖啡的人喝愛喝茶的人之間關係的分析。
經過表中所給的信息能夠用支持度和置信度評估關聯規則{tea}→{coffee}。
從這個規則75%的高置信度,咱們彷佛能夠推斷喜歡喝茶的人也喜歡喝咖啡這條規則。可是全部人中喜歡喝咖啡的人的比例高達80%,這樣一對比發現若是一我的喜歡喝茶那麼他喜歡喝咖啡的可能性將從80%降低到75%。所以若是僅憑置信度就推斷出規則是有缺陷的,之因此有這樣的誤導現象是由於置信度這個度量沒有考慮規則後見中項集的支持度。
其它客觀度量:
提高度:
興趣因子:
相關參考
《數據挖掘導論》 第六章
《數據挖掘:概念與技術》
轉自(THU數據派)