1. 程式人生 > >Apriori演算法介紹及實現程式碼

Apriori演算法介紹及實現程式碼

引言:什麼是資料探勘

         隨著大資料時代的到來我們生活中的方方面面都受到了資料探勘的影響,比如你在淘寶上買了一件商品,當你下次登入的時候在淘寶的介面上會出現各種與你曾經購物資訊相關的商品。或者當你用網易雲音樂聽音樂的時候你從推薦歌單中選擇了你喜歡的音樂、刪除了你不喜歡的音樂,通過你這次的選擇的音樂相關性網易音樂會在下次推薦歌單時對音樂型別進行調整。所以,基於資料探勘的機器學習方案有一個共有的特性,那就是你與產品的互動資訊越多,商品越“懂你”。因為資料是資料探勘演算法的“能源”,你與產品的互動越多,你的資料越全面,挖掘出來的規則也就越準確。

Apriori演算法基本概念

  1. 項與項集
    :設itemset={item1, item_2, …, item_m}是所有項的集合,其中,item_k(k=1,2,…,m)成為項。項的集合稱為項集(itemset),包含k個項的項集稱為k項集(k-itemset)。
  2. 事務與事務集:一個事務T是一個項集,它是itemset的一個子集,每個事務均與一個唯一識別符號Tid相聯絡。不同的事務一起組成了事務集D,它構成了關聯規則發現的事務資料庫。
  3. 支援度:一個項集或者規則在所有事物中出現的頻率,確定規則可以用於給定資料集的頻繁程度。如果一個專案的頻繁度大於最小支援度sup_min則將其稱之為頻繁項,所有頻繁項的集合稱之為頻繁項集。
  4. 置信度:確定T2在包含T1的事務中出現的頻繁程度,也就是由T1推出T2的可信度 conf(T1\rightarrow T2)=sup(T1\cup T2)/\left ( T1 \right )
    。如果計算得出的conf(T1-->T2)大於最小信任度conf_min則說明T1-->T2規則是可靠的。

Apriori演算法詳解

           為了能夠更好的理解Apriori演算法下面我們用最經典的購物籃交易(market basket transaction)來舉個例子。資料如表所示。

購物籃資料
break milk diaper beer eggs cook
1 1 1 0 0 0 0
2 1 0 1 1 1 0
3 0 1 1 1 0 1
4 1 1 1 1 0 0
5 1 1 1 0 0

1

在購物籃資料中第一行表示物品的所有種類,其中每個種類為一個專案,集合為這個資料中的項集。表中另外五行表示五位顧客買的商品,其中1表示購買了其對應的商品0表示沒有購買商品。在這裡每位顧客買的商品集合及其子集都可以稱為一個事務,這些事務的集合稱為事務集。我們就是要通過這些事務來挖掘出來事務之間的相關性。

         按照上文所說的步驟,我們首先要計算頻繁項集,因為只有頻繁專案組成的事務才能挖掘出相關規則。我們設定最小支援度sup_min=2,首先計算一維事務的頻繁度,發現只有eggs的頻繁度1小於2,所有一維事務中除了eggs均為頻繁項,然後在一維基礎上增加專案個數,我們通過計算{beer,cook}的頻繁度只有1所有二維事務中它也不是頻繁的,以此類推得出所有的頻繁項集。大家可能想到了這個問題,這每個專案都如此組合從計算量上考慮絕對會產生組合爆炸啊。沒錯這樣成指數背增長資料一旦大了計算機絕對承受不住。所以Apriori演算法提出了一個規則,如果事務不是頻繁的其所有的子事務均不是頻繁的。拿上面的例子來說,如果eggs不是頻繁的,它就不用考慮與其他的組合生成子事務了,生成也不是頻繁的。這樣通過計算頻繁項集一定會收斂到1個。

        得到了頻繁項集以後我們要通過對子事務和父事務的頻繁度求比值得到信任值,如果信任值大於最小信任值conf_min則關聯規則成立。比如我們要計算由diaper-->beer的關聯規則:首先計算diaper的頻繁度supp(diaper)=4,然後計算{diaper,beer}的頻繁度supp(diaper \cup beer)=3,所以conf(diaper-->beer)=supp(diaper \cup beer)/supp(diaper)=0.75。

Apriori 程式碼Python實現