機器學習 - Apriori 演算法



Apriori 是一種流行的演算法,用於機器學習中的關聯規則挖掘。它用於在交易資料庫中查詢頻繁項集,並根據這些項集生成關聯規則。該演算法由 Rakesh Agrawal 和 Ramakrishnan Srikant 於 1994 年首次提出。

Apriori 演算法透過迭代掃描資料庫以查詢越來越大的頻繁項集來工作。它使用“自底向上”的方法,從單個專案開始,逐漸向候選項集新增更多專案,直到找不到更多頻繁項集。該演算法還採用修剪技術來減少需要檢查的候選項集的數量。

以下是 Apriori 演算法涉及的步驟概述 -

  • 掃描資料庫以查詢每個專案的支援度計數。

  • 根據最小支援度閾值生成一組頻繁的 1-項集。

  • 透過組合頻繁的 1-項集生成一組候選的 2-項集。

  • 再次掃描資料庫以查詢每個候選 2-項集的支援度計數。

  • 根據最小支援度閾值生成一組頻繁的 2-項集,並修剪任何不是頻繁的候選 2-項集。

  • 重複步驟 3-5 以生成候選 k-項集和頻繁 k-項集,直到找不到更多頻繁項集。

示例

在 Python 中,mlxtend 庫提供了 Apriori 演算法的實現。以下是如何在 sklearn 資料集結合 mlxtend 庫在鳶尾花資料集上實現 Apriori 演算法的示例。

from mlxtend.frequent_patterns import apriori
from mlxtend.preprocessing import TransactionEncoder
from sklearn import datasets

# Load the iris dataset
iris = datasets.load_iris()

# Convert the dataset into a list of transactions
transactions = []
for i in range(len(iris.data)):
   transaction = []
   transaction.append('sepal_length=' + str(iris.data[i][0]))
   transaction.append('sepal_width=' + str(iris.data[i][1]))
   transaction.append('petal_length=' + str(iris.data[i][2]))
   transaction.append('petal_width=' + str(iris.data[i][3]))
   transaction.append('target=' + str(iris.target[i]))
   transactions.append(transaction)
# Encode the transactions using one-hot encoding
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df = pd.DataFrame(te_ary, columns=te.columns_)

# Find frequent itemsets with a minimum support of 0.3
frequent_itemsets = apriori(df, min_support=0.3, use_colnames=True)

# Print the frequent itemsets
print(frequent_itemsets)

在此示例中,我們從 sklearn 載入鳶尾花資料集,其中包含有關鳶尾花的資訊。我們將資料集轉換為交易列表,其中每個交易代表一朵花,幷包含其四個屬性(萼片長度、萼片寬度、花瓣長度和花瓣寬度)以及目標標籤(target)的值。然後,我們使用獨熱編碼對交易進行編碼,並使用 mlxtend 中的 apriori 函式找到最小支援度為 0.3 的頻繁項集。

此程式碼的輸出將顯示頻繁項集及其對應支援度計數。由於鳶尾花資料集相對較小,我們只找到一個頻繁項集 -

輸出

   support   itemsets
0  0.333333  (target=0)
1  0.333333  (target=1)
2  0.333333  (target=2)

這表明資料集中 33% 的交易同時包含花瓣長度值為 1.4 和目標標籤為 0(對應於鳶尾花資料集中山鳶尾物種)。

Apriori 演算法廣泛用於市場購物籃分析,以識別客戶購買行為中的模式。例如,零售商可以使用該演算法查詢經常一起購買的商品,以便共同推廣以增加銷售額。該演算法也可用於醫療保健、金融和社交媒體等其他領域,以識別模式並從大型資料集中生成見解。

廣告