当前位置:   article > 正文

Apriori学习笔记_apriori 置信度如何解释

apriori 置信度如何解释

Apriori学习笔记

一、前言

Apriori算法是一种用于挖掘关联规则的常用算法。它可以从大量的数据中发现物品之间的某些关联,如某些物品经常同时被购买,进而为商家提供促销方案。本篇博客将会详细介绍Apriori算法的原理以及应用场景,并给出一个简单的实现。

二、原理

2.1 支持度和置信度

在介绍Apriori算法之前,先来了解两个概念:支持度和置信度。

  • 支持度(support):指某个事件在所有样本中出现的频率;
  • 置信度(confidence):指A发生时B也发生的概率。

举个例子,假设我们有100个顾客购买了总共1000件商品,其中有10个顾客购买了牛奶,那么牛奶的支持度就是10%。又假设有5个顾客同时购买了牛奶和面包,那么“牛奶 -> 面包”的置信度就是50%。

2.2 Apriori算法流程

Apriori算法的核心思想是:如果一个项集是频繁的,那么它的所有子集也是频繁的。反之,如果一个项集不频繁,那么它的所有超集也不频繁。

Apriori算法的工作流程如下:

  1. 从数据集中找出所有支持度不低于给定阈值(通常是0.5或0.8)的候选1-项集;
  2. 针对候选k-项集(k > 1),生成长度为k+1的候选项集,并从中删除支持度不足的项集;
  3. 直到没有更多的频繁项集可以生成,结束算法。

其中,步骤1被称为“扫描”,步骤2被称为“连接”。

2.3 Apriori算法示例

假设有如下的交易记录:

事务ID   交易物品
1       {牛奶,鸡蛋,面包}
2       {鸡蛋,面包,尿布,啤酒}
3       {牛奶,尿布,啤酒,鸡蛋}
4       {面包,牛奶,尿布,鸡蛋}
5       {面包,啤酒,鸡蛋}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我们希望找出支持度不低于50%的频繁项集(即Apriori算法的第一步)。根据定义,每个物品本身就是一个1-项集,因此我们可以计算每个物品的支持度:

物品    支持度
啤酒    2/5 = 40%
尿布    3/5 = 60%
牛奶    3/5 = 60%
面包    4/5 = 80%
鸡蛋   4/5 = 80%
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

由此可知,只有面包和鸡蛋两个物品满足支持度不低于50%的条件。因此我们可以生成候选2-项集:

候选2-项集   支持度
{面包, 鸡蛋}   2/5 = 40%
{面包, 牛奶}   2/5 = 40%
{面包, 尿布}   2/5 = 40%
{鸡蛋, 牛奶}   2/5 = 40%
{鸡蛋, 尿布}   3/5 = 60%
{牛奶, 尿布}   2/5 = 40%
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以看出,只有{鸡蛋, 尿布}这个候选2-项集满足支持度不低于50%的条件,因此它是频繁的。接着我们可以针对它生成候选3-项集:

候选3-项集      支持度
{鸡蛋,牛奶,尿布}   2/5 = 40%
  • 1
  • 2

由于再没有其他频繁项集可以被生成,因此算法结束。

2.4 Apriori算法优化

Apriori算法的计算复杂度随着候选项集大小的增加而呈指数级增长。为了提高效率,我们可以采用以下两种优化方法:

  • 剪枝(Pruning):在扫描数据集时,如果一个k-项集不满足支持度要求,那么它的所有超集也不可能满足条件;
  • 累加(Counting):在扫描数据集时,对于每个候选项集,只需要记录它在支持度计算中的累加值,而不必记录所有包含它的事务ID。这样可以节省大量的存储空间和计算时间。

三、应用场景

Apriori算法可以应用于许多领域

其中,商业管理和电子商务是Apriori算法的主要应用领域。它可以被用于:

  • 商品推荐系统;
  • 促销策略制定;
  • 购物篮分析等。

此外,Apriori算法在分类、聚类、异常检测等领域也有一定的应用。

四、简单实现

下面是一个Python实现的示例。我们使用pandas库加载交易数据,并利用mlxtend库中的apriori()函数计算频繁项集:

import pandas as pd
from mlxtend.frequent_patterns import apriori

# 加载交易数据
data = pd.read_csv('transactions.csv', header=None)

# 将交易数据转换为0/1编码的矩阵形式
X = pd.get_dummies(data.stack()).sum(level=0).clip(0, 1)

# 计算频繁项集
frequent_items = apriori(X, min_support=0.5, use_colnames=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

五、总结

Apriori算法是一种简单而有效的关联规则挖掘算法,尤其适用于处理大规模数据。但是,它需要扫描候选项集很多次,计算量大,因此效率较低。在实际使用中,我们可以采用各种优化技巧来提高算法效率,例如FP-growth算法、Eclat算法等。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号