Machine Learning 简明教程
Machine Learning - Apriori Algorithm
Apriori 是一种流行的算法,用于关联规则挖掘机器学习。它可用于查找事务数据库中的频繁项集并基于这些项集生成关联规则。该算法最先由 Rakesh Agrawal 和 Ramakrishnan Srikant 于 1994 年提出。
Apriori 算法通过迭代扫描数据库来查找大小逐步增加的频繁项集来运行。它使用“自下而上”方法,从单个项开始,并逐渐向候选项集添加更多项,直到找不到更多的频繁项集。该算法还采用剪枝技术来减少需要检查的候选项集数量。
下面是 Apriori 算法中涉及的步骤的简要概述 −
-
扫描数据库以查找每个项的支持计数。
-
根据最小支持阈值生成一组频繁的 1 项集。
-
通过合并频繁的 1 项集来生成一组候选 2 项集。
-
再次扫描数据库以查找每个候选 2 项集的支持计数。
-
根据最小支持阈值生成一组频繁的 2 项集并修剪掉所有不频繁的候选 2 项集。
-
重复步骤 3-5 以生成候选 k 项集和频繁 k 项集,直到找不到更多的频繁项集。
Example
在 Python 中,mlxtend 库提供了 Apriori 算法的实现。以下是如何结合使用 mlxtend 库和 sklearn 数据集在 iris 数据集上实现 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 加载了 iris 数据集,其中包含有关鸢尾花的信息。我们将数据集转换为一组事务,其中每个事务表示一朵花并包含其四个属性(花萼长度、花萼宽度、花瓣长度和花瓣宽度)以及目标标签(目标)的值。然后我们使用 one-hot 编码对事务进行编码,并使用 mlxtend 的 apriori 函数找到具有最小支持 0.3 的频繁项集。
此代码的输出将显示频繁项集及其对应的支持计数。由于 iris 数据集相对较小,我们只找到一个频繁项集 −