Javatpoint标志
Javatpoint标志

机器学习中的Apriori算法

Apriori算法使用频繁项集来生成关联规则,它被设计为在包含事务的数据库上工作。在这些关联规则的帮助下,它确定两个对象的连接有多强或多弱。这个算法使用广度优先搜索哈希树有效地计算项集关联。它是从大数据集中寻找频繁项集的迭代过程。

这个算法是由r . AgrawalSrikant在这一年1994。它主要用于市场篮子分析并帮助找到那些可以一起购买的产品。它还可以用于医疗保健领域,为患者发现药物反应。

什么是频繁项集?

频繁项集是那些支持度大于阈值或用户指定的最小支持度的项。这意味着如果A和B是一起的频繁项集,那么单独的A和B也应该是频繁项集。

假设有两个事务:A= {1,2,3,4,5}, B={2,3,7},在这两个事务中,2和3是频繁项集。

注意:为了更好地理解apriori算法,以及相关的术语,如支持度和置信度,建议理解关联规则学习。

Apriori算法的步骤

下面是先验算法的步骤:

步骤1:确定事务数据库中项目集的支持度,并选择最小支持度和置信度。

步骤2:取事务中支持值高于最小支持值或选定支持值的所有支持。

步骤3:找出这些子集的所有置信值高于阈值或最小置信值的规则。

步骤4:按照升力递减的顺序对规则进行排序。

Apriori算法工作

我们将通过一个例子和数学计算来理解先验算法:

例子:假设我们有如下的数据集,其中有各种各样的事务,我们需要从这个数据集中找到频繁的项集,并使用Apriori算法生成关联规则:

机器学习中的Apriori算法

解决方案:

步骤1:计算C1和L1:

  • 在第一步中,我们将创建一个表,其中包含给定数据集中每个项目集的支持计数(数据集中每个项目集单独出现的频率)。这张表叫做候选集或C1。
    机器学习中的Apriori算法
  • 现在,我们将取出所有支持计数大于最小支持(2)的项目集。它将为我们提供频繁项集L1。
    由于除E外,所有项集的支持数都大于或等于最小支持数,因此E项集将被删除。
    机器学习中的Apriori算法

第二步:候选人C2和L2代:

  • 在这一步中,我们将在L1的帮助下生成C2。在C2中,我们将以子集的形式创建L1的项集对。
  • 在创建子集之后,我们将再次从数据集的主事务表中找到支持计数,即这些对在给定数据集中一起出现的次数。因此,我们将得到C2的下表:
    机器学习中的Apriori算法
  • 同样,我们需要将C2支持计数与最小支持计数进行比较,比较后,支持计数较少的项目集将从表C2中消除。它会给出L2的下表
    机器学习中的Apriori算法

step3:候选代C3、L3:

  • 对于C3,我们将重复相同的两个过程,但是现在我们将用三个项目集的子集一起形成C3表,并将从数据集中计算支持计数。它将给出下表:
    机器学习中的Apriori算法
  • 现在我们将创建L3表。正如我们从上面的C3表中看到的,只有一个itemset组合的支持计数等于最小支持计数。所以L3只有一个组合,也就是,{a, b, c}。

步骤4:查找子集的关联规则

为了生成关联规则,首先,我们将创建一个新表,其中包含来自发生的组合{a, B.C}的可能规则。对于所有规则,我们将使用公式计算置信度sup(A ^B)/ sup(A ^B)在计算完所有规则的置信度值后,我们将排除置信度小于最小阈值(50%)的规则。

考虑下表:

规则 支持 信心
A ^ b→c 2 Sup{(A ^B) ^C}/ Sup (A ^B)= 2/4=0.5=50%
B^ c→a 2 Sup{(B^C) ^A}/ Sup (B^C) = 2/4=0.5=50%
A^ c→b 2 Sup{(A ^C) ^B}/ Sup (A ^C)= 2/4=0.5=50%
C→a ^ b 2 Sup{(C^(A ^B)}/ Sup (C)= 2/5=0.4=40%
→B C ^ 2 Sup{(A^(B ^C)}/ Sup (A)= 2/6=0.33=33.33%
B→B C ^ 2 Sup{(B^(B^ C)}/ Sup (B)= 2/7=0.28=28%

由于给定的阈值或最小置信度为50%,所以前三条规则A^ B→C, B^C→A, A^C→B可以看作是给定问题的强关联规则。

Apriori算法的优点

  • 这是一个很容易理解的算法
  • 该算法的连接和剪枝步骤可以很容易地在大型数据集上实现。

Apriori算法的缺点

  • 与其他算法相比,先验算法的工作速度较慢。
  • 由于它会多次扫描数据库,因此整体性能可能会降低。
  • 先验算法的时间复杂度和空间复杂度均为0 (2)D),这是非常高的。这里D表示数据库中的水平宽度。

Apriori算法的Python实现

现在我们将看到Apriori算法的实际实现。为了实现这一点,我们有一个零售商的问题,他想要找到他商店的产品之间的关联,以便他可以向他的客户提供“买这个,买那个”的报价。

零售商有一个数据集信息,其中包含他的客户所做的交易列表。在数据集中,每行显示客户购买的产品或客户进行的交易。为了解决这个问题,我们将执行以下步骤:

  • 数据预处理
  • 在数据集上训练Apriori模型
  • 可视化结果

1.数据预处理步骤:

第一步是数据预处理步骤。在此基础上,我们将首先执行库的导入。代码如下所示:

  • 导入库:

在导入库之前,我们将使用下面的代码行来安装apyori包进一步使用,因为Spyder IDE不包含它:

下面是实现将用于模型的不同任务的库的代码:

  • 导入数据集:
    现在,我们将为先验模型导入数据集。要导入数据集,这里将进行一些更改。数据集的所有行都显示客户进行的不同交易。第一行是第一个客户完成的事务,这意味着每个列没有特定的名称,并且有自己的单独值或产品详细信息(请参阅下面代码后面给出的数据集)。因此,我们需要在代码中提到没有指定标题。代码如下:

在上面的代码中,第一行显示将数据集导入为pandas格式。之所以使用第二行代码,是因为我们将用于训练模型的apriori()以事务列表的格式获取数据集。因此,我们已经创建了事务的空列表。此列表将包含从0到7500的所有项集。这里我们取7501,因为Python,则不考虑最后一个指标。

数据集如下图所示:

机器学习中的Apriori算法

2.在数据集上训练Apriori模型

为了训练模型,我们将使用先验的函数将从apyroi包中。这个函数将返回规则在数据集上训练模型。考虑下面的代码:

在上面的代码中,第一行是导入apriori函数。在第二行中,apriori函数将输出作为规则返回。它接受以下参数:

  • 交易:交易列表。
  • min_support=设置支持浮点数的最小值。这里我们使用0.003,通过将每个客户每周的3个事务与总事务数相乘来计算。
  • min_confidence:设置最小置信度。这里我们取0.2。它可以根据业务问题进行更改。
  • min_lift=设置最小升力值。
  • min_length=它需要最小数量的产品进行关联。
  • max_length=该关联需要最大数量的产品。

3.可视化结果

现在我们将可视化先验模型的输出。在这里,我们将遵循以下一些步骤:

  • 显示由先验函数产生的规则的结果

通过执行上面的代码行,我们将得到9条规则。考虑下面的输出:

输出:

[RelationRecord(items=frozenset({'鸡肉','淡奶油'}),support= 0.004533333333333333333334, ordered_statistics=[OrderedStatistic(items_base=frozenset({'淡奶油'}),items_add=frozenset({'鸡肉'}),confidence=0.2905982905982906, lift=4.843304843304844)], RelationRecord(items=frozenset({'牛排','蘑菇奶油酱'}),support=0.005733333333333333, ordered_statistics=[OrderedStatistic(items_base=frozenset({'蘑菇奶油酱'}),items_add=frozenset({'鸡肉'}),confidence=0.30069930069930073, lift=3.7903273197390845)]), RelationRecord(items=frozenset({'escalope', 'pasta'}), support= 0.005866666666666666666667, 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.003333333333335, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fromage blanc'})),items_add=frozenset({'蜂蜜'}),置置度=0.2450980392156863,lift=5.178127589063795)]), RelationRecord(items=frozenset({'碎牛肉','香草和胡椒'}),support=0.016, ordered_statistics=[OrderedStatistic(items_base=frozenset({'香草和胡椒'}),items_add=frozenset({'碎牛肉'}),置置度=0.3234501347708895,lift=3.2915549671393096]), RelationRecord(items=frozenset({'番茄酱','碎牛肉'}),support=0.00533333333333,ordered_statistics=[OrderedStatistic(items_base=frozenset({'番茄酱'}),items_add=frozenset({'牛肉粉'}),置置度=0.37735849056603776,lift=3.840147461662528)]), RelationRecord(items=frozenset({'橄榄油'}),support=0.0032, ordered_statistics=[OrderedStatistic(items_base=frozenset({'淡奶油'}),items_add=frozenset({'淡奶油'})),置置度= 0.205128205128205515,lift=3.120611639881417)]), RelationRecord(items=frozenset({'橄榄油'}),支持=0.008,ordered_statistics=[OrderedStatistic(items_base=frozenset({'全麦意大利面'}),items_add=frozenset({'全麦意大利面'}),信心=0.2714932126696833,lift=4.130221288078346]), RelationRecord(items=frozenset({'意大利面','虾'}),支持= 0.00506666666666666666,ordered_statistics=[OrderedStatistic(items_base=frozenset({'意大利面'}),items_add=frozenset({'虾'}),信心=0.3220338983050848,lift=4.514493901473151])]

正如我们所看到的,上面的输出是不容易理解的形式。因此,我们将以合适的格式打印所有规则。

  • 以更清晰的方式可视化规则、支持、信心、提升;

输出:

通过执行上面的代码行,我们将得到以下输出:

规则:鸡肉->淡奶油支撑:0.00453333333333333333334置信度:0.2905982906升降机:4.843304843304844 =====================================规则:肉排->蘑菇奶油酱支撑:0.00573333333333333330030073升降机:3.7903273197390845 =====================================规则:肉排->意大利面支撑:0.005866666666666667置信度:0.37288135593220345升降机:4.700185158809287 =====================================规则:fromage blanc ->蜂蜜支持:0.003333333333333333335置信度:0.2450980392156863 Lift: 5.178127589063795 =====================================规则:碎牛肉->香草和胡椒支持:0.016置信度:0.3234501347708895 Lift: 3.2915549671393096 =====================================规则:番茄酱->碎牛肉支持:0.00533333333333333333776 Lift: 3.840147461662528 =====================================规则:橄榄油->淡奶油支持:0.0032信心:0.20512820512820515提升:3.120611639881417  ===================================== 规则:橄榄油- >全麦面食支持:0.008信心:0.2714932126696833提升:4.130221288078346  ===================================== 规则:意大利面——>虾支持:0.005066666666666666信心:0.3220338983050848提升:4.514493901473151  =====================================

从上面的输出,我们可以分析每个规则。第一条规则是淡奶油→鸡肉,指出淡奶油和鸡肉是大多数顾客经常购买的。对该规则的支持是0.0045,信心是29%。因此,如果一个顾客购买淡奶油,他购买鸡肉的几率为29%,在交易中出现的次数为0.0045次。我们也可以在其他规则中检查所有这些。


下一个话题 关联规则学习





Youtube 视频加入我们的Youtube频道:现在加入

反馈


帮助别人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


b .技术/马华






Baidu
map