1. 程式人生 > >機器學習之Apriori演算法和FP-growth演算法

機器學習之Apriori演算法和FP-growth演算法

1 關聯分析

無監督機器學習方法中的關聯分析問題。關聯分析可以用於回答"哪些商品經常被同時購買?"之類的問題。

2 Apriori演算法

  頻繁項集即出現次數多的資料集
  支援度就是幾個關聯的資料在資料集中出現的次數佔總資料集的比重。或者說幾個資料關聯出現的概率。
  置信度體現了一個數據出現後,另一個數據出現的概率,或者說資料的條件概率
  提升度表示含有Y的條件下,同時含有X的概率,與X總體發生的概率之比
  Apriori演算法採用了迭代的方法,先搜尋出候選1項集及對應的支援度,剪枝去掉低於支援度的1項集,得到頻繁1項集。然後對剩下的頻繁1項集進行連線,得到候選的頻繁2項集,篩選去掉低於支援度的候選頻繁2項集,得到真正的頻繁二項集,以此類推,迭代下去,直到無法找到頻繁k+1項集為止,對應的頻繁k項集的集合即為演算法的輸出結果。

2.1 Apriori演算法流程
輸入:資料集合D,支援度閾值α
輸出:最大的頻繁k項集
1)掃描整個資料集,得到所有出現過的資料,作為候選頻繁1項集。k=1,頻繁0項集為空集。
2)挖掘頻繁k項集
a) 掃描資料計算候選頻繁k項集的支援度
b) 去除候選頻繁k項集中支援度低於閾值的資料集,得到頻繁k項集。如果得到的頻繁k項集為空,則直接返回頻繁k-1項集的集合作為演算法結果,演算法結束。如果得到的頻繁k項集只有一項,則直接返回頻繁k項集的集合作為演算法結果,演算法結束。
c) 基於頻繁k項集,連線生成候選頻繁k+1項集。
3) 令k=k+1,轉入步驟2。
從演算法的步驟可以看出,Aprior演算法每輪迭代都要掃描資料集,因此在資料集很大,資料種類很多的時候,演算法效率很低。
2.2 Apriori演算法總結

  Aprior演算法是一個非常經典的頻繁項集的挖掘演算法,很多演算法都是基於Aprior演算法而產生的,包括FP-Tree,GSP, CBA等。這些演算法利用了Aprior演算法的思想,但是對演算法做了改進,資料探勘效率更好一些,因此現在一般很少直接用Aprior演算法來挖掘資料了,但是理解Aprior演算法是理解其它Aprior類演算法的前提,同時演算法本身也不復雜,因此值得好好研究一番。

3 FP-growth演算法

  FP-growth演算法只需要對資料庫進行兩次遍歷,從而高效發現頻繁項集。
  FP-growth演算法是基於Apriori原理的,通過將資料集儲存在FP(Frequent Pattern)樹上發現頻繁項集,但不能發現數據之間的關聯規則。FP-growth演算法只需要對資料庫進行兩次掃描,而Apriori演算法在求每個潛在的頻繁項集時都需要掃描一次資料集,所以說Apriori演算法是高效的。其中演算法發現頻繁項集的過程是:
(1)構建FP樹;
(2)從FP樹中挖掘頻繁項集。
eg:

FP-growth演算法來高效發現頻繁項集

end