Apriori 算法在机器学习中的应用2025年3月17日 | 阅读 8 分钟 Apriori 算法使用频繁项集来生成关联规则,它被设计用于处理包含事务的数据库。通过这些关联规则,它可以确定两个对象之间连接的强弱。该算法使用广度优先搜索和哈希树来有效地计算项集关联。这是一个从大型数据集中查找频繁项集的迭代过程。 该算法由R. Agrawal 和 Srikant 于1994 年提出。它主要用于购物篮分析,并有助于查找可以一起购买的产品。它还可以用于医疗保健领域,用于查找患者的药物反应。 什么是频繁项集? 频繁项集是指支持度大于阈值或用户指定的最小支持度的项集。这意味着如果 A 和 B 是频繁项集,那么单独的 A 和 B 也应该是频繁项集。 假设有两个事务:A= {1,2,3,4,5},B= {2,3,7},在这两个事务中,2 和 3 是频繁项集。 注意:为了更好地理解 Apriori 算法以及支持度和置信度等相关术语,建议先了解关联规则学习。Apriori 算法步骤Apriori 算法的步骤如下: 步骤 1:确定事务数据库中项集的支持度,并选择最小支持度和置信度。 步骤 2:选取事务中支持度大于最小支持度或选定支持度的所有项集。 步骤 3:查找这些子集中置信度大于阈值或最小置信度的所有规则。 步骤 4:按提升度(lift)的降序对规则进行排序。 Apriori 算法工作原理我们将通过一个例子和数学计算来理解 Apriori 算法。 示例:假设我们有以下数据集,其中包含各种事务,并且我们需要从此数据集中使用 Apriori 算法查找频繁项集并生成关联规则。 ![]() 解决方案步骤 1:计算 C1 和 L1
步骤 2:候选集生成 C2 和 L2
步骤 3:候选集生成 C3 和 L3
步骤 4:查找子集的关联规则要生成关联规则,首先,我们将创建一个新表,其中包含来自已出现组合 {A, B, C} 的可能规则。对于所有规则,我们将使用公式sup(A ^B)/A 计算置信度。在计算了所有规则的置信度值后,我们将排除置信度低于最小阈值(50%)的规则。 考虑下表
由于给定的阈值或最小置信度为 50%,因此前三条规则A ^B → C、B^C → A 和 A^C → B 可被视为给定问题的强关联规则。 Apriori 算法的优点
Apriori 算法的缺点
Apriori 算法的 Python 实现现在我们将看到 Apriori 算法的实际实现。为了实现这一点,我们有一个零售商的问题,他希望找到他的商店产品之间的关联,以便他可以向客户提供“购买此商品即可获得那个商品”的优惠。 零售商拥有一个包含客户交易列表的数据集信息。在数据集中,每一行显示客户购买的产品或客户进行的交易。为了解决这个问题,我们将执行以下步骤:
1. 数据预处理步骤第一步是数据预处理。在此步骤下,我们将首先进行库的导入。代码如下:
在导入库之前,我们将使用下面的代码行来安装apyori 包以供进一步使用,因为 Spyder IDE 中不包含它。 以下是用于实现将用于模型各种任务的库的代码。
在上面的代码中,第一行显示将数据集导入 pandas 格式。代码的第二行用于此目的,因为我们将用于训练模型的 apriori() 函数需要列表格式的数据集。因此,我们创建了一个空的交易列表。此列表将包含从 0 到 7500 的所有项集。这里我们取 7501,因为在 Python 中,最后一个索引不被考虑。 数据集看起来像下面的图片。 ![]() 2. 在数据集上训练 Apriori 模型要训练模型,我们将使用从apyroi 包导入的apriori 函数。此函数将返回用于训练模型在数据集上的规则。请看下面的代码: 在上面的代码中,第一行是导入 apriori 函数。第二行,apriori 函数返回输出作为规则。它接受以下参数:
3. 可视化结果现在我们将可视化我们的 apriori 模型输出。这里我们将遵循一些其他步骤,如下所示:
通过执行上述代码行,我们将获得 9 条规则。请看下面的输出: 输出 [RelationRecord(items=frozenset({'chicken', 'light cream'}), support=0.004533333333333334, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'chicken'}), confidence=0.2905982905982906, lift=4.843304843304844)]), RelationRecord(items=frozenset({'escalope', 'mushroom cream sauce'}), support=0.005733333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'mushroom cream sauce'}), items_add=frozenset({'escalope'}), confidence=0.30069930069930073, lift=3.7903273197390845)]), RelationRecord(items=frozenset({'escalope', 'pasta'}), support=0.005866666666666667, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'escalope'}), confidence=0.37288135593220345, lift=4.700185158809287)]), RelationRecord(items=frozenset({'fromage blanc', 'honey'}), support=0.0033333333333333335, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fromage blanc'}), items_add=frozenset({'honey'}), confidence=0.2450980392156863, lift=5.178127589063795)]), RelationRecord(items=frozenset({'ground beef', 'herb & pepper'}), support=0.016, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'ground beef'}), confidence=0.3234501347708895, lift=3.2915549671393096)]), RelationRecord(items=frozenset({'tomato sauce', 'ground beef'}), support=0.005333333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'ground beef'}), confidence=0.37735849056603776, lift=3.840147461662528)]), RelationRecord(items=frozenset({'olive oil', 'light cream'}), support=0.0032, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'olive oil'}), confidence=0.20512820512820515, lift=3.120611639881417)]), RelationRecord(items=frozenset({'olive oil', 'whole wheat pasta'}), support=0.008, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'olive oil'}), confidence=0.2714932126696833, lift=4.130221288078346)]), RelationRecord(items=frozenset({'pasta', 'shrimp'}), support=0.005066666666666666, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'shrimp'}), confidence=0.3220338983050848, lift=4.514493901473151)])] 正如我们所见,上面的输出格式不易理解。因此,我们将以合适的格式打印所有规则。
输出 通过执行上述代码行,我们将获得下面的输出: Rule: chicken -> light cream Support: 0.004533333333333334 Confidence: 0.2905982905982906 Lift: 4.843304843304844 ===================================== Rule: escalope -> mushroom cream sauce Support: 0.005733333333333333 Confidence: 0.30069930069930073 Lift: 3.7903273197390845 ===================================== Rule: escalope -> pasta Support: 0.005866666666666667 Confidence: 0.37288135593220345 Lift: 4.700185158809287 ===================================== Rule: fromage blanc -> honey Support: 0.0033333333333333335 Confidence: 0.2450980392156863 Lift: 5.178127589063795 ===================================== Rule: ground beef -> herb & pepper Support: 0.016 Confidence: 0.3234501347708895 Lift: 3.2915549671393096 ===================================== Rule: tomato sauce -> ground beef Support: 0.005333333333333333 Confidence: 0.37735849056603776 Lift: 3.840147461662528 ===================================== Rule: olive oil -> light cream Support: 0.0032 Confidence: 0.20512820512820515 Lift: 3.120611639881417 ===================================== Rule: olive oil -> whole wheat pasta Support: 0.008 Confidence: 0.2714932126696833 Lift: 4.130221288078346 ===================================== Rule: pasta -> shrimp Support: 0.005066666666666666 Confidence: 0.3220338983050848 Lift: 4.514493901473151 ===================================== 从上面的输出,我们可以分析每条规则。第一条规则,即Light cream → chicken,表明大多数客户经常购买 Light cream 和 chicken。此规则的支持度为0.0045,置信度为29%。因此,如果客户购买 Light cream,则有 29% 的几率他也会购买 chicken,并且它在交易中出现了 0.0045 次。我们也可以在其他规则中看到这些。 下一个主题关联规则学习 |
我们请求您订阅我们的新闻通讯以获取最新更新。