实验一:关联规则 (见U盘)

news/2024/5/8 22:00:14

实验名称                关联规则         

实验时间

 3  14  日星期 3.4

实验目的

利用 Python 对关联规则算法进行调用。能够使用 Python 调用关联规则算法。首先使用apriori ,fpgrowth 或者 fpmax 函数来找出频繁项集,然后使用 association_rules 函数来找出关联规则,最后对关联规则做一些过滤操作。

实验环境

Anaconda3

jupyter notebook

实验内容(步骤、方法、算法、程序)

首先使用apriori ,fpgrowth 或者 fpmax 函数来找出频繁项集,然后使用 association_rules 函数来找出关联规则,最后对关联规则做一些过滤的操作。

步骤 1 :

生成频繁项集

(1)首先创建一个由 fpgrowth 函数生成的频繁项集的DataFrame:

(2)接下来,我们可以使用mlxtend 库中的association_rules 函数来找出关联规则。

(3)我们可以看到,关联规则包括了前件、后件、支持度、置信度、提升度等信息。例如,第一条规则表示如果顾客购买了芸豆,那么他们很可能也会购买鸡蛋,置信度为 0.8,提升度为1.0。

步骤 2 :

过滤规则

(1)计算先行词长度。

(2)可以使用多重过滤选择。

部分源程序代码/实验配置

实验结果与结论

!pip install mlxtend

import pandas as pd

from mlxtend.frequent_patterns import apriori

from mlxtend.frequent_patterns import association_rules

import warnings

warnings.filterwarnings('ignore')

import pandas as pd

from mlxtend.preprocessing import TransactionEncoder

from mlxtend.frequent_patterns import apriori, fpmax, fpgrowth

#假设我们有一个超市销售记录的数据集,其中每个记录包含了顾客购买的商品清单。我们想要找出哪些商品经常一起被购买。

dataset = [['牛奶', '洋葱', '香料', '芸豆', '鸡蛋', '酸奶'],

['菠萝', '洋葱', '香料', '芸豆', '鸡蛋', '酸奶'], ['牛奶', '苹果', '芸豆', '鸡蛋'],

['牛奶', '黄瓜', '玉米', '芸豆', '酸奶'],

['玉米', '洋葱', '芸豆', '冰淇淋', '鸡蛋']]

#我们可以使用 mlxtend 库中的 fpgrowth 函数来找出频繁项集和关联规则。

#将数据集转换为布尔矩阵

te = TransactionEncoder()

te_ary = te.fit(dataset).transform(dataset)

df = pd.DataFrame(te_ary, columns=te.columns_) # 使用 fpgrowth 算法找出频繁项集

"""

fpgrowth 算法参数解释:

1. transactions:指待挖掘的数据集,可以是一个 DataFrame 或者一个 List,其中每一行代表一个事务,每一列代表一个项。

2. min_support:指频繁项集的最小支持度,用来筛选频繁项集。默认值为 0.5。

3. use_colnames:指是否使用列名作为项集的元素,如果为 True,则返回结果中的项集元素为列名,否则为列的索引。默认值为 False。

4. max_len:指频繁项集中包含的最大项数,用来控制算法的搜索空间。默认值为 None,表示不限制最大项数。

5. verbose:指是否输出详细的运行日志,如果为 True,则输出运行过程中的详细信息,否则不输出。默认值为 0。

6. 返回值:返回一个 DataFrame,其中包含了所有满足最小支持度要求的频繁项集及其支持度。"""

frequent_itemsets = fpgrowth(df, min_support=0.6, use_colnames=True) ### 也可以采用 apriori 和 fpmax 算法

#frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True) #frequent_itemsets = fpmax(df, min_support=0.6, use_colnames=True) # 打印频繁项集

print(frequent_itemsets)

from mlxtend.frequent_patterns import association_rules # 找出关联规则

rules=association_rules(frequent_itemsets, metric="confidence",  min_threshold=0.7) # 打印关联规则

print(rules)

rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.1)

Rules

rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.1)

rules

rules["antecedent_len"] = rules["antecedents"].apply(lambda x: len(x))

rules

rules[ (rules['antecedent_len'] >= 2) &

(rules['confidence'] > 0.75) & (rules['lift'] > 1.2) ]

rules[rules['antecedents'] == {'鸡蛋', '芸豆'}]

antecedent_sele = rules['antecedents'] == frozenset({'洋葱', '芸豆'}) # or frozenset({'芸豆', '洋葱'})

consequent_sele = rules['consequents'] == frozenset({'鸡蛋'})

final_sele = (antecedent_sele & consequent_sele)

rules.loc[ ~final_sele ]

实验心得与小结

我们在实验中学习了FP-Growth 关联,它利用 FP 树来存储频繁项集,从而减少搜索空间,提高搜索效率。除此之外,还可以将 FP-Growth 替换为Apriori 或者 FPMax,Apriori 它能够发现任意长度的频繁项集,并能够发现复杂的关联规则,FPMax 通过剪枝和过滤来减少搜索空间,从而提高了算法的效率,找到频繁模式的最大项集。

指导教师

评议

成绩评定:                 指导教师签名:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[JavaWeb学习日记]Vue工程,springboot工程整合Mybatis,数据库索引

目录 一.Vue工程 安装NodeJS与Vue-cli Vue项目创建 启动Vue项目:点击npm脚本serve 改端口:在vue.config.js下 Vue文件组成:templatescriptstyle 使用element 前端服务器当前使用Ngix 主要编写的文件 二.SpringBoot的Web工程 启动带…

[LeetCode][LCR156]序列化与反序列化二叉树

题目 LCR 156. 序列化与反序列化二叉树 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法…

离线安装数据库 mysql 5.7 linux

离线安装数据库 mysql 5.7 linux 方法一 参考链接Linux(Debian10.2)安装MySQL5.7.24环境 赋予文件执行权限chmod x 文件名 使用root用户sudo su解压文件tar xvf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz重命名mv mysql-5.7.42-linux-glibc2.12-x86_64 mysql将桌面的mys…

Qt 图形视图 /基于Qt示例DiagramScene解读图形视图框架

文章目录 概述从帮助文档看示例程序了解程序背景/功能理清程序概要设计 分析图形视图的协同运作机制如何嵌入到普通Widget程序中?形状Item和文本Item的插入和删除?连接线Item与形状Item的如何关联?如何绘制ShapeItem间的箭头线? 下…

http协议中的强缓存与协商缓存,带图详解

此篇抽自本人之前的文章:http面试题整理 。 别急着跳转,先把缓存知识学会了~ http中的缓存分为两种:强缓存、协商缓存。 强缓存 响应头中的 status 是 200,相关字段有expires(http1.0),cache-control&…

钡铼技术R40工业路由器4G WiFi一体,适用于各类工业场景

钡铼技术R40工业路由器是一款集4G网络连接和WiFi功能于一体的先进设备,旨在满足各类工业场景对稳定、高速网络连接的需求。作为一家致力于工业互联网解决方案的领先厂商,钡铼技术致力于为工业企业提供可靠的网络设备,以支持其数字化转型和智能…