【数据挖掘】关联模式评估方法及Apriori算法超市购物应用实战(超详细 附源码)

简介: 【数据挖掘】关联模式评估方法及Apriori算法超市购物应用实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

大部分关联规则挖掘算法都使用支持度-置信度框架。尽管最小支持度和置信度阈值可以排除大量无趣规则的探查,但仍然会有一些用户不感兴趣的规则存在。当使用低支持度阈值挖掘或挖掘长模式时,这种情况尤为严重

强关联规则不一定是有趣的,并且只有用户才能够评判一个给定的规则是否有趣

从关联分析到相关分析

由于支持度和置信度还不足以过滤掉无趣的关联规则,因此,可以使用相关性度量来扩展关联规则的支持度-置信度框架。相关规则框架为:

1:提升度

2:使用卡方进行检验

Apriori算法应用

在Pyhton中进行关联规则挖掘时需要用到apyori包,apyori包的安装方式为:

pip install apyori

首先导入包和相关数据 输出部分数据如下图所示

接着获取项集

返回结果result中的属性说明:

items – 项集,

frozenset对象,

可迭代取出子集;

support – 支持度,

float类型;

confidence – 置信度或可信度,

float类型;

ordered_statistics – 存在的关联规则,可迭代,迭代后

其元素的属性: items_base – 关联规则中的分母项集; confidence – 上面的分母规则所对应的关联规则的可信度

进行关联规则挖掘 输出如下

显示挖掘的关联规则 输出如下

部分代码如下

import pandas as pd
from apyori import apriori
df = pd.read_excel("data.xls")
df.head()
min_supp = 0.1  
min_conf = 0.1  
min_lift = 0.1  
result = list(apriori(transactions=transactions, min_support=min_supp, 
           min_confidence=min_conf, min_lift=min_lift))
result
supports=[]
confidences=[]
lifts=[]
bases=[]
adds=[]
for r in result:
    for x in r.ordered_statistics:
        supports.append(r.support)
        confidences.append(x.confidence)
        lifts.append(x.lift)
        bases.append(list(x.items_base))
        adds.append(list(x.items_add))
resultshow = pd.DataFrame({
    'support':supports,
    'confidence':confidences,
    'lift':lifts,
    'base':bases,
    'add':adds})

Apriori算法应用2

关联规则目前在scikit-learn中并没有实现

机器学习扩展库mlxtend

是一款高级的机器学习扩展库,可用于日常机器学习任务的主要工具,也可以作为sklearn的一个补充和辅助工具

mlxtend提供了多种分类和回归算法api,包括多层感知机、stacking分类器、逻辑回归等

使用如下命令安装

pip install mlxtend

我们以超市购物为场景来进行算法应用 计算频繁项集结果如下

结果如下

可见不同商品之间的组合关联程度不同 商家可以根据这个来调整货物的摆放

部分代码如下

mport pandas as pd
item_list = [['牛奶','面包'],
    ['面包','尿布','啤酒','土豆'],
    ['牛奶','尿布','啤酒','可乐'],
    me(item_list)
# from mlxtend.preprocessing import TransactionEncode
import mlxtend
te = mlxtend.preprocessing.TransactionEncoder()
df_tf = te.fit_transform(item_list)
df = pd.DataFrame(df_tf,columns=te.columns_)
display(df)
计算频繁项集
from mlxtend.frequent_patterns import apriori
# use_colnames=True表示使用元素名字,默认的False使用列名代表元素frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True)
frequent_itemsets.sort_values(by='support', ascending=False, inplace=True)
# 选择2频繁项集
print(frequent_itemsets[frequent_itemsets.itemsets.apply(lambd

总结

关联分析是数据挖掘体系中重要的组成部分之一,其代表性的案例即为“购物篮分析”,即通过搜索经常在一起购买的商品的集合,研究顾客的购买习惯

关联规则挖掘的过程主要包含两个阶段。第一阶段必须先从事务数据集中找出所有的频繁项,第二阶段再由这些频繁项产生强关联规则。这些规则满足最小支持度和最小置信度阈值

频繁项集的挖掘方法主要有Apriori算法、基于频繁模式增长算法如FP-Growth以及利用垂直数据格式的算法

Apriori算法是最早出现的关联规则挖掘算法。它利用逐层搜索的迭代方法找出事务集中项集的关系,并形成关联规则。Apriori算法利用了“频繁项集的所有非空子集也是频繁的”这一先验性质,迭代对k项频繁集连接生成k+1项候选集并进行剪枝,得到k+1项频繁集。最后利用频繁项集构造满足最小支持度和最小置信度的规则

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
20天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
38 3
|
24天前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
36 2
|
1月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
47 9
|
28天前
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
29 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
21天前
|
前端开发 算法 JavaScript
无界SaaS模式深度解析:算力算法、链接力、数据确权制度
私域电商的无界SaaS模式涉及后端开发、前端开发、数据库设计、API接口、区块链技术、支付和身份验证系统等多个技术领域。本文通过简化框架和示例代码,指导如何将核心功能转化为技术实现,涵盖用户管理、企业店铺管理、数据流量管理等关键环节。
|
2月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
51 4
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
32 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
3月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
427 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达