机器学习中的Apriori算法Apriori算法使用频繁项集来生成关联规则,它被设计为在包含事务的数据库上工作。在这些关联规则的帮助下,它确定两个对象的连接有多强或多弱。这个算法使用广度优先搜索和哈希树有效地计算项集关联。它是从大数据集中寻找频繁项集的迭代过程。 这个算法是由r . Agrawal和Srikant在这一年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算法生成关联规则: ![]() 解决方案:步骤1:计算C1和L1:
第二步:候选人C2和L2代:
step3:候选代C3、L3:
步骤4:查找子集的关联规则为了生成关联规则,首先,我们将创建一个新表,其中包含来自发生的组合{a, B.C}的可能规则。对于所有规则,我们将使用公式计算置信度sup(A ^B)/ sup(A ^B)在计算完所有规则的置信度值后,我们将排除置信度小于最小阈值(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函数将输出作为规则返回。它接受以下参数:
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次。我们也可以在其他规则中检查所有这些。
下一个话题
关联规则学习
|