Python Apriori 算法
本篇文章将讨论 apriori 算法在 Python 中的实现。
Apriori算法解释
Apriori 算法广泛用于购物篮分析,即分析哪些商品已售出以及哪些其他商品已售出。 对于想要通过将出售的商品彼此靠近放置或提供折扣来增加销售额的店主来说,这是一个有用的算法。
该算法指出,如果一个项集是频繁的,则所有非空子集也必须是频繁的。 让我们看一个小例子来帮助说明这个概念。
假设在我们的商店里,牛奶、黄油和面包经常一起出售。 这意味着牛奶、黄油、牛奶、面包、黄油、面包也经常一起出售。
Apriori 算法还指出,项集的频率永远不能超过其非空子集的频率。 我们可以通过对前面的示例进行更多扩展来进一步说明这一点。
在我们店里,牛奶、黄油和面包一起卖3次。 这意味着它的所有非空子集(例如牛奶、黄油、牛奶、面包、黄油、面包)一起至少被出售 3 次或更多。
Python 中的 Apriori 算法
在实现这个算法之前,我们需要了解apriori算法是如何工作的。
在算法开始时,我们指定支持阈值。 支持度阈值只是某项交易中出现的概率。
$$
Support(A) =(Number of Transactions Containing the item A) / (Total Number of Transactions)
$$
除了支持之外,还有其他衡量标准,例如信心和提升,但我们不需要担心本教程中的这些。
下面列出了实现 apriori 算法需要遵循的步骤。
- 我们的算法仅从 1 项集开始。 这里,1 表示项目集中的项目数。
- 从我们的数据中删除所有不满足最低支持要求的项目。
- 现在,我们的算法增加项集中的项数 (k),并重复步骤 1 和 2,直到达到指定的 k 或没有满足最低支持要求的项集。
用Python实现拓扑排序算法
为了实现 Apriori 算法,我们将使用 Python 的 apyori 模块。 它是一个外部模块,因此我们需要单独安装它。
安装 apyori 模块的 pip 命令如下。
pip install apyori
我们将使用 Kaggle 的 Market Basket 优化数据集。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from apyori import apriori
我们已经在上面给出的代码中导入了操作所需的所有库。 现在,我们需要使用 pandas 读取数据集。
这已在以下代码片段中实现。
market_data = pd.read_csv('Market_Basket_Optimisation.csv', header = None)
现在,让我们检查数据集中的交易总数。
len(market_data)
输出:
7501
输出显示数据集中有 7501 条记录。 这个数据只有两个小问题; 这些交易的长度是可变的。
考虑到现实世界的场景,这很有意义。
为了执行先验算法,我们需要将这些任意交易转换为等长度交易。 这已在以下代码片段中实现。
transacts = []
for i in range(0, len(market_data)):
transacts.append([str(market_data.values[i,j]) for j in range(0, 20)])
在上面的代码中,我们初始化了交易列表并在其中存储了长度为 20 的交易。 这里的问题是我们在少于 20 个项目的事务中插入空值。
但我们不必担心它,因为 apriori 模块会自动处理空值。
现在,我们使用 apriori 类构造函数从数据生成关联规则。 以下代码块对此进行了演示。
rules = apriori(transactions = transacts, min_support = 0.003, min_confidence = 0.2, min_lift = 3, min_length = 2, max_length = 2)
我们指定了构造函数的最小支持度、置信度和提升阈值的阈值。 我们还将项目集中的最小和最大项目数指定为 2,即,我们希望生成经常一起出售的项目对。
apriori 算法的关联规则存储在规则生成器对象内。 我们现在需要一种机制来将此规则转换为 pandas 数据框。
下面的代码片段显示了一个函数 inspect()
,它接受 apriori()
构造函数返回的生成器对象规则,并将其转换为pandas数据帧。
def inspect(output):
Left_Hand_Side = [tuple(result[2][0][0])[0] for result in output]
support = [result[1] for result in output]
confidence = [result[2][0][2] for result in output]
lift = [result[2][0][3] for result in output]
Right_Hand_Side = [tuple(result[2][0][1])[0] for result in output]
return list(zip(Left_Hand_Side, support, confidence, lift, Right_Hand_Side))
output = list(rules)
output_data = pd.DataFrame(inspect(output), columns = ['Left_Hand_Side', 'Support', 'Confidence', 'Lift', 'Right_Hand_Side'])
print(output_data)
输出:
Left_Hand_Side Support Confidence Lift Right_Hand_Side
0 light cream 0.004533 0.290598 4.843951 chicken
1 mushroom cream sauce 0.005733 0.300699 3.790833 escalope
2 pasta 0.005866 0.372881 4.700812 escalope
3 fromage blanc 0.003333 0.245098 5.164271 honey
4 herb & pepper 0.015998 0.323450 3.291994 ground beef
5 tomato sauce 0.005333 0.377358 3.840659 ground beef
6 light cream 0.003200 0.205128 3.114710 olive oil
7 whole wheat pasta 0.007999 0.271493 4.122410 olive oil
8 pasta 0.005066 0.322034 4.506672 shrimp
现在,我们可以按支持级别对此数据框进行排序,并使用以下代码显示数据集中的前 5 条记录。
print(output_data.nlargest(n = 5, columns = 'Lift'))
输出:
Left_Hand_Side Support Confidence Lift Right_Hand_Side
3 fromage blanc 0.003333 0.245098 5.164271 honey
0 light cream 0.004533 0.290598 4.843951 chicken
2 pasta 0.005866 0.372881 4.700812 escalope
8 pasta 0.005066 0.322034 4.506672 shrimp
7 whole wheat pasta 0.007999 0.271493 4.122410 olive oil
Apriori 是一种非常基本且简单的购物篮分析算法。 它可以提供有用的内部信息,以增加市场或商店中商品的销量。
该算法的唯一缺点是对于大型数据集需要大量内存。 这是因为它创建了很多频繁项的组合。
我们也遇到了这种限制,因为本篇文章旨在使用 UCI 在线零售数据集,但由于内存限制,我们必须将数据集更改为 market basket优化。
相关文章
在 Python 中创建键盘记录器
发布时间:2023/06/30 浏览次数:189 分类:Python
-
在Python中,我们可以读取用户输入并检测键盘和鼠标等硬件设备来开发交互式应用程序。 特别是,pynput 模块允许我们使用此类设备并使用函数检测按键和光标移动。本篇文章将介绍如何在 Py
检查Python中的变量是否为字符串
发布时间:2023/06/30 浏览次数:138 分类:Python
-
我们将通过示例介绍两种不同的方法来检查 Python 中的变量是否为字符串。检查Python中的变量是否为字符串 在 Python 中,每个变量都有一个数据类型。 数据类型表示变量内部存储的数据类型。
在 Python 中安装 YAML
发布时间:2023/06/30 浏览次数:122 分类:Python
-
我们将介绍 Python 中的 YAML。 我们还将介绍如何在不同设备上安装 YAML。Python 中的 YAML YAML 是一种序列化语言。
下载 Python 中的 Anaconda
发布时间:2023/06/30 浏览次数:60 分类:Python
-
本文将介绍 Anaconda 以及我们可以在 Python 中下载的不同版本。Python 中的 Anaconda Anaconda 是 Python 科学数据的来源。
使用 Python 截屏
发布时间:2023/06/30 浏览次数:169 分类:Python
-
本文将引导您完成使用 Python 截取屏幕截图必须遵循的所有步骤。 让我们开始!使用 Pyautogui 模块使用 Python 进行屏幕截图第一种方法使用 Python 提供的 pyauotgui 模块。
在 Python 中绘制水平线
发布时间:2023/06/30 浏览次数:157 分类:Python
-
我们将介绍如何在Python中创建一条水平线。 我们还将介绍 Python 中的 Matplotlib 库。Python 中的水平线 水平线是从左到右或从右到左的任何直线。
使用 Python 连接到 PostgreSQL 数据库
发布时间:2023/06/30 浏览次数:134 分类:Python
-
本文介绍了创建与 PostgreSQL 上的数据库的连接的过程。 我们需要安装 PostgreSQL 和创建数据库等先决条件,如下所述。在系统中安装 PostgreSQL
Python 中的 Rabin-Karp 算法
发布时间:2023/06/30 浏览次数:154 分类:Python
-
我们将介绍 Python 中的 Rabin-Karp 算法,并讨论如何在 Python 程序中使用它。Python 中的 Rabin-Karp 算法 Rabin-Karp 算法从给定的输入或值中查找特定的数字、字母或模式。
Python 中的后台进程
发布时间:2023/06/30 浏览次数:129 分类:Python
-
我们将介绍如何在后台运行Python脚本作为后台进程。 我们还将介绍Python中的pythonw。Python 中的后台进程