pythonapriori调⽤_通过Python中的Apriori算法进⾏关联规则
挖掘
关联规则挖掘是⼀种识别不同项⽬之间潜在关系的技术。以超级市场为例,客户可以在这⾥购买各种商品。通常,客户购买的商品有⼀种模式。例如,有婴⼉的母亲购买婴⼉产品,如⽜奶和尿布。少⼥可以购买化妆品,⽽单⾝汉可以购买啤酒和薯条等。总之,交易涉及⼀种模式。如果可以识别在不同交易中购买的物品之间的关系,则可以产⽣更多的利润。
例如,如果项⽬A和项⽬B的购买频率更⾼,则可以采取⼏个步骤来增加利润。例如:
A和B可以放在⼀起,这样,当客户购买其中⼀种产品时,他不必⾛很远就可以购买另⼀种产品。
购买某⼀种产品的⼈可以通过⼴告活动来定位以购买另⼀种产品。
如果客户购买了这两种产品,则可以在这些产品上提供折扣。
A和B都可以包装在⼀起。
识别产品之间的关联的过程称为关联规则挖掘。
关联规则挖掘的Apriori算法
已经开发出不同的统计算法来实现关联规则挖掘,⽽Apriori就是这样⼀种算法。在本⽂中,我们将研究Apriori算法背后的理论,稍后将在Python中实现Apriori算法。
先验算法理论
⽀持度
⽀持是指商品的默认受欢迎程度,可以通过查包含特定商品的交易数量除以交易总数来计算。假设我们想到对项⽬B的⽀持。可以将其计算为:
Support(B) = (Transactions containing (B))/(Total Transactions)
例如,如果在1000个事务中,有100个事务包含Ketchup,则对项⽬Ketchup的⽀持可以计算为:
Support(Ketchup) = (Transactions containingKetchup)/(Total Transactions) Support(Ketchup) = 100/1000 = 10%
置信度
置信度是指如果购买了商品A,也购买了商品B的可能性。可以通过到⼀起购买A和B的交易数量除以购买A的交易总数来计算。从数学上讲,它可以表⽰为:
Confidence(A→B) = (Transactions containing both (AandB))/(Transactions containing A)
回到我们的问题,我们有50笔交易,汉堡和番茄酱是⼀起购买的。在150笔交易中,会购买汉堡。然后我们可以发现购买汉堡时购买番茄酱的可能性可以表⽰为Burger-> Ketchup的置信度,并且可以⽤数学公式写成:
Confidence(Burger→Ketchup) = (Transactions containing both (BurgerandKetchup))/(Transactions containing A) Confidence(Burger→Ketchup) =50/150=33.3%
提升度
Lift(A -> B)指当出售A时B的出售⽐例的增加。提升(A –> B)可以通过除Confidence(A -> B)以来计算Support(B)。从数学上讲,它可以表⽰为:
Lift(A→B) = (Confidence (A→B))/(Support (B))
回到我们的汉堡和番茄酱问题,Lift(Burger -> Ketchup)可以计算为:
Lift(Burger→Ketchup) = (Confidence (Burger→Ketchup))/(Support (Ketchup)) Lift(Burger→Ketchup) = 33.3/10 = 3.33
Lift基本上告诉我们,⼀起购买汉堡和番茄酱的可能性是仅购买番茄酱的可能性的3.33倍。
Apriori算法涉及的步骤
对于⼤量数据,成千上万的交易中可能有数百个项⽬。Apriori算法尝试为每种可能的项⽬组合提取规则。例如,可以为项⽬1和项⽬2,项⽬1和项⽬3,项⽬1和项⽬4,然后是项⽬2和项⽬3,项⽬2和项⽬4,然后是项⽬1,项⽬2和项⽬3的组合计算提升。项⽬3;类似地,项⽬1,项⽬2和项⽬4,依此类推。
⽤Python实现Apriori算法
从理论上讲,现在是时候看看Apriori算法了。在本节中,我们将使⽤Apriori算法查规则,这些规则描述了在法国零售商店⼀周进⾏7500次交易的不同产品之间的关联。
另⼀个有趣的⼀点是,我们不需要编写脚本来为所有可能的项⽬组合计算⽀撑度,置信度和提升度。我们将使⽤⼀个现成的库,其中所有代码都已实现。
我指的是apyori库,可以在这⾥到源。我建议您在继续之前,在Python库的默认路径中下载并安装该库。
注意:本⽂中的所有脚本均已使⽤Spyder IDE for Python 执⾏。
请按照以下步骤在Python中实现Apriori算法:
导⼊库
与往常⼀样,第⼀步是导⼊所需的库。
导⼊数据集
现在,我们导⼊数据集执⾏以下脚本:
store_data = pd.read_csv('D:\\Datasets\\store_data.csv')
让我们调⽤该head()函数以查看数据集:
store_data.head()
上⾯的屏幕快照中显⽰了数据集的摘要。如果仔细查看数据,我们可以看到标题实际上是第⼀个事务。每⾏对应⼀个交易,每列对应于在该特定交易中购买的商品。在NaN告诉我们,列所代表的项⽬在具体的交易没有购买。
在此数据集中没有标题⾏。 如下所⽰:
store_data = pd.read_csv('D:\\Datasets\\store_data.csv', header=None)
现在执⾏head()函数:
store_data.head()
现在,我们将使⽤Apriori算法来出哪些商品通常⼀起出售,以便商店所有者可以采取⾏动将相关商品放在⼀起或⼀起做⼴告 。
数据处理
我们将要使⽤的Apriori库要求我们的数据集采⽤列表列表的形式,其中整个数据集是⼀个⼤列表,⽽数据集中的每个事务都是外部⼤列表中的⼀个内部列表。
应⽤
下⼀步是将Apriori算法应⽤于数据集。为此,我们可以使⽤apriori从apyori库导⼊的类。
在第⼆⾏中,我们将apriori类到的规则转换为,list因为这样更容易查看结果。
查看结果
⾸先让我们到apriori该类挖掘的规则总数。执⾏以下脚本:上⾯的脚本应返回48。每个项⽬对应⼀个规则。
让我们打印association_rules列表中的第⼀项以查看第⼀条规则。执⾏以下脚本:输出应如下所⽰:
RelationRecord(items=frozenset({'light cream','chicken'}), support=0.004532728969470737,
ordered_statistics[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'chicken'}),
confidence=0.29059829059829057, lift=4.84395061728395)])
列表中的第⼀项是包含三项的列表本⾝。列表的第⼀项显⽰规则中的杂货项⽬。
例如,从第⼀项开始,我们可以看到淡奶油和鸡⾁通常⼀起购买。这是有道理的,因为购买淡奶油的⼈对⾃⼰吃的东西很谨慎,因此他们更有可能购买鸡⾁即⽩⾁⽽不是红⾁即⽜⾁。或这可能意味着淡奶油通常⽤于鸡⾁⾷谱中。
第⼀条规则的⽀持值为0.0045。该数字是通过将含淡奶油的交易次数除以交易总数得出的。该规则的置信度为0.2905,这表明在所有包含轻奶油的交易中,29.05%的交易也包含鸡⾁。最终,提升4.84告诉我们,与默认销售鸡⾁的可能性相⽐,购买淡奶油的顾客购买鸡⾁的可能性⾼4.84倍。
以下脚本以更清晰的⽅式显⽰每个规则的规则,⽀撑,置信度和提升:
如果执⾏上述脚本,您将看到apriori该类返回的所有规则。apriori该类返回的前四个规则如下所⽰:
Rule: light cream -> chickenSupport: 0.004532728969470737Confidence: 0.29059829059829057Lift:
4.84395061728395=====================================Rule: mushroom cream sauce -> escalopeSupport: 0.005732568990801126Confidence: 0.3006993006993007Lift:
3.790832696715049=====================================Rule: escalope -> pastaSupport:
spyder python下载0.005865884548726837Confidence: 0.3728813559322034Lift:
4.700811850163794=====================================Rule: ground beef -> herb & pepperSupport:
0.015997866951073192Confidence: 0.3234501347708895Lift:
3.2919938411349285=====================================
我们已经讨论了第⼀条规则。现在让我们讨论第⼆条规则。第⼆条规则指出,经常购买蘑菇奶油酱和⽆⾻⽜排。蘑菇奶油酱的⽀持量是
0.0057。
结论
关联规则挖掘算法(例如Apriori)对于查数据项之间的简单关联⾮常有⽤。它们易于实现并且具有很⾼的解释能⼒。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。